<?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>17640</bug_id>
          
          <creation_ts>2008-03-02 12:42:40 -0800</creation_ts>
          <short_desc>eliminate WebCoreFrameBridge</short_desc>
          <delta_ts>2008-03-12 20:49:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>beidson</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>72500</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-02 12:42:40 -0800</bug_when>
    <thetext>We need to get rid of the bridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72501</commentid>
    <comment_count>1</comment_count>
      <attachid>19485</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-02 13:18:11 -0800</bug_when>
    <thetext>Created attachment 19485
eliminate the WebCore -&gt; WebKit half of the bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72571</commentid>
    <comment_count>2</comment_count>
      <attachid>19485</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-03 06:37:15 -0800</bug_when>
    <thetext>Comment on attachment 19485
eliminate the WebCore -&gt; WebKit half of the bridge

There&apos;s a whole lotta patch here! Any chance we can get this broken up and reviewed/landed incrementally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72575</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-03 09:25:11 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; There&apos;s a whole lotta patch here! Any chance we can get this broken up and
&gt; reviewed/landed incrementally?

Sure, it could be broken up into 2 pieces, or 10, or 30.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72577</commentid>
    <comment_count>4</comment_count>
      <attachid>19496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-03 10:38:38 -0800</bug_when>
    <thetext>Created attachment 19496
smaller piece for Adam to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72578</commentid>
    <comment_count>5</comment_count>
      <attachid>19496</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-03 10:43:39 -0800</bug_when>
    <thetext>Comment on attachment 19496
smaller piece for Adam to review

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72579</commentid>
    <comment_count>6</comment_count>
      <attachid>19496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-03 10:48:20 -0800</bug_when>
    <thetext>Comment on attachment 19496
smaller piece for Adam to review

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72580</commentid>
    <comment_count>7</comment_count>
      <attachid>19497</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-03 10:48:50 -0800</bug_when>
    <thetext>Created attachment 19497
work in progress (ready to land, but needs to be broken in pieces for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72670</commentid>
    <comment_count>8</comment_count>
      <attachid>19515</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 03:25:48 -0800</bug_when>
    <thetext>Created attachment 19515
patch for just issuePasteCommand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72674</commentid>
    <comment_count>9</comment_count>
      <attachid>19517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 03:59:58 -0800</bug_when>
    <thetext>Created attachment 19517
patch for just dashboardRegionsChanged</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72675</commentid>
    <comment_count>10</comment_count>
      <attachid>19518</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 04:11:31 -0800</bug_when>
    <thetext>Created attachment 19518
patch moving code from the bridge to frame loader client on the WebKit side</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72678</commentid>
    <comment_count>11</comment_count>
      <attachid>19519</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 04:16:03 -0800</bug_when>
    <thetext>Created attachment 19519
patch for just window method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72680</commentid>
    <comment_count>12</comment_count>
      <attachid>19520</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 04:33:42 -0800</bug_when>
    <thetext>Created attachment 19520
patch for just installInFrame method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72682</commentid>
    <comment_count>13</comment_count>
      <attachid>19521</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 04:42:33 -0800</bug_when>
    <thetext>Created attachment 19521
patch for scrollOverflow method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72683</commentid>
    <comment_count>14</comment_count>
      <attachid>19522</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 04:52:15 -0800</bug_when>
    <thetext>Created attachment 19522
patch for createFrameView method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72684</commentid>
    <comment_count>15</comment_count>
      <attachid>19523</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 05:01:13 -0800</bug_when>
    <thetext>Created attachment 19523
patch for reapplyStyles method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72685</commentid>
    <comment_count>16</comment_count>
      <attachid>19515</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:31:23 -0800</bug_when>
    <thetext>Comment on attachment 19515
patch for just issuePasteCommand

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72686</commentid>
    <comment_count>17</comment_count>
      <attachid>19517</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:33:12 -0800</bug_when>
    <thetext>Comment on attachment 19517
patch for just dashboardRegionsChanged

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72687</commentid>
    <comment_count>18</comment_count>
      <attachid>19518</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:46:43 -0800</bug_when>
    <thetext>Comment on attachment 19518
patch moving code from the bridge to frame loader client on the WebKit side

This patch seems to be missing the removal of the implementation of -[WebFrameBridge windowObjectCleared]

Other than that, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72688</commentid>
    <comment_count>19</comment_count>
      <attachid>19519</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:47:29 -0800</bug_when>
    <thetext>Comment on attachment 19519
patch for just window method

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72689</commentid>
    <comment_count>20</comment_count>
      <attachid>19520</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:49:24 -0800</bug_when>
    <thetext>Comment on attachment 19520
patch for just installInFrame method

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72690</commentid>
    <comment_count>21</comment_count>
      <attachid>19521</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:50:41 -0800</bug_when>
    <thetext>Comment on attachment 19521
patch for scrollOverflow method

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72691</commentid>
    <comment_count>22</comment_count>
      <attachid>19522</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:51:34 -0800</bug_when>
    <thetext>Comment on attachment 19522
patch for createFrameView method

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72692</commentid>
    <comment_count>23</comment_count>
      <attachid>19523</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-04 06:52:15 -0800</bug_when>
    <thetext>Comment on attachment 19523
patch for reapplyStyles method

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72694</commentid>
    <comment_count>24</comment_count>
      <attachid>19515</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:19:20 -0800</bug_when>
    <thetext>Comment on attachment 19515
patch for just issuePasteCommand

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72695</commentid>
    <comment_count>25</comment_count>
      <attachid>19496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:19:35 -0800</bug_when>
    <thetext>Comment on attachment 19496
smaller piece for Adam to review

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72696</commentid>
    <comment_count>26</comment_count>
      <attachid>19517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:19:49 -0800</bug_when>
    <thetext>Comment on attachment 19517
patch for just dashboardRegionsChanged

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72697</commentid>
    <comment_count>27</comment_count>
      <attachid>19518</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:20:05 -0800</bug_when>
    <thetext>Comment on attachment 19518
patch moving code from the bridge to frame loader client on the WebKit side

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72698</commentid>
    <comment_count>28</comment_count>
      <attachid>19519</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:20:59 -0800</bug_when>
    <thetext>Comment on attachment 19519
patch for just window method

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72699</commentid>
    <comment_count>29</comment_count>
      <attachid>19520</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:22:30 -0800</bug_when>
    <thetext>Comment on attachment 19520
patch for just installInFrame method

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72700</commentid>
    <comment_count>30</comment_count>
      <attachid>19521</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:25:34 -0800</bug_when>
    <thetext>Comment on attachment 19521
patch for scrollOverflow method

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72701</commentid>
    <comment_count>31</comment_count>
      <attachid>19522</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:30:05 -0800</bug_when>
    <thetext>Comment on attachment 19522
patch for createFrameView method

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72702</commentid>
    <comment_count>32</comment_count>
      <attachid>19523</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:35:21 -0800</bug_when>
    <thetext>Comment on attachment 19523
patch for reapplyStyles method

Landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72703</commentid>
    <comment_count>33</comment_count>
      <attachid>19524</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 07:41:06 -0800</bug_when>
    <thetext>Created attachment 19524
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72707</commentid>
    <comment_count>34</comment_count>
      <attachid>19525</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-04 08:54:46 -0800</bug_when>
    <thetext>Created attachment 19525
patch for runOpenPanel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72812</commentid>
    <comment_count>35</comment_count>
      <attachid>19525</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-05 10:22:53 -0800</bug_when>
    <thetext>Comment on attachment 19525
patch for runOpenPanel

+void ChromeClient::runOpenPanel(PassRefPtr&lt;FileChooser&gt;)
+{
+}

Why is this empty implementation needed in ChromeMac.mm? Can&apos;t you make this method declaration pure virtual and just have WebChromeClient implement it?

r=me regardless</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73024</commentid>
    <comment_count>36</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-07 12:44:54 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Why is this empty implementation needed in ChromeMac.mm? Can&apos;t you make this
&gt; method declaration pure virtual and just have WebChromeClient implement it?

I could, but then I&apos;d have to add code to the &quot;SVG empty clients&quot;. I&apos;m really not sure what the best design for this is going forward, but for now I&apos;m not going to make this pure virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73026</commentid>
    <comment_count>37</comment_count>
      <attachid>19525</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-07 13:02:16 -0800</bug_when>
    <thetext>Comment on attachment 19525
patch for runOpenPanel

Clearing review flag since I committed revision 30875.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73063</commentid>
    <comment_count>38</comment_count>
      <attachid>19606</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-07 19:41:30 -0800</bug_when>
    <thetext>Created attachment 19606
patch for custom highlight calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73083</commentid>
    <comment_count>39</comment_count>
      <attachid>19606</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-08 06:11:05 -0800</bug_when>
    <thetext>Comment on attachment 19606
patch for custom highlight calls

Committed revision 30900.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73084</commentid>
    <comment_count>40</comment_count>
      <attachid>19609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-08 07:17:40 -0800</bug_when>
    <thetext>Created attachment 19609
patch that moves Java applet loading off the bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73085</commentid>
    <comment_count>41</comment_count>
      <attachid>19610</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-08 07:29:35 -0800</bug_when>
    <thetext>Created attachment 19610
patch that moves keyboard mode off the bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73198</commentid>
    <comment_count>42</comment_count>
      <attachid>19609</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-10 08:37:02 -0700</bug_when>
    <thetext>Comment on attachment 19609
patch that moves Java applet loading off the bridge

I am really not sure what is the correct possition for the * here, but since the following line has it next to the type, also for an ObjC type, it would be nice to be consistent.

 #if PLATFORM(MAC)
+        virtual jobject javaApplet(NSView *) { return 0; }
          virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse*) const = 0;

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73201</commentid>
    <comment_count>43</comment_count>
      <attachid>19610</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-10 08:49:36 -0700</bug_when>
    <thetext>Comment on attachment 19610
patch that moves keyboard mode off the bridge

I am not too crazy about having ChromeClient implementations in ChromeMac.mm, but I assume it is to get around having to implement it for the SVGImageEmptyClient.  If that is the case, we should have a new file, perhaps ChromeClientMac.mm, to contain these base implementations.

Could you also explain in the changelog why it is okay to remove 
-    ASSERT_MAIN_THREAD();
from the finalize method of WebFrameBridge.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73208</commentid>
    <comment_count>44</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-10 09:40:16 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; I am not too crazy about having ChromeClient implementations in ChromeMac.mm,
&gt; but I assume it is to get around having to implement it for the
&gt; SVGImageEmptyClient.

Sure, that&apos;s right. Not just for SVGImage, but in general to have a policy of default behavior rather than not compiling if you choose not to implement one of the client functions. I&apos;m not completely sure whether pure virtual functions or functions with a default implementation are best.

&gt; If that is the case, we should have a new file, perhaps
&gt; ChromeClientMac.mm, to contain these base implementations.

Sure, I will create a new file.

&gt; Could you also explain in the changelog why it is okay to remove 
&gt; -    ASSERT_MAIN_THREAD();
&gt; from the finalize method of WebFrameBridge.

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73215</commentid>
    <comment_count>45</comment_count>
      <attachid>19609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-10 10:02:35 -0700</bug_when>
    <thetext>Comment on attachment 19609
patch that moves Java applet loading off the bridge

Committed revision 30935.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73217</commentid>
    <comment_count>46</comment_count>
      <attachid>19610</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-10 10:38:52 -0700</bug_when>
    <thetext>Comment on attachment 19610
patch that moves keyboard mode off the bridge

Committed revision 30939.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73287</commentid>
    <comment_count>47</comment_count>
      <attachid>19656</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-10 22:13:06 -0700</bug_when>
    <thetext>Created attachment 19656
patch that removes the rest of the WebKit -&gt; WebCore bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73367</commentid>
    <comment_count>48</comment_count>
      <attachid>19674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 12:34:43 -0700</bug_when>
    <thetext>Created attachment 19674
patch that removes use of the bridge to go from an NSView to a WebCore::Frame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73382</commentid>
    <comment_count>49</comment_count>
      <attachid>19677</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 14:34:59 -0700</bug_when>
    <thetext>Created attachment 19677
revised patch that removes use of the bridge to go from an NSView to a WebCore::Frame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73420</commentid>
    <comment_count>50</comment_count>
      <attachid>19656</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 17:52:12 -0700</bug_when>
    <thetext>Comment on attachment 19656
patch that removes the rest of the WebKit -&gt; WebCore bridge

Committed revision 30975.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73422</commentid>
    <comment_count>51</comment_count>
      <attachid>19677</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-03-11 18:22:34 -0700</bug_when>
    <thetext>Comment on attachment 19677
revised patch that removes use of the bridge to go from an NSView to a WebCore::Frame

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73423</commentid>
    <comment_count>52</comment_count>
      <attachid>19677</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 18:25:44 -0700</bug_when>
    <thetext>Comment on attachment 19677
revised patch that removes use of the bridge to go from an NSView to a WebCore::Frame

Committed revision 30976.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73429</commentid>
    <comment_count>53</comment_count>
      <attachid>19693</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 20:35:18 -0700</bug_when>
    <thetext>Created attachment 19693
patch that removes every last use of the bridge in WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73430</commentid>
    <comment_count>54</comment_count>
      <attachid>19693</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-11 20:40:44 -0700</bug_when>
    <thetext>Comment on attachment 19693
patch that removes every last use of the bridge in WebCore

r=me. YEAH!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73431</commentid>
    <comment_count>55</comment_count>
      <attachid>19693</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 22:29:38 -0700</bug_when>
    <thetext>Comment on attachment 19693
patch that removes every last use of the bridge in WebCore

Committed revision 30980.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73471</commentid>
    <comment_count>56</comment_count>
      <attachid>19700</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-12 10:03:04 -0700</bug_when>
    <thetext>Created attachment 19700
patch that drives a stake through the heart of the bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73474</commentid>
    <comment_count>57</comment_count>
      <attachid>19700</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-03-12 10:17:58 -0700</bug_when>
    <thetext>Comment on attachment 19700
patch that drives a stake through the heart of the bridge

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73487</commentid>
    <comment_count>58</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-12 11:47:14 -0700</bug_when>
    <thetext>I can&apos;t land this until I get home tonight, because I saw at least one crash running regression tests. It should be trivial to fix.

So Hyatt, feel free to land your patch. I&apos;ll merge with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73540</commentid>
    <comment_count>59</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-12 20:49:26 -0700</bug_when>
    <thetext>Committed revision 31014.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19485</attachid>
            <date>2008-03-02 13:18:11 -0800</date>
            <delta_ts>2008-03-03 10:48:50 -0800</delta_ts>
            <desc>eliminate the WebCore -&gt; WebKit half of the bridge</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>152199</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA4LTAzLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjQwCisgICAgICAgICAgZWxp
bWluYXRlIFdlYkNvcmVGcmFtZUJyaWRnZQorCisgICAgICAgIFRoaXMgcGF0Y2ggZWxpbWluYXRl
cyB0aGUgcGFydHMgb2YgdGhlIGJyaWRnZSB1c2VkIGZvciBjYWxscyAqdG8qIFdlYktpdC4KKwor
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQuCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYWtlIEZpbGVDaG9vc2VyLmggInByaXZhdGUiLCBz
byB3ZSBjYW4gdXNlCisgICAgICAgIGl0IGZyb20gV2ViS2l0LgorICAgICAgICAqIGJpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOiBFbGltaW5hdGUgdW5uZWVkZWQgYnJpZGdlLXJlbGF0
ZWQgZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IEFkZGVk
IG5vdy1uZWVkZWQgaW5jbHVkZSBvZiBGcmFtZS5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOiBNb3ZlZCB0aGUgTWFjLXNwZWNpZmljIHBhcnQgb2Yg
dGhpcyB0byBFZGl0b3JNYWMuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogUmVtb3ZlZCBk
ZWZhdWx0IHZhbHVlIGZyb20gaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50LgorICAg
ICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBkZWNsYXJhdGlvbnMuIFJlbW92ZWQg
dXNlclZpc2libGVTdHJpbmcgZnVuY3Rpb24uCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rKTogVXBkYXRlZCBmb3IgRWRp
dG9yLmggY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rQW5kU2VsZWN0KTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpwYXN0ZSk6IEFkZGVkLiBDYWxscyBwYXN0ZTogb24gdGhlIGRvY3VtZW50
IHZpZXcgKG5vcm1hbGx5IGEKKyAgICAgICAgV2ViSFRNTFZpZXcpLiBXZSBzaG91bGQgZ2V0IHJp
ZCBvZiB0aGlzIGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnNldFNlbGVjdGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGln
aHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBuZXcgY2xp
ZW50IGZ1bmN0aW9ucyB0byByZXBsYWNlIGNhbGxzIHVwIHRvIFdlYktpdAorICAgICAgICB0aGF0
IHdlcmUgZm9ybWVybHkgaGFuZGxlZCBieSB0aGUgYnJpZGdlLgorCisgICAgICAgICogcGFnZS9G
cmFtZS5oOiBSZW1vdmVkIHVubmVlZGVkIGRlY2xhcmF0aW9ucy4gUmVtb3ZlZCBmdW5jdGlvbnMK
KyAgICAgICAgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQsIHdpbGxQb3B1cE1lbnUsIGN1c3RvbUhp
Z2hsaWdoTGluZVJlY3QsIHBhaW50Q3VzdG9tSGlnaGxpZ2h0LAorICAgICAgICBhbmQgaXNzdWVQ
YXN0ZUNvbW1hbmQuIENhbGxlcnMgbm93IHVzZSB0aGUgQ2hyb21lQ2xpZW50IGRpcmVjdGx5IGlu
c3RlYWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMpOiBDaGFuZ2VkIHRvIGNhbGwgZGFz
aGJvYXJkUmVnaW9uc0NoYW5nZWQKKyAgICAgICAgb24gQ2hyb21lQ2xpZW50IGFuZCB0byBvbmx5
IGNhbGwgaXQgd2hlbiB0aGUgcmVnaW9ucyBhY3R1YWxseSBjaGFuZ2VkLgorCisgICAgICAgICog
cGFnZS9tYWMvQ2hyb21lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpmb2N1c05T
Vmlldyk6IENoYW5nZWQgdG8gY2FsbCBmaXJzdFJlc3BvbmRlciBhbmQgbWFrZUZpcnN0UmVzcG9u
ZGVyCisgICAgICAgIHZpYSB0aGUgY2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRnZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojp3aWxsUG9wVXBNZW51KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmphdmFBcHBsZXQpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMpOiBDaGFuZ2VkIHRvIGNhbGwga2V5Ym9hcmRVSU1v
ZGUgdmlhIHRoZQorICAgICAgICBjbGllbnQgaW5zdGVhZCBvZiB0aGUgYnJpZGdlLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6IERp
dHRvLCBidXQgZm9yIGZpcnN0UmVzcG9uZGVyCisgICAgICAgIGFuZCBtYWtlRmlyc3RSZXNwb25k
ZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJX
aWRnZXRUcmFja2luZyk6IEdldCB0aGUgd2luZG93IGJ5IGNhbGxpbmcKKyAgICAgICAgd2luZG93
IG9uIHRoZSBOU1ZpZXcgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnJpZGdlLiBUaGUgV2ViS2l0IHNp
ZGUgd2Fzbid0IGRvaW5nIGFueXRoaW5nCisgICAgICAgIHNwZWNpYWwsIHNvIGEgY2FsbCB0byAt
W05TVmlldyB3aW5kb3ddIGlzIGZpbmUuCisKKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdl
dCk6IENyZWF0ZSB0aGUgSmF2YSBhcHBsZXQgdXNpbmcgdGhlCisgICAgICAgIGNsaWVudCBpbnN0
ZWFkIG9mIHRoZSBicmlkZ2UuCisKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UuaDogUmVtb3ZlZCBhIGxvdCBvZiBkZWNsYXJhdGlvbnMgZm9yIHRoaW5ncyB0aGF0IGFyZQor
ICAgICAgICBlaXRoZXIgdW51c2VkIG9yIG5lZWRlZCBvbmx5IGZvciBjYWxscyBmcm9tIFdlYkNv
cmUgdG8gV2ViS2l0LgorICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToK
KyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRyYWdTb3VyY2VNb3ZlZFRvOl0pOiBHZXQg
d2luZG93IGZyb20gLVtOU1ZpZXcgd2luZG93XSBpbnN0ZWFkCisgICAgICAgIG9mIHRoZSBicmlk
Z2UuCisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBkcmFnU291cmNlRW5kZWRBdDpvcGVy
YXRpb246XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKTogTW92ZWQgdGhpcyBo
ZXJlLiBJdCdzIG5vIGxvbmdlciBwbGF0Zm9ybS1zcGVjaWZpYy4KKyAgICAgICAgQWxzbyBzdGFy
dCB0aGUgcmVmY291bnQgYXQgMS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjcmVh
dGUpOiBBZGRlZCBhZG9wdFJlZiBzaW5jZSB0aGUgcmVmY291bnQgbm8gc3RhcnRzIGF0IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjp+RmlsZUNob29zZXIpOiBNb3ZlZCBoZXJl
LiBObyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oOiBSZW1vdmVkIG1fY29udHJvbGxlciwgd2hpY2ggd2FzIE1hY2ludG9zaC1zcGVj
aWZpYy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6IENoYW5nZWQgY29k
ZSB0byBmaW5kIHRoZSBXZWJDb3JlIGJ1bmRsZSB0byB1c2UKKyAgICAgICAgYSB0YXNrLXNwZWNp
ZmljIGVtcHR5IFdlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3MgaW5zdGVhZCBvZiB1c2luZyBXZWJD
b3JlRnJhbWVCcmlkZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsu
Y3BwOiBSZW1vdmVkIEZpbGVDaG9vc2VyIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLAorICAg
ICAgICBzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvRmlsZUNob29zZXJRdC5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3d4
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L0ZpbGVDaG9vc2VyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6Om9wZW5G
aWxlQ2hvb3Nlcik6IENhbGwgdGhlIGNocm9tZSBjbGllbnQgaW5zdGVhZCBvZiB0aGUKKyAgICAg
ICAgYnJpZGdlIHRvIHJ1biB0aGUgb3BlbiBwYW5lbC4gQWxsb3dzIHVzIHRvIGdldCByaWQgb2Yg
dGhlIFdlYkNvcmVPcGVuUGFuZWxDb250cm9sbGVyCisgICAgICAgIGNsYXNzIGFuZCBtX2NvbnRy
b2xsZXIgZGF0YSBtZW1iZXIgYW5kIG1vdmUgdGhlIGNvc250cnV0b3IvZGVzdHJ1Y3RvciB0byBw
bGF0Zm9ybS0KKyAgICAgICAgaW5kZXBlbmRlbnQgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9Qb3B1cE1lbnVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cp
OiBDYWxsIHdpbGxQb3BVcE1lbnUgb24gY2hyb21lIGNsaWVudCBpbnN0ZWFkIG9mIGZyYW1lLgor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6IENhbGwgc2V0U2VsZWN0ZWQgb24gY2hyb21lIGNsaWVu
dCBpbnN0ZWFkIG9mIGJyaWRnZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxp
Z2h0KTogQ2FsbCBjaHJvbWUgY2xpZW50IGluc3RlYWQgb2YgZnJhbWUuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50
Q3VzdG9tSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3Zl
cmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3I9PSk6
IEZpeGVkIHRvIGNoZWNrIHRoZSBjbGlwIHJlY3RhbmdsZSB0b28uCisgICAgICAgIChXZWJDb3Jl
OjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3IhPSk6IEFkZGVkLiBOZWVkZWQgZm9yIHRo
ZSBjb2RlIHRoYXQgY2hlY2tzCisgICAgICAgIGlmIHR3byB2ZWN0b3JzIG9mIHRoZXNlIGFyZSBp
ZGVudGljYWwgaW4gdXBkYXRlRGFzaGJvYXJkUmVnaW9ucy4KKwogMjAwOC0wMy0wMSAgTWFyayBS
b3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVy
LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsOCBAQCBfX1pON1dlYkNvcmUxMFN0
cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxh
dGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTFFZGl0Q29t
bWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRpdENvbW1hbmQ3dW5hcHBseUV2CitfX1pO
N1dlYkNvcmUxMUZpbGVDaG9vc2VyMTBjaG9vc2VGaWxlRVJLTlNfNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTExRmlsZUNob29zZXJEMUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFjb21wbGV0
ZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTJjYW5DYWNoZVBh
Z2VFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEyc2hvdWxkUmVsb2FkRVJLTlNfNEtVUkxF
UzNfCkBAIC0yNDQsNyArMjQ2LDYgQEAgX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgogX19a
TjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktTMF8KIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJl
c3VsdEQxRXYKIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTlNfMTJBdG9taWNTdHJp
bmdFYmJQTlNfOURPTVdpbmRvd0VSS05TXzZTdHJpbmdFamJiYmJiCi1fX1pOSzdXZWJDb3JlMTdS
ZXNvdXJjZUVycm9yQmFzZThsYXp5SW5pdEV2CiBfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VF
UktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U1
ZGVyZWZFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNERvY3VtZW50
TG9hZGVyMTJzZXRDb21taXR0ZWRFYgpAQCAtMzIzLDYgKzMyNCw3IEBAIF9fWk43V2ViQ29yZTE2
TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEsKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlv
bkMxRVJLTlNfNEtVUkxFTlNfMTROYXZpZ2F0aW9uVHlwZUUKIF9fWk43V2ViQ29yZTE2TmF2aWdh
dGlvbkFjdGlvbkMxRXYKIF9fWk43V2ViQ29yZTE2Y29sb3JGcm9tTlNDb2xvckVQN05TQ29sb3IK
K19fWk43V2ViQ29yZTE3ZXF1YWxJZ25vcmluZ0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9f
Wk43V2ViQ29yZTE4UGxhdGZvcm1Nb3VzZUV2ZW50QzFFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUx
OUNTU1N0eWxlRGVjbGFyYXRpb24xMXNldFByb3BlcnR5RVJLTlNfNlN0cmluZ0VTM19SaQogX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTFzaG93Q29uc29sZUV2CkBAIC02MDcsNiAr
NjA5LDcgQEAgX19aTks3V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxMWZyYW1lTG9hZAogX19aTks3
V2ViQ29yZTE1UHJvZ3Jlc3NUcmFja2VyMTdlc3RpbWF0ZWRQcm9ncmVzc0V2CiBfX1pOSzdXZWJD
b3JlMTVSZXNvdXJjZVJlcXVlc3QxMm5zVVJMUmVxdWVzdEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNv
dXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKK19fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJy
b3JCYXNlOGxhenlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UzdXJs
RXYKIF9fWk5LN1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2U3aXNFbXB0eUV2CiBfX1pOSzdX
ZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTdpc0luUGFzc3dvcmRGaWVsZEV2CkBAIC02ODks
NiArNjkyLDcgQEAgX19aTks3V2ViQ29yZTlTZWxlY3Rpb24xN2lzQ29udGVudEVkaXRhYgogX19a
Tks3V2ViQ29yZTlTZWxlY3Rpb24yM2lzQ29udGVudFJpY2hseUVkaXRhYmxlRXYKIF9fWk5LN1dl
YkNvcmU5U2VsZWN0aW9uN3RvUmFuZ2VFdgogX19aTks3V2ViQ29yZTlUaW1lckJhc2U4aXNBY3Rp
dmVFdgorX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVudEUKIF9maWxlbmFtZUJ5Rml4aW5nSWxs
ZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5z
ZW5zaXRpdmVTdWZmaXgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAJCTA2NjkzREJC
MEJGQkEyRjQwMDIxNjA3MiAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA2NjkzREI4MEJGQkEyRjQwMDIxNjA3
MiAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJMDY2OTNEQkMwQkZCQTJGNDAw
MjE2MDcyIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA2NjkzREI5MEJGQkEyRjQwMDIxNjA3MiAvKiBJbnNwZWN0
b3JDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMDY2OTNGN0IwQkZCQzkxNzAwMjE2MDcyIC8qIGluc3BlY3RvciBpbiBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDY2OTNGNDUwQkZCQzkxNjAw
MjE2MDcyIC8qIGluc3BlY3RvciAqLzsgfTsKLQkJMDY2Qzc3MkIwQUI2MDNCNzAwMjM4Q0M0IC8q
IEZpbGVDaG9vc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNjZDNzcyQTBBQjYwM0I3MDAyMzhDQzQgLyogRmlsZUNob29zZXIuaCAqLzsgfTsKKwkJ
MDY2Qzc3MkIwQUI2MDNCNzAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyQTBBQjYwM0I3MDAyMzhDQzQg
LyogRmlsZUNob29zZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwNjZDNzcyRDBBQjYwM0QyMDAyMzhDQzQgLyogRmlsZUNob29zZXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyQzBB
QjYwM0QyMDAyMzhDQzQgLyogRmlsZUNob29zZXJNYWMubW0gKi87IH07CiAJCTA2NkM3NzMwMEFC
NjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRTBBQjYwM0ZEMDAyMzhD
QzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwICovOyB9OwogCQkwNjZDNzczMTBBQjYw
M0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA2NkM3NzJGMEFCNjAzRkQwMDIzOENDNCAv
KiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oICovOyB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgogI2lt
cG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5o
IgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9vYmpjX2luc3RhbmNlLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9ydW50aW1l
X29iamVjdC5oPgpAQCAtNDYsMTAgKzQ1LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAg
ICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkgXAogICAgICAgICBw
cmludGYoIiVzOiVkOlslZF0gIEphdmFTY3JpcHQgZXhjZXB0aW9uOiAgJXNcbiIsIF9fRklMRV9f
LCBfX0xJTkVfXywgZ2V0cGlkKCksIGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKS0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKS0+dG9TdHJpbmcoZXhlYyku
YXNjaWkoKSk7CiAKLUBpbnRlcmZhY2UgV2ViRnJhbWUKLS0gKFdlYkNvcmVGcmFtZUJyaWRnZSAq
KV9icmlkZ2U7IC8vIGltcGxlbWVudGVkIGluIFdlYktpdAotQGVuZAotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIE5TT2JqZWN0Kj4gSlNXcmFwcGVy
TWFwOwpJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQu
aCIKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNs
dWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgpAQCAtNDIsNiArNDMsNyBAQAog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0
QXJlYUVsZW1lbnQuaCIKQEAgLTk0OSwzMCArOTUxLDI2IEBAIHZvaWQgRWRpdG9yOjpjb3B5KCkK
ICAgICBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogfQogCisjaWYgIVBMQVRGT1JN
KE1BQykKKwogdm9pZCBFZGl0b3I6OnBhc3RlKCkKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9j
dW1lbnQoKSk7Ci0gICAgRG9jTG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5k
b2NMb2FkZXIoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gdXNpbmcgdGhlIHBsYXRmb3Jt
IGluZGVwZW5kZW50IGNvZGUgYmVsb3cgcmVxdWlyZXMgbW92aW5nIGFsbCBvZgotICAgIC8vIFdF
QkhUTUxWaWV3OiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkIG92ZXIgdG8gUGFzdGVi
b2FyZE1hYy4KLSAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0gICAg
bV9mcmFtZS0+aXNzdWVQYXN0ZUNvbW1hbmQoKTsKLSAgICBsb2FkZXItPnNldEFsbG93U3RhbGVS
ZXNvdXJjZXMoZmFsc2UpOwotI2Vsc2UKICAgICBpZiAodHJ5REhUTUxQYXN0ZSgpKQogICAgICAg
ICByZXR1cm47ICAgICAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9wZXJhdGlvbgogICAgIGlmICgh
Y2FuUGFzdGUoKSkKICAgICAgICAgcmV0dXJuOworICAgIERvY0xvYWRlciogbG9hZGVyID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCk7CiAgICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxl
UmVzb3VyY2VzKHRydWUpOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCkt
PmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQo
UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKSwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAg
ICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3Rl
Ym9hcmQoKSk7CiAgICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKGZhbHNlKTsKLSNl
bmRpZgogfQogCisjZW5kaWYKKwogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoKQogewog
ICAgaWYgKCFjYW5QYXN0ZSgpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMzA3MDIpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDM1
ICsyNywyNSBAQAogI2RlZmluZSBFZGl0b3JfaAogCiAjaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNz
UG9saWN5LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJFZGl0QWN0aW9uLmgiCiAj
aW5jbHVkZSAiRWRpdG9yRGVsZXRlQWN0aW9uLmgiCiAjaW5jbHVkZSAiRWRpdG9ySW5zZXJ0QWN0
aW9uLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotY2xhc3MgTlNTdHJp
bmc7Ci1jbGFzcyBOU1VSTDsKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDbGlwYm9hcmQ7CiBjbGFzcyBEZWxldGVCdXR0
b25Db250cm9sbGVyOwotY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIEVkaXRDb21tYW5k
OwotY2xhc3MgRWRpdG9ySW50ZXJuYWxDb21tYW5kOwogY2xhc3MgRWRpdG9yQ2xpZW50OwotY2xh
c3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3MgRnJhbWU7CitjbGFzcyBFZGl0b3JJbnRlcm5hbENv
bW1hbmQ7CiBjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBQ
YXN0ZWJvYXJkOwotY2xhc3MgUmFuZ2U7Ci1jbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwotY2xh
c3MgU2VsZWN0aW9uOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CitjbGFzcyBUZXh0OwogCiBzdHJ1
Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmUgewogICAgIENvbXBvc2l0aW9uVW5kZXJsaW5lKCkgCkBA
IC0xMTMsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3V0ZGVudCgpOwogICAgIHZvaWQg
dHJhbnNwb3NlKCk7CiAKLSAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50KFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJlcGxhY2luZ0RP
TVJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb24gZ2l2ZW5BY3Rpb24pOworICAgIGJvb2wgc2hvdWxk
SW5zZXJ0RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgUGFzc1JlZlB0cjxS
YW5nZT4sIEVkaXRvckluc2VydEFjdGlvbik7CiAgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNv
bnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKSBjb25zdDsKICAgICBib29s
IHNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKSBjb25zdDsKICAgICBib29s
IHNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKikgY29uc3Q7CkBAIC0xODcsNyArMTc3LDcgQEAgcHVi
bGljOgogICAgIENvbW1hbmQgY29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBFZGl0
b3JDb21tYW5kU291cmNlKTsKIAogICAgIGJvb2wgaW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBF
dmVudCogdHJpZ2dlcmluZ0V2ZW50KTsKLSAgICBib29sIGluc2VydFRleHRXaXRob3V0U2VuZGlu
Z1RleHRFdmVudChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgRXZlbnQq
IHRyaWdnZXJpbmdFdmVudCA9IDApOworICAgIGJvb2wgaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5n
VGV4dEV2ZW50KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KTsKICAgICBib29sIGluc2VydExpbmVCcmVhaygpOwogICAgIGJvb2wg
aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CiAgICAgCkBAIC0yNTcsMTAgKzI0Nyw2IEBAIHB1
YmxpYzoKIAogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JDb21tYW5kKEV2ZW50Kik7CiAKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKik7
Ci0jZW5kaWYKLQogICAgIHZvaWQgYXBwZW5kVG9LaWxsUmluZyhjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHByZXBlbmRUb0tpbGxSaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyB5YW5r
RnJvbUtpbGxSaW5nKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lv
biAzMDcwMikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1
ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGb3JtYXRCbG9ja0NvbW1hbmQuaCIKICNpbmNsdWRlICJIVE1MRm9udEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCkBAIC05MzgsMTQgKzkzOSwx
NCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVW5zZWxlY3QoRnJhbWUqIGZyYW1lCiAKIHN0YXRpYyBi
b29sIGV4ZWN1dGVZYW5rKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQogewotICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdpdGhv
dXRTZW5kaW5nVGV4dEV2ZW50KGZyYW1lLT5lZGl0b3IoKS0+eWFua0Zyb21LaWxsUmluZygpLCBm
YWxzZSk7CisgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoZnJhbWUtPmVkaXRvcigpLT55YW5rRnJvbUtpbGxSaW5nKCksIGZhbHNlLCAwKTsKICAg
ICBmcmFtZS0+ZWRpdG9yKCktPnNldEtpbGxSaW5nVG9ZYW5rZWRTdGF0ZSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlWWFua0FuZFNlbGVjdChGcmFtZSogZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBm
cmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChmcmFtZS0+
ZWRpdG9yKCktPnlhbmtGcm9tS2lsbFJpbmcoKSwgdHJ1ZSk7CisgICAgZnJhbWUtPmVkaXRvcigp
LT5pbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoZnJhbWUtPmVkaXRvcigpLT55YW5r
RnJvbUtpbGxSaW5nKCksIHRydWUsIDApOwogICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0S2lsbFJp
bmdUb1lhbmtlZFN0YXRlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsOSBAQAogI2lt
cG9ydCAiRWRpdG9yLmgiCiAKICNpbXBvcnQgIkNsaXBib2FyZE1hYy5oIgotI2ltcG9ydCAiRWRp
dG9yQ2xpZW50LmgiCisjaW1wb3J0ICJEb2NMb2FkZXIuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCisj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSwxMyAr
NTEsNiBAQCBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsCiAgICAgcmV0
dXJuIG5ldyBDbGlwYm9hcmRNYWMoZmFsc2UsIFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdLCBwb2xpY3kpOwogfQogCi1OU1N0cmluZyogRWRpdG9yOjp1c2VyVmlzaWJsZVN0cmluZyhO
U1VSTCogbnNVUkwpCi17Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICByZXR1cm4gY2xpZW50
KCktPnVzZXJWaXNpYmxlU3RyaW5nKG5zVVJMKTsKLSAgICByZXR1cm4gbmlsOwotfQotCiBzdGF0
aWMgdm9pZCBpbml0aWFsaXplS2lsbFJpbmdJZk5lZWRlZCgpCiB7CiAgICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWRLaWxsUmluZyA9IGZhbHNlOwpAQCAtMTEwLDQgKzEwNSwyMCBAQCB2b2lkIEVk
aXRvcjo6c2hvd0NvbG9yUGFuZWwoKQogICAgIFtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNh
dGlvbl0gb3JkZXJGcm9udENvbG9yUGFuZWw6bmlsXTsKIH0KIAorLy8gRklYTUU6IFdlIHdhbnQg
dG8gdXNlIHRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlIGluc3RlYWQuIEJ1dCB3aGVuIHdl
IGxhc3QKKy8vIHRyaWVkIHRvIGRvIHNvIGl0IHNlZW1lZCB0aGF0IHdlIGZpcnN0IG5lZWQgdG8g
bW92ZSBtb3JlIG9mIHRoZSBsb2dpYyBmcm9tCisvLyAtW1dlYkhUTUxWaWV3LmNwcCBfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkXSBpbnRvIFBhc3RlYm9hcmRNYWMuCisKK3ZvaWQgRWRp
dG9yOjpwYXN0ZSgpCit7CisgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybjsKKyAgICBEb2NMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmRv
Y0xvYWRlcigpOworICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKKyAg
ICBbdmlldy0+Z2V0RG9jdW1lbnRWaWV3KCkgdHJ5VG9QZXJmb3JtOkBzZWxlY3RvcihwYXN0ZTop
IHdpdGg6bmlsXTsKKyAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzA3MDIp
CisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDYgKzM0
MywyNyBAQCB2b2lkIENocm9tZTo6cHJpbnQoRnJhbWUqIGZyYW1lKQogICAgIG1fY2xpZW50LT5w
cmludChmcmFtZSk7CiB9CiAKKy8vIC0tLS0tLS0tCisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpkYXNo
Ym9hcmRSZWdpb25zQ2hhbmdlZCgpCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRTZWxl
Y3RlZChXaWRnZXQqLCBib29sKQoreworfQorCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpjdXN0
b21IaWdobGlnaHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFJl
Y3QmKQoreworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6
OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29sKQoreworfQorCisvLyAtLS0t
LS0tLQorCiBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlcnJlcihQYWdl
KiBwYWdlLCBib29sIGRlZmVyU2VsZikKIHsKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogZ3Jv
dXAgPSBwYWdlLT5mcmFtZU5hbWVzcGFjZSgpOwpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNp
b24gMzA3MDIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDE5ICsyMiwzNSBAQAogI2RlZmluZSBDaHJvbWVDbGllbnRfaAogCiAjaW5jbHVkZSAi
Rm9jdXNEaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRl
ZiBjbGFzcyBfam9iamVjdCogam9iamVjdDsKKworI2lmbmRlZiBfX09CSkNfXworY2xhc3MgTlNN
ZW51OworY2xhc3MgTlNSZXNwb25kZXI7CitjbGFzcyBOU1ZpZXc7CisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIEZpbGVD
aG9vc2VyOwogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFz
cyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgTm9kZTsKICAg
ICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBXaWRnZXQ7CiAgICAg
CisgICAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlOwogICAgIHN0cnVjdCBGcmFtZUxvYWRS
ZXF1ZXN0OwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKLSAgICAKKwogICAgIGNsYXNzIENo
cm9tZUNsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVz
dHJveWVkKCkgPSAwOwpAQCAtMTA0LDYgKzEyMCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhc2hi
b2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVk
KFdpZGdldCosIGJvb2wpOworCisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGN1c3RvbUhpZ2hs
aWdodFJlY3QoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0
JiBsaW5lUmVjdCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChO
b2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QsCisgICAgICAgICAgICBib29sIGJlaGluZFRleHQs
IGJvb2wgZW50aXJlTGluZSk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHZpcnR1YWwg
S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKKyAgICAgICAgdmlydHVhbCBOU1Jlc3Bv
bmRlciAqZmlyc3RSZXNwb25kZXIoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VGaXJzdFJl
c3BvbmRlcihOU1Jlc3BvbmRlciAqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5l
bChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUG9w
VXBNZW51KE5TTWVudSAqKTsKKyAgICAgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNW
aWV3ICopOworI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgfkNocm9t
ZUNsaWVudCgpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3Jl
L3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAg
ICAgICAgICAgICAgMjAwMC0yMDAxIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgog
ICogICAgICAgICAgICAgICAgICAgICAyMDAwLTIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgPDFT
dGVpbkBnbXguZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjgsMjEgKzI4
LDE1IEBACiAjaWZuZGVmIEZyYW1lX2gKICNkZWZpbmUgRnJhbWVfaAogCi0jaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJFZGl0QWN0aW9uLmgiCiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisj
aW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiVGV4dEdyYW51bGFyaXR5LmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBzdHJ1Y3QgTlBPYmplY3Q7CiAKIG5hbWVzcGFjZSBL
SlMgewogCi0gICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CiAKICAgICBuYW1lc3BhY2UgQmluZGluZ3MgewpAQCAtNTQsMTcgKzQ4LDExIEBAIG5hbWVzcGFj
ZSBLSlMgewogCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNB
cnJheTsKLUBjbGFzcyBOU0RpY3Rpb25hcnk7Ci1AY2xhc3MgTlNNZW51OwotQGNsYXNzIE5TTXV0
YWJsZURpY3Rpb25hcnk7Ci1AY2xhc3MgTlNTdHJpbmc7CiBAY2xhc3MgV2ViQ29yZUZyYW1lQnJp
ZGdlOwogQGNsYXNzIFdlYlNjcmlwdE9iamVjdDsKICNlbHNlCiBjbGFzcyBOU0FycmF5OwogY2xh
c3MgTlNEaWN0aW9uYXJ5OwotY2xhc3MgTlNNZW51OwogY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFy
eTsKIGNsYXNzIE5TU3RyaW5nOwogY2xhc3MgV2ViQ29yZUZyYW1lQnJpZGdlOwpAQCAtNzUsNDAg
KzYzLDIwIEBAIHR5cGVkZWYgaW50IE5TV3JpdGluZ0RpcmVjdGlvbjsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBBbmltYXRpb25Db250cm9sbGVyOwotY2xhc3MgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFz
cyBDU1NTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBFZGl0b3I7Ci1jbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnRIYW5kbGVyOwotY2xh
c3MgRmxvYXRSZWN0OwogY2xhc3MgRnJhbWVMb2FkZXI7CiBjbGFzcyBGcmFtZUxvYWRlckNsaWVu
dDsKIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OwotY2xhc3MgRnJhbWVQcml2YXRlOwogY2xhc3MgRnJhbWVUcmVlOwotY2xhc3MgRnJhbWVW
aWV3OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xh
c3MgSW50UmVjdDsKIGNsYXNzIEtKU1Byb3h5OwotY2xhc3MgS1VSTDsKLWNsYXNzIE5vZGU7Ci1j
bGFzcyBQYWdlOwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbjsKIGNsYXNz
IFJlbmRlclBhcnQ7CiBjbGFzcyBTZWxlY3Rpb247CiBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVy
OwotY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBXaWRnZXQ7CiAKLXN0cnVjdCBGcmFtZUxvYWRSZXF1
ZXN0OwotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKIGNsYXNzIEZyYW1l
IDogcHVibGljIFJlZkNvdW50ZWQ8RnJhbWU+IHsKQEAgLTIwMSw4ICsxNjksNiBAQCBwdWJsaWM6
CiAKICAgICBTdHJpbmcgZG9jdW1lbnRUeXBlU3RyaW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIGRh
c2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7Ci0KICAgICB2b2lkIGNsZWFyU2NyaXB0UHJveHkoKTsK
ICAgICB2b2lkIGNsZWFyRE9NV2luZG93KCk7CiAKQEAgLTM2MSwyNiArMzI3LDE3IEBAIHB1Ymxp
YzoKIAogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5
KCk7CiAKLSAgICB2b2lkIHdpbGxQb3B1cE1lbnUoTlNNZW51Kik7Ci0KICAgICBOU0ltYWdlKiBz
ZWxlY3Rpb25JbWFnZShib29sIGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpIGNvbnN0OwogICAgIE5T
SW1hZ2UqIHNuYXBzaG90RHJhZ0ltYWdlKE5vZGUqLCBOU1JlY3QqIGltYWdlUmVjdCwgTlNSZWN0
KiBlbGVtZW50UmVjdCkgY29uc3Q7CiAKIHByaXZhdGU6ICAgIAogICAgIE5TSW1hZ2UqIGltYWdl
RnJvbVJlY3QoTlNSZWN0KSBjb25zdDsKIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8gQ2hyb21l
Ci0KLXB1YmxpYzoKLSAgICBGbG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0TGluZVJlY3QoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LCBOb2RlKik7Ci0g
ICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgYm9vbCB0
ZXh0LCBib29sIGxpbmUsIE5vZGUqKTsKLQogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRWRpdG9y
CiAKIHB1YmxpYzoKICAgICBOU0RpY3Rpb25hcnkqIGZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9u
U3RhcnQoKSBjb25zdDsKICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJlY3Rp
b25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQo
KTsKIAogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAzMDcwMikKKysrIFdl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAog
ICogICAgICAgICAgICAgICAgICAgICAxOTk5IExhcnMgS25vbGwgPGtub2xsQGtkZS5vcmc+CiAg
KiAgICAgICAgICAgICAgICAgICAgIDE5OTkgQW50dGkgS29pdmlzdG8gPGtvaXZpc3RvQGtkZS5v
cmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAg
ICAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAqICAg
ICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgpAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJQ
YXJ0T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTEwMjAsMTMgKzEwMjIs
MTggQEAgSW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0Rm9yTGF5ZQogCiB2b2lkIEZy
YW1lVmlldzo6dXBkYXRlRGFzaGJvYXJkUmVnaW9ucygpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvYy0+aGFzRGFzaGJvYXJkUmVnaW9ucygp
KSB7Ci0gICAgICAgIFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9uczsKLSAg
ICAgICAgZG9jLT5yZW5kZXJlcigpLT5jb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyhuZXdSZWdpb25z
KTsKLSAgICAgICAgZG9jLT5zZXREYXNoYm9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOwotICAgICAg
ICBtX2ZyYW1lLmdldCgpLT5kYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwotICAgIH0KKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQtPmhhc0Rhc2hib2FyZFJlZ2lvbnMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxE
YXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9uczsKKyAgICBkb2N1bWVudC0+cmVuZGVyZXIo
KS0+Y29sbGVjdERhc2hib2FyZFJlZ2lvbnMobmV3UmVnaW9ucyk7CisgICAgaWYgKG5ld1JlZ2lv
bnMgPT0gZG9jdW1lbnQtPmRhc2hib2FyZFJlZ2lvbnMoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGRvY3VtZW50LT5zZXREYXNoYm9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOworICAgIFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5kYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwog
fQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKSW5kZXg6IFdlYkNvcmUv
cGFnZS9tYWMvQ2hyb21lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvQ2hy
b21lTWFjLm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1i
YXNpYy1vZmZzZXQ6IDQgLSotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIy
LDggQEAKICNpbXBvcnQgIkNocm9tZS5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIK
LSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJDaHJvbWVDbGll
bnQuaCIKKyNpbXBvcnQgIkZpbGVDaG9vc2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzEsMjUgKzMxLDUwIEBAIHZvaWQgQ2hyb21lOjpmb2N1c05TVmlldyhOU1ZpZXcqIHZpZXcp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgV2ViQ29yZUZyYW1l
QnJpZGdlICpicmlkZ2UgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5icmlkZ2UoKTsKLSAgICBOU1Jl
c3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBbYnJpZGdlIGZpcnN0UmVzcG9uZGVyXTsKKyAgICBO
U1Jlc3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBjbGllbnQoKS0+Zmlyc3RSZXNwb25kZXIoKTsK
ICAgICBpZiAoZmlyc3RSZXNwb25kZXIgPT0gdmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFbdmlldyB3aW5kb3ddIHx8ICFbdmlldyBzdXBlcnZpZXddIHx8ICFbdmlldyBhY2NlcHRz
Rmlyc3RSZXNwb25kZXJdKQogICAgICAgICByZXR1cm47CiAKLSAgICBbYnJpZGdlIG1ha2VGaXJz
dFJlc3BvbmRlcjp2aWV3XTsKKyAgICBjbGllbnQoKS0+bWFrZUZpcnN0UmVzcG9uZGVyKHZpZXcp
OwogCiAgICAgLy8gU2V0dGluZyBmb2N1cyBjYW4gYWN0dWFsbHkgY2F1c2UgYSBzdHlsZSBjaGFu
Z2Ugd2hpY2ggbWlnaHQKICAgICAvLyByZW1vdmUgdGhlIHZpZXcgZnJvbSBpdHMgc3VwZXJ2aWV3
IHdoaWxlIGl0J3MgYmVpbmcgbWFkZQogICAgIC8vIGZpcnN0IHJlc3BvbmRlci4gVGhpcyBjb25m
dXNlcyBBcHBLaXQgc28gd2UgbXVzdCByZXN0b3JlCiAgICAgLy8gdGhlIG9sZCBmaXJzdCByZXNw
b25kZXIuCiAgICAgaWYgKCFbdmlldyBzdXBlcnZpZXddKQotICAgICAgICBbYnJpZGdlIG1ha2VG
aXJzdFJlc3BvbmRlcjpmaXJzdFJlc3BvbmRlcl07CisgICAgICAgIGNsaWVudCgpLT5tYWtlRmly
c3RSZXNwb25kZXIoZmlyc3RSZXNwb25kZXIpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorS2V5Ym9hcmRVSU1vZGUgQ2hyb21l
Q2xpZW50OjprZXlib2FyZFVJTW9kZSgpCit7CisgICAgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVm
YXVsdDsKK30KKworTlNSZXNwb25kZXIgKkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIoKQor
eworICAgIHJldHVybiBuaWw7Cit9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50OjptYWtlRmlyc3RSZXNw
b25kZXIoTlNSZXNwb25kZXIgKikKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5Q
YW5lbChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6
OndpbGxQb3BVcE1lbnUoTlNNZW51ICopCit7Cit9CisKK2pvYmplY3QgQ2hyb21lQ2xpZW50Ojpq
YXZhQXBwbGV0KE5TVmlldyAqKQoreworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24g
MzA3MDIpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogCiAjaW5j
bHVkZSAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2xpcGJvYXJkTWFjLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtOTMsOSArOTMsOSBAQCBQYXNzUmVmUHRyPEtleWJvYXJkRXZlbnQ+IEV2ZW50
SGFuZGxlcjo6CiBzdGF0aWMgaW5saW5lIGJvb2wgaXNLZXlib2FyZE9wdGlvblRhYihLZXlib2Fy
ZEV2ZW50KiBldmVudCkKIHsKICAgICByZXR1cm4gZXZlbnQKLSAgICAmJiAoZXZlbnQtPnR5cGUo
KSA9PSBrZXlkb3duRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KQotICAg
ICYmIGV2ZW50LT5hbHRLZXkoKQotICAgICYmIGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUr
MDAwOSI7ICAgIAorICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgfHwg
ZXZlbnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KQorICAgICAgICAmJiBldmVudC0+YWx0S2V5
KCkKKyAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IjsgICAgCiB9
CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRF
dmVudCogZXZlbnQpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDExIEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjppbnZlcnRTZW5zZU9mVGFic1RvTGkKIAogYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbENv
bnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewotICAgIEtleWJvYXJkVUlNb2Rl
IGtleWJvYXJkVUlNb2RlID0gW21fZnJhbWUtPmJyaWRnZSgpIGtleWJvYXJkVUlNb2RlXTsKKyAg
ICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUgPSBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPmtleWJvYXJkVUlNb2RlKCk7CiAgICAgYm9vbCBoYW5kbGlu
Z09wdGlvblRhYiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOwogCiAgICAgLy8gSWYgdGFi
LXRvLWxpbmtzIGlzIG9mZiwgb3B0aW9uLXRhYiBhbHdheXMgaGlnaGxpZ2h0cyBhbGwgY29udHJv
bHMKQEAgLTIzOCwxMSArMjQyLDE1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3du
RXZlbnRUb1cKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIGlmIChbbV9m
cmFtZS0+YnJpZGdlKCkgZmlyc3RSZXNwb25kZXJdICE9IHZpZXcpIHsKKyAgICBQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5maXJzdFJlc3BvbmRlcigpICE9
IHZpZXcpIHsKICAgICAgICAgLy8gTm9ybWFsbHkgW05TV2luZG93IHNlbmRFdmVudDpdIGhhbmRs
ZXMgc2V0dGluZyB0aGUgZmlyc3QgcmVzcG9uZGVyLgogICAgICAgICAvLyBCdXQgaW4gb3VyIGNh
c2UsIHRoZSBldmVudCB3YXMgc2VudCB0byB0aGUgdmlldyByZXByZXNlbnRpbmcgdGhlIGVudGly
ZSB3ZWIgcGFnZS4KICAgICAgICAgaWYgKFtjdXJyZW50RXZlbnQoKS5nZXQoKSBjbGlja0NvdW50
XSA8PSAxICYmIFt2aWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0gJiYgW3ZpZXcgbmVlZHNQYW5l
bFRvQmVjb21lS2V5XSkKLSAgICAgICAgICAgIFttX2ZyYW1lLT5icmlkZ2UoKSBtYWtlRmlyc3RS
ZXNwb25kZXI6dmlld107CisgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1h
a2VGaXJzdFJlc3BvbmRlcih2aWV3KTsKICAgICB9CiAKICAgICAvLyBXZSBuZWVkIHRvICJkZWZl
ciBsb2FkaW5nIiB3aGlsZSB0cmFja2luZyB0aGUgbW91c2UsIGJlY2F1c2UgdGVhcmluZyBkb3du
IHRoZQpAQCAtMjUyLDkgKzI2MCw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3du
RXZlbnRUb1cKICAgICAvLyBtb3VzZS4gV2Ugc2hvdWxkIGNvbmZpcm0gdGhhdCwgYW5kIHRoZW4g
cmVtb3ZlIHRoZSBkZWZlcnJzTG9hZGluZwogICAgIC8vIGhhY2sgZW50aXJlbHkuCiAgICAgCi0g
ICAgYm9vbCB3YXNEZWZlcnJpbmdMb2FkaW5nID0gbV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2Fk
aW5nKCk7CisgICAgYm9vbCB3YXNEZWZlcnJpbmdMb2FkaW5nID0gcGFnZS0+ZGVmZXJzTG9hZGlu
ZygpOwogICAgIGlmICghd2FzRGVmZXJyaW5nTG9hZGluZykKLSAgICAgICAgbV9mcmFtZS0+cGFn
ZSgpLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgICAgICBwYWdlLT5zZXREZWZlcnNMb2Fk
aW5nKHRydWUpOwogCiAgICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVudFRvU3Vidmlldyk7CiAgICAg
bV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwpAQCAtMjYyLDcgKzI3MCw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1cKICAgICBtX3NlbmRpbmdFdmVudFRv
U3VidmlldyA9IGZhbHNlOwogICAgIAogICAgIGlmICghd2FzRGVmZXJyaW5nTG9hZGluZykKLSAg
ICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAg
cGFnZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAKICAgICAvLyBSZW1lbWJlciB3aGljaCB2
aWV3IHdlIHNlbnQgdGhlIGV2ZW50IHRvLCBzbyB3ZSBjYW4gZGlyZWN0IHRoZSByZWxlYXNlIGV2
ZW50IHByb3Blcmx5LgogICAgIG1fbW91c2VEb3duVmlldyA9IHZpZXc7CkBAIC01MzUsNiArNTQz
LDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW4KICAqLwogdm9p
ZCBFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaWRnZXRUcmFja2luZyhOU0V2ZW50
ICppbml0aWF0aW5nRXZlbnQpCiB7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmll
dygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsK
QEAgLTU0MywzNCArNTU1LDM0IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kRmFrZUV2ZW50c0Fm
dGVyV2kKICAgICAgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gbmlsOwogICAgICAgICBpZiAoZXZl
bnRUeXBlID09IE5TTGVmdE1vdXNlRG93bikgewogICAgICAgICAgICAgZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOltpbml0aWF0aW5nRXZlbnQgbG9jYXRpb25Jbldp
bmRvd10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbaW5p
dGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lc3RhbXA6W2luaXRpYXRpbmdFdmVudCB0aW1lc3RhbXBdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbaW5pdGlhdGluZ0V2ZW50IHdpbmRv
d051bWJlcl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
Oltpbml0aWF0aW5nRXZlbnQgY29udGV4dF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TnVtYmVyOltpbml0aWF0aW5nRXZlbnQgZXZlbnROdW1iZXJdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0NvdW50Oltpbml0aWF0aW5nRXZlbnQg
Y2xpY2tDb3VudF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJl
Oltpbml0aWF0aW5nRXZlbnQgcHJlc3N1cmVdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbjpbaW5pdGlhdGluZ0V2ZW50IGxvY2F0aW9uSW5XaW5k
b3ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6
W2luaXRpYXRpbmdFdmVudCBtb2RpZmllckZsYWdzXQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZlbnQgdGltZXN0YW1wXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltpbml0
aWF0aW5nRXZlbnQgd2luZG93TnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0Oltpbml0aWF0aW5nRXZlbnQgY29udGV4dF0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjpbaW5pdGlhdGluZ0V2
ZW50IGV2ZW50TnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGlja0NvdW50Oltpbml0aWF0aW5nRXZlbnQgY2xpY2tDb3VudF0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZTpbaW5pdGlhdGluZ0V2ZW50IHBy
ZXNzdXJlXV07CiAgICAgICAgIAogICAgICAgICAgICAgW05TQXBwIHBvc3RFdmVudDpmYWtlRXZl
bnQgYXRTdGFydDpZRVNdOwogICAgICAgICB9IGVsc2UgeyAvLyBldmVudFR5cGUgPT0gTlNLZXlE
b3duCiAgICAgICAgICAgICBmYWtlRXZlbnQgPSBbTlNFdmVudCBrZXlFdmVudFdpdGhUeXBlOk5T
S2V5VXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOltpbml0
aWF0aW5nRXZlbnQgbG9jYXRpb25JbldpbmRvd10KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2RpZmllckZsYWdzOltpbml0aWF0aW5nRXZlbnQgbW9kaWZpZXJGbGFnc10KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZlbnQg
dGltZXN0YW1wXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6
W2luaXRpYXRpbmdFdmVudCB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dDpbaW5pdGlhdGluZ0V2ZW50IGNvbnRleHRdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyczpbaW5pdGlhdGluZ0V2ZW50IGNoYXJh
Y3RlcnNdIAotICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6W2lu
aXRpYXRpbmdFdmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc0FSZXBlYXQ6W2luaXRpYXRpbmdFdmVudCBpc0FSZXBl
YXRdIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6W2luaXRp
YXRpbmdFdmVudCBrZXlDb2RlXV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uOltpbml0aWF0aW5nRXZlbnQgbG9jYXRpb25JbldpbmRvd10KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W2luaXRpYXRpbmdF
dmVudCBtb2RpZmllckZsYWdzXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcDpbaW5pdGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W2luaXRpYXRpbmdFdmVudCB3aW5k
b3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0Oltpbml0aWF0aW5nRXZlbnQgY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXJhY3RlcnM6W2luaXRpYXRpbmdFdmVudCBjaGFyYWN0ZXJzXSAKKyAg
ICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6W2luaXRpYXRp
bmdFdmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlzQVJlcGVhdDpbaW5pdGlhdGluZ0V2ZW50IGlzQVJlcGVh
dF0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb2RlOltp
bml0aWF0aW5nRXZlbnQga2V5Q29kZV1dOwogICAgICAgICAgICAgW05TQXBwIHBvc3RFdmVudDpm
YWtlRXZlbnQgYXRTdGFydDpZRVNdOwogICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiAgV2Ug
c2hvdWxkIHJlYWxseSBnZXQgdGhlIGN1cnJlbnQgbW9kaWZpZXJGbGFncyBoZXJlLCBidXQgdGhl
cmUncyBubyB3YXkgdG8gcG9sbAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBn
ZXQgdGhlIGN1cnJlbnQgbW9kaWZpZXJGbGFncyBoZXJlLCBidXQgdGhlcmUncyBubyB3YXkgdG8g
cG9sbAogICAgICAgICAvLyB0aGVtIGluIENvY29hLCBhbmQgYmVjYXVzZSB0aGUgZXZlbnQgc3Ry
ZWFtIHdhcyBzdG9sZW4gYnkgdGhlIENhcmJvbiBtZW51IGNvZGUgd2UgaGF2ZQogICAgICAgICAv
LyBubyB1cC10by1kYXRlIGNhY2hlIG9mIHRoZW0gYW55d2hlcmUuCiAgICAgICAgIGZha2VFdmVu
dCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOltbbV9mcmFtZS0+YnJpZGdlKCkg
d2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246W1t2aWV3LT5nZXRW
aWV3KCkgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25d
XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W2luaXRp
YXRpbmdFdmVudCBtb2RpZmllckZsYWdzXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lc3RhbXA6W2luaXRpYXRpbmdFdmVudCB0aW1lc3RhbXBdCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbaW5pdGlhdGluZ0V2ZW50IHdp
bmRvd051bWJlcl0KSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBX
ZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAi
Q1NTSGVscGVyLmgiCiAjaW1wb3J0ICJDYWNoZS5oIgogI2ltcG9ydCAiQ2hyb21lLmgiCisjaW1w
b3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW1wb3J0
ICJDbGlwYm9hcmRNYWMuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCkBAIC05Myw5ICs5NCw3IEBA
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9OUF9qc29iamVjdC5oPgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvbnBydW50aW1lX2ltcGwuaD4KIAotI3VuZGVmIF93ZWJjb3JlX1RJTUlORwotCi1A
aW50ZXJmYWNlIE5TT2JqZWN0IChXZWJQbHVnSW4pCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJQ
bHVnaW4pCiAtIChpZClvYmplY3RGb3JXZWJTY3JpcHQ7CiAtIChOUE9iamVjdCAqKWNyZWF0ZVBs
dWdpblNjcmlwdGFibGVPYmplY3Q7CiBAZW5kCkBAIC00OTMsMTEgKzQ5Miw2IEBAIE5TV3JpdGlu
Z0RpcmVjdGlvbiBGcmFtZTo6YmFzZVdyaXRpbmdEaXIKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12b2lkIEZyYW1lOjppc3N1ZVBhc3RlQ29tbWFuZCgpCi17Ci0gICAgW2QtPm1fYnJpZGdlIGlz
c3VlUGFzdGVDb21tYW5kXTsKLX0KLQogY29uc3Qgc2hvcnQgZW5hYmxlUm9tYW5LZXlib2FyZHNP
bmx5ID0gLTIzOwogdm9pZCBGcmFtZTo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeShib29sIGVu
YWJsZSkKIHsKQEAgLTU2MCwyNyArNTU0LDYgQEAgTlNNdXRhYmxlRGljdGlvbmFyeSogRnJhbWU6
OmRhc2hib2FyZFJlZwogICAgIHJldHVybiB3ZWJSZWdpb25zOwogfQogCi12b2lkIEZyYW1lOjpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCi17Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqd2Vi
UmVnaW9ucyA9IGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7Ci0gICAgW2QtPm1fYnJpZGdl
IGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOndlYlJlZ2lvbnNdOwotfQotCi12b2lkIEZyYW1lOjp3
aWxsUG9wdXBNZW51KE5TTWVudSAqIG1lbnUpCi17Ci0gICAgW2QtPm1fYnJpZGdlIHdpbGxQb3B1
cE1lbnU6bWVudV07Ci19Ci0KLUZsb2F0UmVjdCBGcmFtZTo6Y3VzdG9tSGlnaGxpZ2h0TGluZVJl
Y3QoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LCBO
b2RlKiBub2RlKQotewotICAgIHJldHVybiBbZC0+bV9icmlkZ2UgY3VzdG9tSGlnaGxpZ2h0UmVj
dDp0eXBlIGZvckxpbmU6bGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOm5vZGVdOwotfQotCi12b2lk
IEZyYW1lOjpwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgYm9vbCB0
ZXh0LCBib29sIGxpbmUsIE5vZGUqIG5vZGUpCi17Ci0gICAgW2QtPm1fYnJpZGdlIHBhaW50Q3Vz
dG9tSGlnaGxpZ2h0OnR5cGUgZm9yQm94OmJveFJlY3Qgb25MaW5lOmxpbmVSZWN0IGJlaGluZFRl
eHQ6dGV4dCBlbnRpcmVMaW5lOmxpbmUgcmVwcmVzZW50ZWROb2RlOm5vZGVdOwotfQotCiBEcmFn
SW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpIAogewogICAgIGlmICghc2Vs
ZWN0aW9uQ29udHJvbGxlcigpLT5pc1JhbmdlKCkpCkBAIC01ODgsMjUgKzU2MSwyNiBAQCBEcmFn
SW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvCiAgICAgcmV0dXJuIHNlbGVjdGlv
bkltYWdlKCk7CiB9CiAKLQogS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lOjpjcmVhdGVT
Y3JpcHRJbnN0YW5jZUZvcldpZGdldChXZWJDb3JlOjpXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBO
U1ZpZXcqIGFWaWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7Ci0gICAgaWYgKCFhVmlldykKKyAgICBO
U1ZpZXcqIHdpZGdldFZpZXcgPSB3aWRnZXQtPmdldFZpZXcoKTsKKyAgICBpZiAoIXdpZGdldFZp
ZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdm9pZCogbmF0aXZlSGFuZGxlID0gYVZpZXc7
CisgICAgdm9pZCogbmF0aXZlSGFuZGxlID0gd2lkZ2V0VmlldzsKICAgICBDcmVhdGVSb290T2Jq
ZWN0RnVuY3Rpb24gY3JlYXRlUm9vdE9iamVjdCA9IFJvb3RPYmplY3Q6OmNyZWF0ZVJvb3RPYmpl
Y3QoKTsKICAgICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IGNyZWF0ZVJvb3RPYmpl
Y3QobmF0aXZlSGFuZGxlKTsKIAotICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihvYmplY3RGb3JXZWJTY3JpcHQpXSkgewotICAgICAgICBpZCBvYmplY3RGb3JXZWJT
Y3JpcHQgPSBbYVZpZXcgb2JqZWN0Rm9yV2ViU2NyaXB0XTsKKyAgICBpZiAoW3dpZGdldFZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihvYmplY3RGb3JXZWJTY3JpcHQpXSkgeworICAg
ICAgICBpZCBvYmplY3RGb3JXZWJTY3JpcHQgPSBbd2lkZ2V0VmlldyBvYmplY3RGb3JXZWJTY3Jp
cHRdOwogICAgICAgICBpZiAob2JqZWN0Rm9yV2ViU2NyaXB0KQogICAgICAgICAgICAgcmV0dXJu
IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShJbnN0YW5jZTo6T2Jq
ZWN0aXZlQ0xhbmd1YWdlLCBvYmplY3RGb3JXZWJTY3JpcHQsIHJvb3RPYmplY3QucmVsZWFzZSgp
KTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0KV0pIHsKKyAgICB9
CisKKyAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihjcmVh
dGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0KV0pIHsKICNpZiBVU0UoTlBPQkpFQ1QpCi0gICAgICAg
IE5QT2JqZWN0KiBucE9iamVjdCA9IFthVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0
XTsKKyAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gW3dpZGdldFZpZXcgY3JlYXRlUGx1Z2lu
U2NyaXB0YWJsZU9iamVjdF07CiAgICAgICAgIGlmIChucE9iamVjdCkgewogICAgICAgICAgICAg
SW5zdGFuY2UqIGluc3RhbmNlID0gSW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUlu
c3RhbmNlKEluc3RhbmNlOjpDTGFuZ3VhZ2UsIG5wT2JqZWN0LCByb290T2JqZWN0LnJlbGVhc2Uo
KSk7CiAKQEAgLTYxOCwyMiArNTkyLDE3IEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFt
ZTo6Y3JlYXRlU2MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgam9iamVjdCBhcHBs
ZXQ7Ci0gICAgCisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybiAwOworCiAgICAgLy8gR2V0IGEgcG9pbnRlciB0byB0aGUgYWN0dWFs
IEphdmEgYXBwbGV0IGluc3RhbmNlLgotICAgIGlmIChbZC0+bV9icmlkZ2UgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihnZXRBcHBsZXRJblZpZXc6KV0pCi0gICAgICAgIGFwcGxldCA9IFtk
LT5tX2JyaWRnZSBnZXRBcHBsZXRJblZpZXc6YVZpZXddOwotICAgIGVsc2UKLSAgICAgICAgYXBw
bGV0ID0gW2QtPm1fYnJpZGdlIHBvbGxGb3JBcHBsZXRJblZpZXc6YVZpZXddOwotICAgIAotICAg
IGlmIChhcHBsZXQpIHsKLSAgICAgICAgLy8gV3JhcCB0aGUgSmF2YSBpbnN0YW5jZSBpbiBhIGxh
bmd1YWdlIG5ldXRyYWwgYmluZGluZyBhbmQgaGFuZAotICAgICAgICAvLyBvZmYgb3duZXJzaGlw
IHRvIHRoZSBBUFBMRVQgZWxlbWVudC4KLSAgICAgICAgSW5zdGFuY2UqIGluc3RhbmNlID0gSW5z
dGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNlKEluc3RhbmNlOjpKYXZhTGFu
Z3VhZ2UsIGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm4gaW5z
dGFuY2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOworICAgIGpvYmplY3QgYXBwbGV0ID0g
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5qYXZhQXBwbGV0KHdpZGdldFZpZXcpOworICAgIGlm
ICghYXBwbGV0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdyYXAgdGhlIEphdmEgaW5z
dGFuY2UgaW4gYSBsYW5ndWFnZSBuZXV0cmFsIGJpbmRpbmcgYW5kIGhhbmQgb2ZmIG93bmVyc2hp
cCB0byB0aGUgY2FsbGVyLgorICAgIHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxh
bmd1YWdlSW5zdGFuY2UoSW5zdGFuY2U6OkphdmFMYW5ndWFnZSwgYXBwbGV0LCByb290T2JqZWN0
LnJlbGVhc2UoKSk7CiB9CiAKIFdlYlNjcmlwdE9iamVjdCogRnJhbWU6OndpbmRvd1NjcmlwdE9i
amVjdCgpCkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9u
IDMwNzAyKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMzcgKzIzLDE2
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgotI2lt
cG9ydCA8SmF2YVZNL2puaS5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlS2V5Ym9hcmRVSU1v
ZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdEFjdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZUxvYWRlclR5cGVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEFmZmluaXR5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Rl
eHRHcmFudWxhcml0eS5oPgogCi0jaWYgVVNFKE5QT0JKRUNUKQotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvbnBydW50aW1lLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIEZyYW1lOwotICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKLSAgICBjbGFzcyBQ
YWdlOwotICAgIGNsYXNzIFN0cmluZzsKLX0KLQogQGNsYXNzIERPTUNTU1N0eWxlRGVjbGFyYXRp
b247CiBAY2xhc3MgRE9NRG9jdW1lbnQ7CiBAY2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKIEBj
bGFzcyBET01FbGVtZW50OwotQGNsYXNzIERPTUhUTUxJbnB1dEVsZW1lbnQ7Ci1AY2xhc3MgRE9N
SFRNTFRleHRBcmVhRWxlbWVudDsKIEBjbGFzcyBET01Ob2RlOwogQGNsYXNzIERPTVJhbmdlOwot
QGNsYXNzIE5TTWVudTsKLQotQHByb3RvY29sIFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyOwogCiBl
bnVtIFdlYkNvcmVEZXZpY2VUeXBlIHsKICAgICBXZWJDb3JlRGV2aWNlU2NyZWVuLApAQCAtNzQs
OSArNTMsOCBAQCBlbnVtIFdlYlNjcm9sbEdyYW51bGFyaXR5IHsKICAgICBXZWJTY3JvbGxXaGVl
bAogfTsKIAotQHByb3RvY29sIFdlYkNvcmVPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA8TlNPYmpl
Y3Q+Ci0tICh2b2lkKWNob29zZUZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVOYW1lOwotLSAodm9p
ZCljYW5jZWw7CitAcHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXIgPE5TT2JqZWN0Pgor
LSAoTlNPYmplY3QgKilub2RlV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBwb3NpdGlvbjooTlNQ
b2ludClwb3NpdGlvbiByZWN0OihOU1JlY3QpcmVjdCB2aWV3OihOU1ZpZXcgKil2aWV3IGNoaWxk
cmVuOihOU0FycmF5ICopY2hpbGRyZW47CiBAZW5kCiAKIC8vIFdlYkNvcmVGcmFtZUJyaWRnZSBv
YmplY3RzIGFyZSB1c2VkIGJ5IFdlYkNvcmUgdG8gYWJzdHJhY3QgYXdheSBvcGVyYXRpb25zIHRo
YXQgbmVlZApAQCAtODgsOCArNjYsNyBAQCBlbnVtIFdlYlNjcm9sbEdyYW51bGFyaXR5IHsKIAog
Ly8gVGhlIFdlYkNvcmVGcmFtZUJyaWRnZSBpbnRlcmZhY2UgY29udGFpbnMgbWV0aG9kcyBmb3Ig
dXNlIGJ5IHRoZSBub24tV2ViQ29yZSBzaWRlIG9mIHRoZSBicmlkZ2UuCiAKLUBpbnRlcmZhY2Ug
V2ViQ29yZUZyYW1lQnJpZGdlIDogTlNPYmplY3QKLXsKK0BpbnRlcmZhY2UgV2ViQ29yZUZyYW1l
QnJpZGdlIDogTlNPYmplY3QgewogQHB1YmxpYwogICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1l
OwogICAgIEJPT0wgX3Nob3VsZENyZWF0ZVJlbmRlcmVyczsKQEAgLTIwOSw0NiArMTg2LDMgQEAg
ZW51bSBXZWJTY3JvbGxHcmFudWxhcml0eSB7CiAtICh2b2lkKXJlY2VpdmVkRGF0YTooTlNEYXRh
ICopZGF0YSB0ZXh0RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKXRleHRFbmNvZGluZ05hbWU7CiAK
IEBlbmQKLQotLy8gVGhlIFdlYkNvcmVGcmFtZUJyaWRnZSBwcm90b2NvbCBjb250YWlucyBtZXRo
b2RzIGZvciB1c2UgYnkgdGhlIFdlYkNvcmUgc2lkZSBvZiB0aGUgYnJpZGdlLgotCi1AcHJvdG9j
b2wgV2ViQ29yZUZyYW1lQnJpZGdlCi0KLS0gKE5TV2luZG93ICopd2luZG93OwotCi0tIChOU1Jl
c3BvbmRlciAqKWZpcnN0UmVzcG9uZGVyOwotLSAodm9pZCltYWtlRmlyc3RSZXNwb25kZXI6KE5T
UmVzcG9uZGVyICopcmVzcG9uZGVyOwotCi0tICh2b2lkKXJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0
b25XaXRoUmVzdWx0TGlzdGVuZXI6KGlkIDxXZWJDb3JlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+
KXJlc3VsdExpc3RlbmVyOwotCi0tIChqb2JqZWN0KWdldEFwcGxldEluVmlldzooTlNWaWV3ICop
dmlldzsKLQotLy8gRGVwcmVjYXRlZCwgdXNlIGdldEFwcGxldEluVmlldzogaW5zdGVhZC4KLS0g
KGpvYmplY3QpcG9sbEZvckFwcGxldEluVmlldzooTlNWaWV3ICopdmlldzsKLQotLSAodm9pZClp
c3N1ZVBhc3RlQ29tbWFuZDsKLQotLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0
ZWQgZm9yVmlldzooTlNWaWV3ICopdmlldzsKLQotLSAodm9pZClkYXNoYm9hcmRSZWdpb25zQ2hh
bmdlZDooTlNNdXRhYmxlRGljdGlvbmFyeSAqKXJlZ2lvbnM7Ci0tICh2b2lkKXdpbGxQb3B1cE1l
bnU6KE5TTWVudSAqKW1lbnU7Ci0KLS0gKE5TUmVjdCljdXN0b21IaWdobGlnaHRSZWN0OihOU1N0
cmluZyopdHlwZSBmb3JMaW5lOihOU1JlY3QpbGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOihXZWJD
b3JlOjpOb2RlICopbm9kZTsKLS0gKHZvaWQpcGFpbnRDdXN0b21IaWdobGlnaHQ6KE5TU3RyaW5n
Kil0eXBlIGZvckJveDooTlNSZWN0KWJveFJlY3Qgb25MaW5lOihOU1JlY3QpbGluZVJlY3QgYmVo
aW5kVGV4dDooQk9PTCl0ZXh0IGVudGlyZUxpbmU6KEJPT0wpbGluZSByZXByZXNlbnRlZE5vZGU6
KFdlYkNvcmU6Ok5vZGUgKilub2RlOwotCi0tIChXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSlrZXli
b2FyZFVJTW9kZTsKLQotQGVuZAotCi0vLyBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGFsbG93
cyB0aG9zZSB3aG8gaG9sZCBhIFdlYkNvcmVGcmFtZUJyaWRnZSAqIHRvIGNhbGwgYWxsIHRoZSBt
ZXRob2RzCi0vLyBpbiB0aGUgV2ViQ29yZUZyYW1lQnJpZGdlIHByb3RvY29sIHdpdGhvdXQgcmVx
dWlyaW5nIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIHRvIHN1cHBseSB0aGUgbWV0aG9kcy4KLS8v
IFRoaXMgaWRpb20gaXMgYXBwcm9wcmlhdGUgYmVjYXVzZSBXZWJDb3JlRnJhbWVCcmlkZ2UgaXMg
YW4gYWJzdHJhY3QgY2xhc3MuCi0KLUBpbnRlcmZhY2UgV2ViQ29yZUZyYW1lQnJpZGdlIChTdWJj
bGFzc1Jlc3BvbnNpYmlsaXR5KSA8V2ViQ29yZUZyYW1lQnJpZGdlPgotQGVuZAotCi0vLyBQcm90
b2NvbHMgdGhhdCBtYWtlIHVwIHBhcnQgb2YgdGhlIGludGVyZmFjZXMgYWJvdmUuCi0KLUBwcm90
b2NvbCBXZWJDb3JlUmVuZGVyVHJlZUNvcGllciA8TlNPYmplY3Q+Ci0tIChOU09iamVjdCAqKW5v
ZGVXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIHBvc2l0aW9uOihOU1BvaW50KXAgcmVjdDooTlNS
ZWN0KXJlY3QgdmlldzooTlNWaWV3ICopdmlldyBjaGlsZHJlbjooTlNBcnJheSAqKWNoaWxkcmVu
OwotQGVuZApJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlz
aW9uIDMwNzAyKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbXBvcnQgIkNTU0hlbHBlci5oIgogI2ltcG9ydCAiQ2FjaGUuaCIKKyNpbXBvcnQgIkNocm9t
ZUNsaWVudC5oIgogI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgiCiAjaW1wb3J0ICJDb2xvck1hYy5o
IgogI2ltcG9ydCAiRE9NSW1wbGVtZW50YXRpb24uaCIKQEAgLTExMzAsMjIgKzExMzEsMjggQEAg
c3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAtICh2b2lkKWRyYWdT
b3VyY2VNb3ZlZFRvOihOU1BvaW50KXdpbmRvd0xvYwogewotICAgIGlmIChtX2ZyYW1lKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBGYWtlIG1vZGlmaWVyIGtleXMgaGVyZS4KLSAgICAgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRv
d0xvYywgW3NlbGYgd2luZG93XSksCi0gICAgICAgICAgICBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50
TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpKTsKLSAg
ICAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VNb3ZlZFRvKGV2ZW50KTsK
LSAgICB9CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0
aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVhZC4KKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQg
ZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+
Z2V0VmlldygpIHdpbmRvd10pLAorICAgICAgICBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQs
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpKTsKKyAgICBtX2Zy
YW1lLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZU1vdmVkVG8oZXZlbnQpOwogfQogCiAtICh2
b2lkKWRyYWdTb3VyY2VFbmRlZEF0OihOU1BvaW50KXdpbmRvd0xvYyBvcGVyYXRpb246KE5TRHJh
Z09wZXJhdGlvbilvcGVyYXRpb24KIHsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICAvLyBG
SVhNRTogRmFrZSBtb2RpZmllciBrZXlzIGhlcmUuCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dCBldmVudChJbnRQb2ludCh3aW5kb3dMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFtzZWxm
IHdpbmRvd10pLAotICAgICAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAwLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7Ci0gICAgICAgIG1fZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5kcmFnU291cmNlRW5kZWRBdChldmVudCwgKERyYWdPcGVyYXRp
b24pb3BlcmF0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFrZSBtb2RpZmllciBr
ZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVhZC4KKyAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2lu
ZG93TG9jLCBbdmlldy0+Z2V0VmlldygpIHdpbmRvd10pLAorICAgICAgICBMZWZ0QnV0dG9uLCBN
b3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGlt
ZSgpKTsKKyAgICBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQoZXZl
bnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7CiB9CiAKIC0gKEJPT0wpZ2V0RGF0YTooTlNE
YXRhICoqKWRhdGEgYW5kUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKiopcmVzcG9uc2UgZm9yVVJM
OihOU1N0cmluZyAqKXVybApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAJKHJldmlzaW9u
IDMwNzAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDkgKzMzLDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKK2lubGluZSBG
aWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZmlsZW5h
bWUoZmlsZW5hbWUpCisgICAgLCBtX2ljb24oY2hvb3NlSWNvbihmaWxlbmFtZSkpCit7Cit9CisK
IFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRmlsZUNob29zZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICByZXR1cm4gbmV3
IEZpbGVDaG9vc2VyKGNsaWVudCwgZmlsZW5hbWUpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RmlsZUNob29zZXIoY2xpZW50LCBmaWxlbmFtZSkpOworfQorCitGaWxlQ2hvb3Nlcjo6fkZpbGVD
aG9vc2VyKCkKK3sKIH0KIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2xlYXIoKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuaAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDE2ICszMSw2IEBACiAjZGVm
aW5lIEZpbGVDaG9vc2VyX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE9wZW5QYW5lbENvbnRyb2xsZXI7Ci0j
ZWxzZQotY2xhc3MgT3BlblBhbmVsQ29udHJvbGxlcjsKLSNlbmRpZgotI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjQsOCArNTQsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhN
RTogSXQncyBhIGxheWVyaW5nIHZpb2xhdGlvbiB0aGF0IHdlIHBhc3MgYSBEb2N1bWVudCBpbiBo
ZXJlLgogICAgIC8vIFRoZSBwbGF0Zm9ybSBkaXJlY3RvcnkgaXMgdW5kZXJuZWF0aCB0aGUgRE9N
LCBzbyBpdCBjYW4ndCB1c2UgdGhlIERPTS4KLSAgICAvLyBCZWNhdXNlIG9mIFVJIGRlbGVnYXRl
cywgaXQncyBub3QgY2xlYXIgdGhhdCB0aGlzIGNsYXNzIGJlbG9uZ3MgaW4gdGhlIHBsYXRmb3Jt
Ci0gICAgLy8gbGF5ZXIgYXQgYWxsLiBJdCBtaWdodCBuZWVkIHRvIGdvIGFsb25nc2lkZSB0aGUg
Q2hyb21lIGNsYXNzIGluc3RlYWQuCisgICAgLy8gQmVjYXVzZSBvZiBVSSBkZWxlZ2F0ZXMsIGl0
J3Mgbm90IGNsZWFyIHRoYXQgdGhlIEZpbGVDaG9vc2VyIGNsYXNzCisgICAgLy8gYmVsb25ncyBp
biB0aGUgcGxhdGZvcm0gbGF5ZXIgYXQgYWxsLiBJdCBtaWdodCBuZWVkIHRvIGdvIGFsb25nc2lk
ZQorICAgIC8vIHRoZSBDaHJvbWUgY2xhc3MgaW5zdGVhZC4KICAgICB2b2lkIG9wZW5GaWxlQ2hv
b3NlcihEb2N1bWVudCopOwogCiAgICAgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsZW5hbWU7IH0KQEAgLTg0LDEwICs3NSw2IEBAIHByaXZhdGU6CiAgICAgRmls
ZUNob29zZXJDbGllbnQqIG1fY2xpZW50OwogICAgIFN0cmluZyBtX2ZpbGVuYW1lOwogICAgIFJl
ZlB0cjxJY29uPiBtX2ljb247Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPE9w
ZW5QYW5lbENvbnRyb2xsZXI+IG1fY29udHJvbGxlcjsKLSNlbmRpZgogfTsKIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHJldmlzaW9uIDMwNzAy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNyArMzAsMTIgQEAK
ICNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2ltcG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRn
ZS5oIgorCitAaW50ZXJmYWNlIFdlYkNvcmVCdW5kbGVGaW5kZXIgOiBOU09iamVjdAorQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUJ1bmRsZUZpbmRlcgorQGVuZAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTUxLDcgKzU2LDcgQEAgSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZShjb25zdAogewogICAgIHN0YXRpYyBCaXRtYXBJbWFnZSBudWxsSW1hZ2U7CiAgICAg
Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViQ29y
ZUZyYW1lQnJpZGdlIGNsYXNzXV07CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBi
dW5kbGVGb3JDbGFzczpbV2ViQ29yZUJ1bmRsZUZpbmRlciBjbGFzc11dOwogICAgIE5TU3RyaW5n
ICppbWFnZVBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6bmFtZV0gb2ZUeXBlOkAidGlmZiJdOwogICAgIE5TRGF0YSAqbmFtZWRJbWFn
ZURhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6aW1hZ2VQYXRoXTsKICAgICBp
ZiAobmFtZWRJbWFnZURhdGEpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVDaG9v
c2VyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nl
ckd0ay5jcHAJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNo
b29zZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxOCArNTYsNiBAQCBzdGF0aWMgYm9v
bCBzdHJpbmdCeUFkb3B0aW5nRmlsZVN5c3RlbVJlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZp
bGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQotICAgIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4oMCkKLSAgICAs
IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgLCBtX2lj
b24oY2hvb3NlSWNvbihmaWxlbmFtZSkpCi17Ci19Ci0KLUZpbGVDaG9vc2VyOjp+RmlsZUNob29z
ZXIoKQotewotfQotCiB2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIoRG9jdW1lbnQq
IGRvY3VtZW50KQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52aWV3KCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiAzMDcwMikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRv
ci5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiRnJhbWUuaCIKICNp
bXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgi
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQkocmV2aXNpb24gMzA3
MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
ODYgKzMwLDI2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZpbGVDaG9vc2VyLmgi
CiAKKyNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBv
cnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiSWNvbi5o
IgogI2ltcG9ydCAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9y
dCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlN0cmluZ1RydW5jYXRvci5oIgotI2ltcG9y
dCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1A
aW50ZXJmYWNlIFdlYkNvcmVPcGVuUGFuZWxDb250cm9sbGVyIDogTlNPYmplY3QgPFdlYkNvcmVP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gewotICAgIEZpbGVDaG9vc2VyICpfZmlsZUNob29zZXI7
Ci0gICAgV2ViQ29yZUZyYW1lQnJpZGdlICpfYnJpZGdlOwotfQotLSAoaWQpaW5pdFdpdGhGaWxl
Q2hvb3NlcjooRmlsZUNob29zZXIgKilmaWxlQ2hvb3NlcjsKLS0gKHZvaWQpZGlzY29ubmVjdEZp
bGVDaG9vc2VyOwotLSAodm9pZCliZWdpblNoZWV0V2l0aEZyYW1lOihGcmFtZSopZnJhbWU7Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlT3BlblBhbmVsQ29udHJvbGxlcgotCi0tIChp
ZClpbml0V2l0aEZpbGVDaG9vc2VyOihGaWxlQ2hvb3NlciAqKWZpbGVDaG9vc2VyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBfZmlsZUNob29zZXIgPSBmaWxlQ2hvb3NlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkaXNjb25uZWN0RmlsZUNob29zZXIKLXsKLSAgICBfZmlsZUNob29zZXIgPSAw
OwotfQotCi0tICh2b2lkKWJlZ2luU2hlZXRXaXRoRnJhbWU6KEZyYW1lKilmcmFtZQotewotICAg
IGlmICghX2ZpbGVDaG9vc2VyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgX2JyaWRnZSA9
IGZyYW1lLT5icmlkZ2UoKTsKLSAgICBbX2JyaWRnZSByZXRhaW5dOwotICAgIFtfYnJpZGdlIHJ1
bk9wZW5QYW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6c2VsZl07Ci19Ci0KLS0g
KHZvaWQpY2hvb3NlRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUKLXsKLSAgICBpZiAoX2Zp
bGVDaG9vc2VyKQotICAgICAgICBfZmlsZUNob29zZXItPmNob29zZUZpbGUoZmlsZW5hbWUpOwot
ICAgIFtfYnJpZGdlIHJlbGVhc2VdOwotfQotCi0tICh2b2lkKWNhbmNlbAotewotICAgIFtfYnJp
ZGdlIHJlbGVhc2VdOwotfQotCi1AZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLUZp
bGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQotICAgIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4oMCkKLSAgICAs
IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgLCBtX2lj
b24oY2hvb3NlSWNvbihmaWxlbmFtZSkpCi0gICAgLCBtX2NvbnRyb2xsZXIoQWRvcHROUywgW1tX
ZWJDb3JlT3BlblBhbmVsQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhGaWxlQ2hvb3Nlcjp0aGlz
XSkKLXsKLX0KLQotRmlsZUNob29zZXI6On5GaWxlQ2hvb3NlcigpCi17Ci0gICAgW21fY29udHJv
bGxlci5nZXQoKSBkaXNjb25uZWN0RmlsZUNob29zZXJdOwotfQotCiB2b2lkIEZpbGVDaG9vc2Vy
OjpvcGVuRmlsZUNob29zZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgW21fY29udHJvbGxlci5nZXQoKSBi
ZWdpblNoZWV0V2l0aEZyYW1lOmZyYW1lXTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAg
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5ydW5PcGVuUGFuZWwodGhpcyk7CiB9CiAKIFN0cmlu
ZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChjb25zdCBGb250JiBmb250LCBpbnQgd2lk
dGgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJldmlz
aW9uIDMwNzAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5o
IgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKKyNpbXBvcnQg
IkZyYW1lLmgiCiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJJbWFnZS5oIgog
I2ltcG9ydCAiS1VSTC5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQko
cmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwxNCAr
MjAsMTYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUG9wdXBNZW51LmgiCiAKKyNp
bXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiRXZlbnRIYW5kbGVyLmgiCi0jaW1wb3J0
ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmll
dy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MT3B0R3JvdXBFbGVtZW50
LmgiCiAjaW1wb3J0ICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFNlbGVjdEVs
ZW1lbnQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTE1MSw3ICsxNTMsOCBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiBy
LCBGCiAgICAgW3ZpZXcgYWRkU3VidmlldzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0aW9u
ID0gW2R1bW15Vmlldy5nZXQoKSBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6dmlld107
CiAgICAgCi0gICAgZnJhbWUtPndpbGxQb3B1cE1lbnUobWVudSk7CisgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndp
bGxQb3BVcE1lbnUobWVudSk7CiAgICAgd2tQb3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJvdW5k
ZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRleCwgZm9udCk7CiAKICAgICBbbV9w
b3B1cC5nZXQoKSBkaXNtaXNzUG9wVXBdOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lk
Z2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5t
bQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiAr
MjcsNyBAQAogI2ltcG9ydCAiV2lkZ2V0LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5o
IgorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQg
IkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGb250LmgiCkBAIC0zNCw3ICszNSw2IEBACiAjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgotI2ltcG9ydCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJX
ZWJDb3JlRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlldy5oIgogI2ltcG9ydCAiV2lk
Z2V0Q2xpZW50LmgiCkBAIC0yMzUsMTEgKzIzNSwxNiBAQCB2b2lkIFdpZGdldDo6aW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
Ly8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21lOyBiYWQgbGF5ZXJpbmcgdGhhdCB0
aGlzIGtub3dzIGFib3V0IEZyYW1lLgorLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hy
b21lOyBiYWQgbGF5ZXJpbmcgdGhhdCB0aGlzIGtub3dzIGFib3V0IEZyYW1lIGFuZCBQYWdlLgog
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1NlbGVjdGVkKQogewotICAgIGlmIChG
cmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQodGhpcykpCi0gICAgICAgIFtmcmFt
ZS0+YnJpZGdlKCkgc2V0SXNTZWxlY3RlZDppc1NlbGVjdGVkIGZvclZpZXc6Z2V0VmlldygpXTsK
KyAgICBGcmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQodGhpcyk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
OworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+c2V0U2VsZWN0ZWQodGhpcywgaXNTZWxlY3RlZCk7CiB9CiAKIHZvaWQgV2lkZ2V0
OjphZGRUb1N1cGVydmlldyhOU1ZpZXcgKnZpZXcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L0ZpbGVDaG9vc2VyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmls
ZUNob29zZXJRdC5jcHAJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9G
aWxlQ2hvb3NlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29zZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNvdW50ZWQ8
RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZpbGVuYW1l
KGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotewotfQotCi1G
aWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3Bl
bkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2MpCiB7CiAgICAgUGFnZSAqcGFnZSA9IGRvYy0+cGFn
ZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZUNob29zZXJXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVDaG9vc2VyV2luLmNwcAkocmV2aXNp
b24gMzA3MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBSZWZDb3VudGVkPEZpbGVDaG9vc2VyPigwKQotICAg
ICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAsIG1f
aWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKLXsKLX0KLQotRmlsZUNob29zZXI6On5GaWxlQ2hv
b3NlcigpCi17Ci19Ci0KIHZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxlQ2hvb3NlcihEb2N1bWVu
dCogZG9jdW1lbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlz
aW9uIDMwNzAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDYgQEAgdm9pZCBQbGF0Zm9ybVNjcm9sbGJh
cjo6dXBkYXRlVGh1bWJQb3NpdAogdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQ
cm9wb3J0aW9uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFy
OjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIAotRmlsZUNo
b29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBpbml0
aWFsRmlsZW5hbWUpIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4oMCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Ci0vL1Bhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUoRmls
ZUNob29zZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIGluaXRpYWxGaWxlbmFtZSkgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4oKTsgfQotRmlsZUNob29z
ZXI6On5GaWxlQ2hvb3NlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGaWxlQ2hvb3Nl
cjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBTdHJp
bmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0aCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDExICsyMywxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKIAorI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9y
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgpAQCAtNTMwLDE0ICs1MzIsMjMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uQmFjawogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorCiB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50IHR5LCBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gb2JqZWN0KCktPmRvY3VtZW50KCktPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Um9vdElubGluZUJveCogciA9IHJvb3QoKTsKICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QodHggKyBy
LT54UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHItPndpZHRoKCksIHNlbGVjdGlvbkhlaWdo
dCgpKTsKICAgICBGbG9hdFJlY3QgdGV4dFJlY3QodHggKyB4UG9zKCksIHJvb3RSZWN0LnkoKSwg
d2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogCi0gICAgb2JqZWN0KCktPmRvY3VtZW50KCkt
PmZyYW1lKCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR5cGUsIHRleHRSZWN0LCByb290UmVjdCwg
dHJ1ZSwgZmFsc2UsIG9iamVjdCgpLT5ub2RlKCkpOworICAgIHBhZ2UtPmNocm9tZSgpLT5jbGll
bnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCktPm5vZGUoKSwgdHlwZSwgdGV4dFJl
Y3QsIHJvb3RSZWN0LCB0cnVlLCBmYWxzZSk7CiB9CisKICNlbmRpZgogCiB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwg
aW50IHR5LCBpbnQgZGVjbykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24g
MzA3MDIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExICsxLDkgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBp
bXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNSBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDUsIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDEyICsyNiwxNCBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogCiAjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCkBAIC03MDMsMTkgKzcwMywyOCBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRC
YWNrZ3JvdW5kRXh0ZW5kZWQoCiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgUmVuZGVy
Qm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChpbnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47
CisKICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgUm9v
dElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAwOwogICAgIGlmIChy
KSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPnhQb3MoKSwgdHkgKyByLT5z
ZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgICAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290UmVjdC55KCksIHdpZHRoKCksIHJv
b3RSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDdXN0
b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCByb290UmVjdCwgYmVoaW5kVGV4dCwgZmFsc2Us
IG5vZGUoKSk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21I
aWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBm
YWxzZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCArIG1f
eCwgdHkgKyBtX3ksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCBpbWFnZVJlY3QsIGJl
aGluZFRleHQsIGZhbHNlLCBub2RlKCkpOworICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KG5vZGUoKSwgdHlwZSwgaW1hZ2VSZWN0LCBpbWFnZVJl
Y3QsIGJlaGluZFRleHQsIGZhbHNlKTsKICAgICB9CiB9CisKICNlbmRpZgogCiBJbnRSZWN0IFJl
bmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0eSkKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDExIEBAIGVudW0g
VmVydGljYWxQb3NpdGlvbkhpbnQgewogc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlIHsKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRGFzaGJvYXJkUmVnaW9uVmFsdWUmIG8pIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBvLnR5cGUgJiYgYm91bmRzID09IG8uYm91bmRz
ICYmIGxhYmVsID09IG8ubGFiZWw7CisgICAgICAgIHJldHVybiB0eXBlID09IG8udHlwZSAmJiBi
b3VuZHMgPT0gby5ib3VuZHMgJiYgY2xpcCA9PSBvLmNsaXAgJiYgbGFiZWwgPT0gby5sYWJlbDsK
KyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IERhc2hib2FyZFJlZ2lvblZhbHVlJiBv
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQogCiAg
ICAgU3RyaW5nIGxhYmVsOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJl
dmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBodG1sIHJlbmRlcmVyIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjMsMTEgKzIxLDEzIEBACiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogCiAjaW5j
bHVkZSAiQmlkaVJlc29sdmVyLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGxpcHNpc0JveC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCiAKQEAgLTEzNiwxMSArMTM2LDE5IEBAIHZvaWQgUm9vdElubGlu
ZUJveDo6cGFpbnRFbGxpcHNpc0JveChSZW4KIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKwogdm9p
ZCBSb290SW5saW5lQm94OjphZGRIaWdobGlnaHRPdmVyZmxvdygpCiB7CisgICAgRnJhbWUqIGZy
YW1lID0gb2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gSGlnaGxpZ2h0IGFjdHMgYXMgYSBzZWxl
Y3Rpb24gaW5mbGF0aW9uLgogICAgIEZsb2F0UmVjdCByb290UmVjdCgwLCBzZWxlY3Rpb25Ub3Ao
KSwgd2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+Y3VzdG9t
SGlnaGxpZ2h0TGluZVJlY3Qob2JqZWN0KCktPnN0eWxlKCktPmhpZ2hsaWdodCgpLCByb290UmVj
dCwgb2JqZWN0KCktPm5vZGUoKSkpOworICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3Qo
b2JqZWN0KCktPm5vZGUoKSwgb2JqZWN0KCktPnN0eWxlKCktPmhpZ2hsaWdodCgpLCByb290UmVj
dCkpOwogICAgIHNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhtaW4obGVmdE92ZXJmbG93
KCksIGluZmxhdGVkUmVjdC54KCkpLCBtYXgocmlnaHRPdmVyZmxvdygpLCBpbmZsYXRlZFJlY3Qu
cmlnaHQoKSkpOwogICAgIHNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMobWluKHRvcE92ZXJm
bG93KCksIGluZmxhdGVkUmVjdC55KCkpLCBtYXgoYm90dG9tT3ZlcmZsb3coKSwgaW5mbGF0ZWRS
ZWN0LmJvdHRvbSgpKSk7CiB9CkBAIC0xNTAsMTIgKzE1OCwyMCBAQCB2b2lkIFJvb3RJbmxpbmVC
b3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0CiAgICAgaWYgKCFvYmplY3QoKS0+c2hvdWxkUGFpbnRX
aXRoaW5Sb290KHBhaW50SW5mbykgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgRnJhbWUqIGZyYW1lID0gb2JqZWN0KCktPmRvY3VtZW50KCkt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgLy8gR2V0IHRoZSBpbmZsYXRlZCByZWN0IHNvIHRoYXQgd2UgY2FuIHByb3Blcmx5IGhpdCB0
ZXN0LgogICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHhQb3MoKSwgdHkgKyBzZWxlY3Rpb25U
b3AoKSwgd2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCBpbmZsYXRl
ZFJlY3QgPSBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+Y3VzdG9tSGlnaGxpZ2h0TGlu
ZVJlY3QoaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIG9iamVjdCgpLT5ub2RlKCkpOworICAgIEZs
b2F0UmVjdCBpbmZsYXRlZFJlY3QgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhp
Z2hsaWdodFJlY3Qob2JqZWN0KCktPm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QpOwog
ICAgIGlmIChpbmZsYXRlZFJlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCi0gICAgICAg
IG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5wYWludEN1c3RvbUhpZ2hsaWdodChoaWdo
bGlnaHRUeXBlLCByb290UmVjdCwgcm9vdFJlY3QsIGZhbHNlLCB0cnVlLCBvYmplY3QoKS0+bm9k
ZSgpKTsKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hs
aWdodChvYmplY3QoKS0+bm9kZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCwgcm9vdFJlY3Qs
IGZhbHNlLCB0cnVlKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQo
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkluZGV4
OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDgyIEBACisyMDA4LTAzLTAyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjQwCisgICAgICAgICAg
ZWxpbWluYXRlIFdlYkNvcmVGcmFtZUJyaWRnZQorCisgICAgICAgIFRoaXMgcGF0Y2ggZWxpbWlu
YXRlcyB0aGUgcGFydHMgb2YgdGhlIGJyaWRnZSB1c2VkIGZvciBjYWxscyAqdG8qIFdlYktpdC4K
KyAgICAgICAgTW92ZWQgdGhlIGNvZGUgaW50byBXZWJWaWV3LCBXZWJGcmFtZUxvYWRlckNsaWVu
dCwgYW5kIFdlYkNocm9tZUNsaWVudCBmb3IKKyAgICAgICAgbm93LCBidXQgdGhlcmUgbWlnaHQg
YmUgYW4gZXZlbiBiZXR0ZXIgaG9tZSBmb3Igc29tZSBvZiBpdCBsb25nIHRlcm0uCisKKyAgICAg
ICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbTogVHdlYWtlZCBpbmNsdWRlcy4KKyAg
ICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5tbTogRGl0dG8uCisgICAg
ICAgICogU3RvcmFnZS9XZWJTZWN1cml0eU9yaWdpbi5tbTogRGl0dG8uCisgICAgICAgICogU3Rv
cmFnZS9XZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmg6IERpdHRvLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6IEFkZGVkIG5ldyB2aXJ0dWFsIGZ1bmN0aW9u
cyB0aGF0IHJlcGxhY2UKKyAgICAgICAgYnJpZGdlIG1ldGhvZHMuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCk6IE1vdmVkIGNvZGUgaGVyZSBmcm9tIHRoZSBicmlkZ2Uu
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNldFNlbGVjdGVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNo
cm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OnJ1bk9wZW5QYW5lbCk6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3aWxs
UG9wVXBNZW51KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmphdmFBcHBsZXQp
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgaW5pdFdpdGhD
aG9vc2VyOl0pOiBBZGRlZC4gVXNlZCB0byB3cmFwIHRoZQorICAgICAgICBGaWxlQ2hvb3NlciBz
byBpdCBjYW4gZ2V0IGEgcmVzdWx0IGZyb20gdGhlIFVJIGRlbGVnYXRlLgorICAgICAgICAoLVtX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciBkZWFsbG9jXSk6IEFkZGVkLgorICAgICAgICAoLVtX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciBmaW5hbGl6ZV0pOiBBZGRlZC4KKyAgICAgICAgKC1b
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgY2FuY2VsXSk6IEFkZGVkLgorICAgICAgICAoLVtX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciBjaG9vc2VGaWxlbmFtZTpdKTogQWRkZWQuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oOiBSZW1vdmVkIGFsbW9zdCBl
dmVyeXRoaW5nLiBXaGF0J3MgbGVmdAorICAgICAgICBpcyByZWxhdGVkIHRvIGNyZWF0aW5nIHRo
ZSBicmlkZ2UgYW5kIGNvbm5lY3RlZCBpdCB0byBXZWJDb3JlLCB3aGljaCB3aWxsCisgICAgICAg
IGdvIGxhdGVyIHdoZW4gd2UgZWxpbWluYXRlIHRoZSBXZWJLaXQgdG8gV2ViQ29yZSBwYXJ0IG9m
IHRoZSBicmlkZ2UuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06
CisgICAgICAgICgtW1dlYkZyYW1lQnJpZGdlIGluaXRNYWluRnJhbWVXaXRoUGFnZTpmcmFtZU5h
bWU6ZnJhbWVWaWV3Ol0pOiBDaGFuZ2VkIHRvCisgICAgICAgIHRha2UgYSBjb25zdCBTdHJpbmcm
IGluc3RlYWQgb2YgYSBOU1N0cmluZyAqLgorICAgICAgICAoLVtXZWJGcmFtZUJyaWRnZSBpbml0
U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OmZyYW1lTmFtZTpmcmFtZVZpZXc6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJGcmFtZUJyaWRnZSBjbG9zZV0pOiBNb3ZlZCB0aGUgY29kZSB0byB0cmFj
ayB0aGUgYnJpZGdlIGNvdW50IGhlcmUKKyAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGVhbGxvYyBh
bmQgZmluYWxpemUgbWV0aG9kcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5tbToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRPcmlnaW5h
bFVSTEZvckRvd25sb2FkKTogUmVtb3ZlZCBzb21lIGRlYWQgY29kZS4KKyAgICAgICAgSXQgd2Fz
IGNhbGxpbmcgYSBtZXRob2Qgb24gV2ViSGlzdG9yeUl0ZW0gdGhhdCBkb2VzIG5vdCBleGlzdC4g
QWRkZWQgYSBGSVhNRS4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFt
ZSk6IE1vdmVkIGNvZGUgZnJvbSB0aGUgYnJpZGdlIGhlcmUuCisgICAgICAgIChXZWJGcmFtZUxv
YWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOiBEaXR0by4KKyAgICAgICAgKHBhcmFtZXRl
clZhbHVlKTogQWRkZWQuCisgICAgICAgIChwbHVnaW5WaWV3KTogTW92ZWQgY29kZSBmcm9tIHRo
ZSBicmlkZ2UgaGVyZS4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVn
aW4pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgIChj
b3JlKTogUmV3cm90ZSB0aGlzIHRvIHVzZSBhIHN3aXRjaCBzbyB0aGF0IHRoZSBlbnVtcyBpbiBX
ZWJDb3JlIGFuZAorICAgICAgICBXZWJLaXQgU1BJIGRvbid0IGhhdmUgdG8gbWF0Y2ggZXhhY3Rs
eS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDogUmVtb3ZlZCBkZWNsYXJh
dGlvbiBvZiBhbiB1bnVzZWQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOiBNb3ZlZCBXZWJIVE1MVmlld1ByaXZhdGUgaW4gaGVyZS4gVGhlcmUncyBubworICAg
ICAgICByZWFzb24gdG8gaGF2ZSBpdCBpbiBhIGhlYWRlciBmaWxlLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MVmlld0ludGVybmFsLmg6IE1vdmVkIHRoZSBkZWZpbml0aW9uIG9mCisgICAg
ICAgIFdlYkhUTUxWaWV3UHJpdmF0ZSBvdXQgb2YgdGhpcyBmaWxlLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaDogVHdlYWtlZCBmb3JtYXR0aW5nIGEgYml0IGFuZCBy
ZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6IFJlbW92ZWQgY29tbWVudCBhYm91dCBzdGF5aW5n
IGluIHN5bmMgd2l0aAorICAgICAgICBXZWJDb3JlOyBpdCdzIG5vdCByZWFsbHkgdGhlIGtpbmQg
b2YgdGhpbmcgdGhhdCBiZWxvbmdzIGluIGFuIFNQSSBoZWFkZXIsIGFuZAorICAgICAgICBhbHNv
LCBJIGZpeGVkIGl0IHNvIHdlIGRvbid0IGhhdmUgdG8gc3RheSBpbiBzeW5jLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jbG9zZV0pOiBBZGRl
ZCBjb2RlIHRvIHN0b3Agb2JzZXJ2aW5nIFVJIG1vZGUuCisgICAgICAgICgtW1dlYlZpZXcgX3Jl
dHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6XSk6IEFkZGVkLiBNb3ZlZCBoZXJl
IGZyb20KKyAgICAgICAgdGhlIGJyaWRnZS4KKyAgICAgICAgKC1bV2ViVmlldyBfa2V5Ym9hcmRV
SU1vZGVdKTogQWRkZWQuIE1vdmVkIGhlcmUgZnJvbSB0aGUgYnJpZGdlLgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlld0ludGVybmFsLmg6IEFkZGVkIF9rZXlib2FyZFVJTW9kZSBtZXRob2QuCisK
IDIwMDgtMDMtMDEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6IFdlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFz
ZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNl
TWFuYWdlci5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0
YWJhc2VNYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0
ICJXZWJEYXRhYmFzZU1hbmFnZXJJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJXZWJEYXRhYmFzZVRy
YWNrZXJDbGllbnQuaCIKLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgogI2lt
cG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgogCiAjaW1wb3J0IDxXZWJDb3JlL0Rh
dGFiYXNlVHJhY2tlci5oPgpJbmRleDogV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJh
Y2tlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJh
c2VUcmFja2VyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYktpdC9tYWMvU3RvcmFn
ZS9XZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKICNpbXBvcnQgIldlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgogCiAjaW1wb3J0ICJX
ZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpblBy
aXZhdGUuaCIKICNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKICNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KSW5k
ZXg6IFdlYktpdC9tYWMvU3RvcmFnZS9XZWJTZWN1cml0eU9yaWdpbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHJldmlzaW9uIDMwNzAy
KQorKysgV2ViS2l0L21hYy9TdG9yYWdlL1dlYlNlY3VyaXR5T3JpZ2luLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNyArMjUsNiBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0jaW1w
b3J0ICJXZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaCIKIAogI2ltcG9ydCAiV2ViU2VjdXJpdHlP
cmlnaW5JbnRlcm5hbC5oIgogCkluZGV4OiBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU2VjdXJpdHlP
cmlnaW5JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvU3RvcmFnZS9XZWJTZWN1
cml0eU9yaWdpbkludGVybmFsLmgJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViS2l0L21hYy9TdG9y
YWdlL1dlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW5Q
cml2YXRlLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIH0KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDIzIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rl
ZChXZWJDb3JlOjpXaWRnZXQqLCBib29sKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdlYkNvcmU6OkF0
b21pY1N0cmluZyYgdHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5l
UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNvcmU6Ok5v
ZGUqLCBjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHR5cGUsCisgICAgICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5l
UmVjdCwKKyAgICAgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxpbmUpOworCisgICAg
dmlydHVhbCBXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpOworICAgIHZp
cnR1YWwgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
a2VGaXJzdFJlc3BvbmRlcihOU1Jlc3BvbmRlciAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3Bl
blBhbmVsKFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFBvcFVwTWVudShOU01lbnUgKik7CisgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBs
ZXQoTlNWaWV3ICopOworCiBwcml2YXRlOgogICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKIH07Cklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2
aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDE3IEBACiAjaW1wb3J0ICJXZWJFbGVt
ZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJXZWJIVE1MVmlldy5oIgotI2ltcG9ydCAiV2ViSFRN
TFZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJKYXZhUGx1Z0luLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKICNp
bXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmln
aW5Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWJQbHVnaW4uaCIKICNpbXBvcnQgIldlYlNlY3VyaXR5
T3JpZ2luSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldl
YlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3LmgiCiAjaW1wb3J0ICJXZWJW
aWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRS
ZXF1ZXN0Lmg+CkBAIC01MiwxNSArNTIsMzEgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1T
Y3JlZW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2ltcG9ydCA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAotQGludGVyZmFjZSBOU1ZpZXcgKEFwcEtpdFNlY3JldHNXZWJCcmlkZ2VLbm93c0Fib3V0
KQorQGludGVyZmFjZSBOU1ZpZXcgKE5TVmlld0RldGFpbHMpCiAtIChOU1ZpZXcgKilfZmluZExh
c3RWaWV3SW5LZXlWaWV3TG9vcDsKIEBlbmQKIAorQGludGVyZmFjZSBOU1ZpZXcgKEphdmFQbHVn
aW5EZXRhaWxzKQorLSAoam9iamVjdClwb2xsRm9yQXBwbGV0SW5XaW5kb3c6KE5TV2luZG93ICop
d2luZG93OworQGVuZAorCisvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBTUEkuCitAaW50
ZXJmYWNlIE5TVmlldyAoT2xkV2ViS2l0UGx1Z0luRGV0YWlscykKKy0gKHZvaWQpc2V0SXNTZWxl
Y3RlZDooQk9PTClpc1NlbGVjdGVkOworQGVuZAorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAorQGludGVyZmFjZSBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA6IE5TT2JqZWN0IDxXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4geworICAgIEZpbGVDaG9vc2VyKiBfY2hvb3NlcjsKK30K
Ky0gKGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pY2hvb3NlcjsK
K0BlbmQKKwogV2ViQ2hyb21lQ2xpZW50OjpXZWJDaHJvbWVDbGllbnQoV2ViVmlldyAqd2ViVmll
dykgCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKIHsKQEAgLTQyNSw0ICs0NDEsMTM3IEBAIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUKICAgICAgICAgQ2FsbFVJRGVs
ZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpmcmFtZTpleGNlZWRlZERhdGFiYXNl
UXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRhYmFzZTopLCBraXQoZnJhbWUpLCB3ZWJPcmlnaW4s
IChOU1N0cmluZyAqKWRhdGFiYXNlTmFtZSk7CiAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKIH0K
LSAgICAKKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkK
K3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZWdpb25zID0gY29yZShbbV93ZWJWaWV3IG1h
aW5GcmFtZV0pLT5kYXNoYm9hcmRSZWdpb25zRGljdGlvbmFyeSgpOworICAgIFttX3dlYlZpZXcg
X2FkZFNjcm9sbGVyRGFzaGJvYXJkUmVnaW9uczpyZWdpb25zXTsKKworICAgIENhbGxVSURlbGVn
YXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6
KSwgcmVnaW9ucyk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRTZWxlY3RlZChXaWRn
ZXQqIHdpZGdldCwgYm9vbCBpc1NlbGVjdGVkKQoreworICAgIE5TVmlldyAqdmlldyA9IHdpZGdl
dC0+Z2V0VmlldygpOworICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlBsdWdJblNldElzU2VsZWN0ZWQ6KV0pCisgICAgICAgIFt2aWV3IHdlYlBsdWdJblNldElz
U2VsZWN0ZWQ6aXNTZWxlY3RlZF07CisgICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihzZXRJc1NlbGVjdGVkOildKQorICAgICAgICBbdmlldyBzZXRJc1NlbGVj
dGVkOmlzU2VsZWN0ZWRdOworfQorCitGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21I
aWdobGlnaHRSZWN0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiBsaW5lUmVjdCkKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtba2l0
KG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAg
ICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkK
KyAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZp
ZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7CisgICAgaWQ8V2ViSFRNTEhpZ2hsaWdo
dGVyPiBoaWdobGlnaHRlciA9IFt3ZWJIVE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5cGVd
OworICAgIGlmIChbKE5TT2JqZWN0ICopaGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihoaWdobGlnaHRSZWN0Rm9yTGluZTpyZXByZXNlbnRlZE5vZGU6KV0pCisgICAgICAg
IHJldHVybiBbaGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0UmVjdEZvckxpbmU6bGluZVJlY3QgcmVwcmVz
ZW50ZWROb2RlOmtpdChub2RlKV07CisgICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRS
ZWN0Rm9yTGluZTpsaW5lUmVjdF07Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1
c3RvbUhpZ2hsaWdodChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0
IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICBib29s
IGJlaGluZFRleHQsIGJvb2wgZW50aXJlTGluZSkKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50Vmll
dyA9IFtba2l0KG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIGZyYW1lVmlld10gZG9jdW1lbnRW
aWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcg
Y2xhc3NdXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3
ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAgIGlkPFdlYkhUTUxIaWdobGlnaHRl
cj4gaGlnaGxpZ2h0ZXIgPSBbd2ViSFRNTFZpZXcgX2hpZ2hsaWdodGVyRm9yVHlwZTp0eXBlXTsK
KyAgICBpZiAoWyhOU09iamVjdCAqKWhpZ2hsaWdodGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IocGFpbnRIaWdobGlnaHRGb3JCb3g6b25MaW5lOmJlaGluZFRleHQ6ZW50aXJlTGluZTpy
ZXByZXNlbnRlZE5vZGU6KV0pCisgICAgICAgIFtoaWdobGlnaHRlciBwYWludEhpZ2hsaWdodEZv
ckJveDpib3hSZWN0IG9uTGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OmJlaGluZFRleHQgZW50aXJl
TGluZTplbnRpcmVMaW5lIHJlcHJlc2VudGVkTm9kZTpraXQobm9kZSldOworICAgIGVsc2UKKyAg
ICAgICAgW2hpZ2hsaWdodGVyIHBhaW50SGlnaGxpZ2h0Rm9yQm94OmJveFJlY3Qgb25MaW5lOmxp
bmVSZWN0IGJlaGluZFRleHQ6YmVoaW5kVGV4dCBlbnRpcmVMaW5lOmVudGlyZUxpbmVdOworfQor
CitLZXlib2FyZFVJTW9kZSBXZWJDaHJvbWVDbGllbnQ6OmtleWJvYXJkVUlNb2RlKCkKK3sKKyAg
ICByZXR1cm4gW21fd2ViVmlldyBfa2V5Ym9hcmRVSU1vZGVdOworfQorCitOU1Jlc3BvbmRlciAq
V2ViQ2hyb21lQ2xpZW50OjpmaXJzdFJlc3BvbmRlcigpCit7CisgICAgcmV0dXJuIFtbbV93ZWJW
aWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Rmlyc3RSZXNwb25kZXI6bV93ZWJWaWV3
XTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1ha2VGaXJzdFJlc3BvbmRlcihOU1Jlc3Bv
bmRlciAqcmVzcG9uZGVyKQoreworICAgIFttX3dlYlZpZXcgX3B1c2hQZXJmb3JtaW5nUHJvZ3Jh
bW1hdGljRm9jdXNdOworICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3Om1fd2ViVmlldyBtYWtlRmlyc3RSZXNwb25kZXI6cmVzcG9uZGVyXTsKKyAgICBbbV93ZWJW
aWV3IF9wb3BQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdOworfQorCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cnVuT3BlblBhbmVsKFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIpCit7
CisgICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgKmxpc3RlbmVyID0gW1tXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lciBhbGxvY10gaW5pdFdpdGhDaG9vc2VyOmNob29zZXJdOworICAgIENh
bGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cnVuT3BlblBhbmVsRm9y
RmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjopLCBsaXN0ZW5lcik7CisgICAgW2xpc3RlbmVy
IHJlbGVhc2VdOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6d2lsbFBvcFVwTWVudShOU01l
bnUgKm1lbnUpCit7CisgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2Vi
Vmlldzp3aWxsUG9wdXBNZW51OiksIG1lbnUpOworfQorCitqb2JqZWN0IFdlYkNocm9tZUNsaWVu
dDo6amF2YUFwcGxldChOU1ZpZXcgKnZpZXcpCit7CisgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luR2V0QXBwbGV0KV0pCisgICAgICAgIHJldHVybiBb
KGlkKXZpZXcgd2ViUGx1Z0luR2V0QXBwbGV0XTsKKworICAgIGlmIChbdmlldyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHBvbGxGb3JBcHBsZXRJbldpbmRvdzopXSkgeworICAgICAgICAv
LyBUaGUgSmF2YSBWTSBuZWVkcyB0aGUgY29udGFpbmluZyB3aW5kb3cgb2YgdGhlIHZpZXcgdG8K
KyAgICAgICAgLy8gaW5pdGlhbGl6ZS4gVGhlIHZpZXcgbWF5IG5vdCB5ZXQgYmUgaW4gdGhlIHdp
bmRvdydzIHZpZXcgCisgICAgICAgIC8vIGhpZXJhcmNoeSwgc28gd2UgaGF2ZSB0byBwYXNzIHRo
ZSB3aW5kb3cgd2hlbiByZXF1ZXN0aW5nCisgICAgICAgIC8vIHRoZSBhcHBsZXQuCisgICAgICAg
IHJldHVybiBbKGlkKXZpZXcgcG9sbEZvckFwcGxldEluV2luZG93OlttX3dlYlZpZXcgd2luZG93
XV07CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lcgorCistIChpZClpbml0V2l0aENob29zZXI6KFBhc3NSZWZQdHI8
RmlsZUNob29zZXI+KWNob29zZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfY2hvb3NlciA9IGNob29zZXIucmVs
ZWFzZVJlZigpOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBBU1NFUlQoIV9jaG9vc2VyKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
ZmluYWxpemUKK3sKKyAgICBBU1NFUlQoIV9jaG9vc2VyKTsKKyAgICBbc3VwZXIgZmluYWxpemVd
OworfQorCistICh2b2lkKWNhbmNlbAoreworICAgIEFTU0VSVChfY2hvb3Nlcik7CisgICAgaWYg
KCFfY2hvb3NlcikKKyAgICAgICAgcmV0dXJuOworICAgIF9jaG9vc2VyLT5kZXJlZigpOworICAg
IF9jaG9vc2VyID0gMDsKK30KKworLSAodm9pZCljaG9vc2VGaWxlbmFtZTooTlNTdHJpbmcgKilm
aWxlbmFtZQoreworICAgIEFTU0VSVChfY2hvb3Nlcik7CisgICAgaWYgKCFfY2hvb3NlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIF9jaG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lKTsKKyAgICBf
Y2hvb3Nlci0+ZGVyZWYoKTsKKyAgICBfY2hvb3NlciA9IDA7Cit9CisKK0BlbmQKSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDMwNzAy
KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDU1ICsyOSwxOSBAQAogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVCcmlkZ2UuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKICAgICBjbGFzcyBQYWdlOwogfQog
CiBAY2xhc3MgV2ViRnJhbWU7CiBAY2xhc3MgV2ViRnJhbWVWaWV3OwogCi1AcHJvdG9jb2wgV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7Ci0KLUBpbnRlcmZhY2UgV2ViRnJhbWVCcmlkZ2UgOiBX
ZWJDb3JlRnJhbWVCcmlkZ2UgPFdlYkNvcmVGcmFtZUJyaWRnZT4KLXsKK0BpbnRlcmZhY2UgV2Vi
RnJhbWVCcmlkZ2UgOiBXZWJDb3JlRnJhbWVCcmlkZ2UgewogQHB1YmxpYwogICAgIFdlYkZyYW1l
ICpfZnJhbWU7Ci0KLUBwcml2YXRlCi0gICAgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUgX2tleWJv
YXJkVUlNb2RlOwotICAgIEJPT0wgX2tleWJvYXJkVUlNb2RlQWNjZXNzZWQ7Ci0gICAgQk9PTCBf
ZG9pbmdDbGllbnRSZWRpcmVjdDsKLSAgICBCT09MIF9oYXZlVW5kb1JlZG9PcGVyYXRpb25zOwot
ICAgIAotICAgIE5TRGljdGlvbmFyeSAqbGFzdERhc2hib2FyZFJlZ2lvbnM7CiB9Ci0KLS0gKGlk
KWluaXRNYWluRnJhbWVXaXRoUGFnZTooV2ViQ29yZTo6UGFnZSopcGFnZSBmcmFtZU5hbWU6KE5T
U3RyaW5nICopbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldzsKKy0gKGlk
KWluaXRNYWluRnJhbWVXaXRoUGFnZTooV2ViQ29yZTo6UGFnZSopcGFnZSBmcmFtZU5hbWU6KGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1l
VmlldzsKKy0gKGlkKWluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxG
cmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50IGZyYW1lTmFtZTooY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3OwogLSAodm9p
ZCljbG9zZTsKLQogLSAoV2ViRnJhbWUgKil3ZWJGcmFtZTsKLQotLy8gVGhlIGZvbGxvd2luZyBt
ZXRob2RzIGNhbiBhbGwgbW92ZSBvZmYgdGhlIGJyaWRnZTsgdGhleSdyZSB1c2VkIG9uIHRoZSBX
ZWJLaXQgc2lkZSBvbmx5LgotCi0tIChOU1ZpZXcgKil2aWV3Rm9yUGx1Z2luV2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6KE5TVVJMICop
VVJMCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOihOU0FycmF5ICopYXR0cmli
dXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKilh
dHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3Ry
aW5nICopTUlNRVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6KERPTUVs
ZW1lbnQgKillbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5OihCT09M
KWxvYWRNYW51YWxseTsKLS0gKE5TVmlldyAqKXZpZXdGb3JKYXZhQXBwbGV0V2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOihOU0Fy
cmF5ICopYXR0cmlidXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFs
dWVzOihOU0FycmF5ICopYXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRE9NRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQ7Ci0KLS0gKFdlYkNvcmU6OkZyYW1l
KiljcmVhdGVDaGlsZEZyYW1lTmFtZWQ6KE5TU3RyaW5nICopZnJhbWVOYW1lIHdpdGhVUkw6KE5T
VVJMICopVVJMIHJlZmVycmVyOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKXJlZmVycmVyCi0gICAg
b3duZXJFbGVtZW50OihXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQgKilvd25lckVsZW1l
bnQgYWxsb3dzU2Nyb2xsaW5nOihCT09MKWFsbG93c1Njcm9sbGluZyBtYXJnaW5XaWR0aDooaW50
KXdpZHRoIG1hcmdpbkhlaWdodDooaW50KWhlaWdodDsKLQotLSAodm9pZClyZWRpcmVjdERhdGFU
b1BsdWdpbjooTlNWaWV3ICopcGx1Z2luVmlldzsKLQotLSAoV2ViQ29yZTo6T2JqZWN0Q29udGVu
dFR5cGUpZGV0ZXJtaW5lT2JqZWN0RnJvbU1JTUVUeXBlOihOU1N0cmluZyopTUlNRVR5cGUgVVJM
OihOU1VSTCopVVJMOwotCi0tICh2b2lkKXdpbmRvd09iamVjdENsZWFyZWQ7Ci0KIEBlbmQKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkocmV2aXNp
b24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMTAgKzI4LDE5IEBA
CiAKICNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCiAKLSNpbXBvcnQgIldlYkJhY2tGb3J3YXJk
TGlzdC5oIgotI2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAi
V2ViQmFzZVBsdWdpblBhY2thZ2UuaCIKLSNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYkVkaXRpbmdE
ZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViRm9ybURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJGcmFt
ZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAi
V2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgi
Ci0jaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJI
VE1MVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCi0j
aW1wb3J0ICJXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkphdmFQbHVnSW4u
aCIKLSNpbXBvcnQgIldlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5oIgotI2ltcG9ydCAiV2Vi
S2l0RXJyb3JzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAi
V2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYktpdFBsdWdpbkNvbnRhaW5lclZp
ZXcuaCIKICNpbXBvcnQgIldlYktpdFN0YXRpc3RpY3NQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJL
aXRTeXN0ZW1CaXRzLmgiCi0jaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKLSNpbXBv
cnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2lt
cG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMu
aCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3LmgiCi0jaW1wb3J0ICJX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKLSNpbXBvcnQgIldlYk51bGxQbHVnaW5WaWV3Lmgi
Ci0jaW1wb3J0ICJXZWJQbHVnaW4uaCIKLSNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIK
LSNpbXBvcnQgIldlYlBsdWdpbkRhdGFiYXNlLmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdl
LmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5WaWV3RmFjdG9yeVByaXZhdGUuaCIKLSNpbXBvcnQgIldl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCi0j
aW1wb3J0ICJXZWJTY3JpcHREZWJ1Z1NlcnZlclByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlVJRGVs
ZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEZv
dW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVx
dWVzdC5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlc3BvbnNlLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xv
Y2suaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL29iamVjdC5oPgotI2ltcG9ydCA8SmF2YVZN
L2puaS5oPgotI2ltcG9ydCA8V2ViQ29yZS9DYWNoZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9EcmFnQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4KKyNpbXBvcnQgIldlYlZpZXcuaCIKICNp
bXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVUcmVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVy
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdp
c3RyeS5oPgotCi0vLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBTUEkuIAotQGludGVyZmFj
ZSBOU1ZpZXcgKE9sZFdlYlBsdWdpbikKLS0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClmOwot
QGVuZAotCi1AaW50ZXJmYWNlIE5TVmlldyAoSmF2YVBsdWdpblNlY3JldHMpCi0tIChqb2JqZWN0
KXBvbGxGb3JBcHBsZXRJbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1OU1N0cmluZyAqV2ViUGx1Z2luQmFzZVVSTEtleSA9ICAg
ICBAIldlYlBsdWdpbkJhc2VVUkwiOwotTlNTdHJpbmcgKldlYlBsdWdpbkF0dHJpYnV0ZXNLZXkg
PSAgQCJXZWJQbHVnaW5BdHRyaWJ1dGVzIjsKLU5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJL
ZXkgPSAgIEAiV2ViUGx1Z2luQ29udGFpbmVyIjsKLQotI2RlZmluZSBLZXlib2FyZFVJTW9kZURp
ZENoYW5nZU5vdGlmaWNhdGlvbiBAImNvbS5hcHBsZS5LZXlib2FyZFVJTW9kZURpZENoYW5nZSIK
LSNkZWZpbmUgQXBwbGVLZXlib2FyZFVJTW9kZSBDRlNUUigiQXBwbGVLZXlib2FyZFVJTW9kZSIp
Ci0jZGVmaW5lIFVuaXZlcnNhbEFjY2Vzc0RvbWFpbiBDRlNUUigiY29tLmFwcGxlLnVuaXZlcnNh
bGFjY2VzcyIpCi0KIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZUJyaWRnZQogCi0jaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBXZWJDb3JlT2JqQ0Zp
bmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwotfQotI2VuZGlmCi0KLS0gKFdlYlZpZXcgKil3ZWJW
aWV3Ci17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IHJldHVybiBraXQobV9mcmFtZS0+cGFnZSgpKTsKLX0KLQotLSAodm9pZClmaW5pc2hJbml0aWFs
aXppbmdXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopbmFtZSBmcmFt
ZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldyBvd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93
bmVyRWxlbWVudCopb3duZXJFbGVtZW50CistICh2b2lkKWZpbmlzaEluaXRpYWxpemluZ1dpdGhQ
YWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJiluYW1lIGZyYW1lVmlldzoo
V2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3IG93bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVt
ZW50Kilvd25lckVsZW1lbnQKIHsKICAgICArK1dlYkJyaWRnZUNvdW50OwogCkBAIC0xNDMsNTk5
ICs1MiwzNyBAQCBOU1N0cmluZyAqV2ViUGx1Z2luQ29udGFpbmVyS2V5ID0gICBAIldlCiAgICAg
bV9mcmFtZS0+c2V0QnJpZGdlKHNlbGYpOwogICAgIG1fZnJhbWUtPnRyZWUoKS0+c2V0TmFtZShu
YW1lKTsKICAgICBtX2ZyYW1lLT5pbml0KCk7Ci0gICAgCisKICAgICBbc2VsZiBzZXRUZXh0U2l6
ZU11bHRpcGxpZXI6W3dlYlZpZXcgdGV4dFNpemVNdWx0aXBsaWVyXV07CiB9CiAKLS0gKGlkKWlu
aXRNYWluRnJhbWVXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopbmFt
ZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldworLSAoaWQpaW5pdE1haW5GcmFt
ZVdpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJiluYW1lIGZyYW1l
VmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKICAgICBbc2VsZiBmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTpwYWdlIGZyYW1lTmFtZTpu
YW1lIGZyYW1lVmlldzpmcmFtZVZpZXcgb3duZXJFbGVtZW50OjBdOwogICAgIHJldHVybiBzZWxm
OwogfQogCi0tIChpZClpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25l
ckVsZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KE5TU3RyaW5nICopbmFtZSBmcmFtZVZp
ZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldworLSAoaWQpaW5pdFN1YmZyYW1lV2l0aE93bmVy
RWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1lbnQgZnJhbWVOYW1lOihj
b25zdCBTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcKIHsK
ICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIFtzZWxmIGZpbmlzaEluaXRpYWxpemluZ1dp
dGhQYWdlOm93bmVyRWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFnZSgpIGZyYW1lTmFt
ZTpuYW1lIGZyYW1lVmlldzpmcmFtZVZpZXcgb3duZXJFbGVtZW50Om93bmVyRWxlbWVudF07CiAg
ICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZmluaQotewotICAgIGlmIChfa2V5Ym9hcmRV
SU1vZGVBY2Nlc3NlZCkgewotICAgICAgICBbW05TRGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gCi0gICAgICAgICAgICByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
S2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCi0gICAgICAgICAgICByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uIG9i
amVjdDpuaWxdOwotICAgIH0KLQotICAgIEFTU0VSVChfZnJhbWUgPT0gbmlsKTsKLSAgICAtLVdl
YkJyaWRnZUNvdW50OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbbGFzdERhc2hib2Fy
ZFJlZ2lvbnMgcmVsZWFzZV07Ci0gICAgW19mcmFtZSByZWxlYXNlXTsKLSAgICAKLSAgICBbc2Vs
ZiBmaW5pXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUKLXsK
LSAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICBbc2VsZiBmaW5pXTsKLSAgICBbc3VwZXIg
ZmluYWxpemVdOwotfQotCi0tIChXZWJQcmVmZXJlbmNlcyAqKV9wcmVmZXJlbmNlcwotewotICAg
IHJldHVybiBbW3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNdOwotfQotCi0tICh2b2lkKV9yZXRy
aWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgotewotICAgIENGUHJlZmVyZW5jZXNBcHBTeW5jaHJvbml6ZShVbml2ZXJzYWxBY2Nl
c3NEb21haW4pOwotCi0gICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdDsKLSAg
ICBpbnQgbW9kZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBJbnRlZ2VyVmFsdWUoQXBwbGVLZXlib2Fy
ZFVJTW9kZSwgVW5pdmVyc2FsQWNjZXNzRG9tYWluLCAma2V5RXhpc3RzQW5kSGFzVmFsaWRGb3Jt
YXQpOwotICAgIAotICAgIC8vIFRoZSBrZXlib2FyZCBhY2Nlc3MgbW9kZSBpcyByZXBvcnRlZCBi
eSB0d28gYml0czoKLSAgICAvLyBCaXQgMCBpcyBzZXQgaWYgZmVhdHVyZSBpcyBvbgotICAgIC8v
IEJpdCAxIGlzIHNldCBpZiBmdWxsIGtleWJvYXJkIGFjY2VzcyB3b3JrcyBmb3IgYW55IGNvbnRy
b2wsIG5vdCBqdXN0IHRleHQgYm94ZXMgYW5kIGxpc3RzCi0gICAgLy8gV2UgcmVxdWlyZSBib3Ro
IGJpdHMgdG8gYmUgb24uCi0gICAgLy8gSSBkbyBub3Qga25vdyB0aGF0IHdlIHdvdWxkIGV2ZXIg
Z2V0IG9uZSBiaXQgb24gYW5kIHRoZSBvdGhlciBvZmYgc2luY2UKLSAgICAvLyBjaGVja2luZyB0
aGUgY2hlY2tib3ggaW4gc3lzdGVtIHByZWZlcmVuY2VzIHdoaWNoIGlzIG1hcmtlZCBhcyAiVHVy
biBvbiBmdWxsIGtleWJvYXJkIGFjY2VzcyIKLSAgICAvLyB0dXJucyBvbiBib3RoIGJpdHMuCi0g
ICAgX2tleWJvYXJkVUlNb2RlID0gKG1vZGUgJiAweDIpID8gS2V5Ym9hcmRBY2Nlc3NGdWxsIDog
S2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OwotICAgIAotICAgIC8vIGNoZWNrIGZvciB0YWJiaW5nIHRv
IGxpbmtzCi0gICAgaWYgKFtbc2VsZiBfcHJlZmVyZW5jZXNdIHRhYnNUb0xpbmtzXSkKLSAgICAg
ICAgX2tleWJvYXJkVUlNb2RlID0gKEtleWJvYXJkVUlNb2RlKShfa2V5Ym9hcmRVSU1vZGUgfCBL
ZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzKTsKLX0KLQotLSAoS2V5Ym9hcmRVSU1vZGUpa2V5Ym9h
cmRVSU1vZGUKLXsKLSAgICBpZiAoIV9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7Ci0gICAgICAg
IF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkID0gWUVTOwotICAgICAgICBbc2VsZiBfcmV0cmlldmVL
ZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczpuaWxdOwotICAgICAgICAKLSAgICAgICAgW1tO
U0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAotICAgICAgICAg
ICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJpZXZlS2V5Ym9hcmRV
SU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKLSAgICAgICAgICAgIG5hbWU6S2V5Ym9hcmRVSU1vZGVE
aWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0KLSAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKLSAgICAgICAgICAgIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2Vz
OikgCi0gICAgICAgICAgICAgICAgICAgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQotICAgIHJldHVybiBfa2V5Ym9hcmRVSU1vZGU7Ci19
Ci0KIC0gKFdlYkZyYW1lICopd2ViRnJhbWUKIHsKICAgICByZXR1cm4gX2ZyYW1lOwogfQogCi0t
IChXZWJDb3JlRnJhbWVCcmlkZ2UgKiltYWluRnJhbWUKLXsKLSAgICBBU1NFUlQoX2ZyYW1lICE9
IG5pbCk7Ci0gICAgcmV0dXJuIFtbW3NlbGYgd2ViVmlld10gbWFpbkZyYW1lXSBfYnJpZGdlXTsK
LX0KLQotLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcgotewotICAgIEFTU0VSVChfZnJh
bWUgIT0gbmlsKTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgd2ViVmlld107Ci0gICAg
cmV0dXJuIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZpcnN0UmVzcG9u
ZGVyOndlYlZpZXddOwotfQotCi0tICh2b2lkKW1ha2VGaXJzdFJlc3BvbmRlcjooTlNSZXNwb25k
ZXIgKil2aWV3Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIFdlYlZpZXcgKndl
YlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICBBU1NFUlQoW3ZpZXcgaXNLaW5kT2ZDbGFzczpb
TlNWaWV3IGNsYXNzXV0pOwotICAgIEFTU0VSVChbKE5TVmlldyAqKXZpZXcgd2luZG93XSk7Ci0g
ICAgQVNTRVJUKFsoTlNWaWV3ICopdmlldyB3aW5kb3ddID09IFt3ZWJWaWV3IHdpbmRvd10pOwot
ICAgIFt3ZWJWaWV3IF9wdXNoUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXTsKLSAgICBbW3dl
YlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBtYWtlRmlyc3RSZXNw
b25kZXI6dmlld107Ci0gICAgW3dlYlZpZXcgX3BvcFBlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1
c107Ci19Ci0KLS0gKE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBu
aWwpOwotICAgIHJldHVybiBbW19mcmFtZSBmcmFtZVZpZXddIHdpbmRvd107Ci19Ci0KLS0gKHZv
aWQpcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjooaWQ8V2ViQ29y
ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lcgotewotICAgIFdlYlZpZXcg
Knd2ID0gW3NlbGYgd2ViVmlld107Ci0gICAgW1t3diBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3diBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3RlbmVyOihpZDxX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4pcmVzdWx0TGlzdGVuZXJdOwotfQotCi0tIChXZWJE
YXRhU291cmNlICopZGF0YVNvdXJjZQotewotICAgIEFTU0VSVChfZnJhbWUgIT0gbmlsKTsKLSAg
ICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlID0gW19mcmFtZSBfZGF0YVNvdXJjZV07Ci0KLSAg
ICBBU1NFUlQoZGF0YVNvdXJjZSAhPSBuaWwpOwotCi0gICAgcmV0dXJuIGRhdGFTb3VyY2U7Ci19
Ci0KIC0gKHZvaWQpY2xvc2UKIHsKICAgICBbc3VwZXIgY2xvc2VdOworICAgIGlmICghX2ZyYW1l
KQorICAgICAgICByZXR1cm47CisgICAgLS1XZWJCcmlkZ2VDb3VudDsKICAgICBbX2ZyYW1lIHJl
bGVhc2VdOwogICAgIF9mcmFtZSA9IG5pbDsKIH0KIAotLSAoRnJhbWUqKWNyZWF0ZUNoaWxkRnJh
bWVOYW1lZDooTlNTdHJpbmcgKilmcmFtZU5hbWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpdGhVUkw6KE5TVVJMICopVVJMCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVmZXJyZXI6KGNvbnN0IFN0cmluZyYpcmVmZXJyZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVt
ZW50Kilvd25lckVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93c1Nj
cm9sbGluZzooQk9PTClhbGxvd3NTY3JvbGxpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luV2lkdGg6KGludCl3aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFyZ2luSGVpZ2h0OihpbnQpaGVpZ2h0Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSk7
Ci0gICAgCi0gICAgV2ViRnJhbWVWaWV3ICpjaGlsZFZpZXcgPSBbW1dlYkZyYW1lVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsMCwwLDApXTsKLSAgICBbY2hpbGRWaWV3IHNl
dEFsbG93c1Njcm9sbGluZzphbGxvd3NTY3JvbGxpbmddOwotICAgIFtjaGlsZFZpZXcgX3NldE1h
cmdpbldpZHRoOndpZHRoXTsKLSAgICBbY2hpbGRWaWV3IF9zZXRNYXJnaW5IZWlnaHQ6aGVpZ2h0
XTsKLQotICAgIFdlYkZyYW1lQnJpZGdlICpuZXdCcmlkZ2UgPSBbW1dlYkZyYW1lQnJpZGdlIGFs
bG9jXSBpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50Om93bmVyRWxlbWVudCBmcmFtZU5hbWU6
ZnJhbWVOYW1lIGZyYW1lVmlldzpjaGlsZFZpZXddOwotICAgIFtjaGlsZFZpZXcgcmVsZWFzZV07
Ci0KLSAgICBpZiAoIW5ld0JyaWRnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBbX2ZyYW1l
IF9hZGRDaGlsZDpbbmV3QnJpZGdlIHdlYkZyYW1lXV07Ci0gICAgW25ld0JyaWRnZSByZWxlYXNl
XTsKLQotICAgIFJlZlB0cjxGcmFtZT4gbmV3RnJhbWUgPSBbbmV3QnJpZGdlIF9mcmFtZV07Ci0g
ICAgCi0gICAgW19mcmFtZSBfbG9hZFVSTDpVUkwgcmVmZXJyZXI6cmVmZXJyZXIgaW50b0NoaWxk
OmtpdChuZXdGcmFtZS5nZXQoKSldOwotCi0gICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRs
ZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KLSAgICBpZiAoIW5ld0Zy
YW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBu
ZXdGcmFtZS5nZXQoKTsKLX0KLQotLSAoTlNWaWV3ICopcGx1Z2luVmlld1dpdGhQYWNrYWdlOihX
ZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZU5hbWVzOihOU0FycmF5ICopYXR0cmlidXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZVZhbHVlczooTlNBcnJheSAqKWF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgICAgICAgICAg
ICAgRE9NRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAg
IGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHkKLXsKLSAgICBXZWJIVE1MVmlldyAqZG9j
VmlldyA9IChXZWJIVE1MVmlldyAqKVtbX2ZyYW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsK
LSAgICBBU1NFUlQoW2RvY1ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7
Ci0gICAgICAgIAotICAgIFdlYlBsdWdpbkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXIgPSBb
ZG9jVmlldyBfcGx1Z2luQ29udHJvbGxlcl07Ci0gICAgCi0gICAgLy8gU3RvcmUgYXR0cmlidXRl
cyBpbiBhIGRpY3Rpb25hcnkgc28gdGhleSBjYW4gYmUgcGFzc2VkIHRvIFdlYlBsdWdpbnMuCi0g
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtbTlNNdXRhYmxlRGljdGlvbmFy
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOmF0dHJpYnV0ZVZhbHVlcyBmb3JLZXlzOmF0dHJpYnV0
ZU5hbWVzXTsKLSAgICAKLSAgICBbcGx1Z2luUGFja2FnZSBsb2FkXTsKLSAgICBDbGFzcyB2aWV3
RmFjdG9yeSA9IFtwbHVnaW5QYWNrYWdlIHZpZXdGYWN0b3J5XTsKLSAgICAKLSAgICBOU1ZpZXcg
KnZpZXcgPSBuaWw7Ci0gICAgTlNEaWN0aW9uYXJ5ICphcmd1bWVudHMgPSBuaWw7Ci0gICAgCi0g
ICAgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZp
ZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIGFyZ3VtZW50cyA9IFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAgIGJhc2VVUkwsIFdlYlBs
dWdJbkJhc2VVUkxLZXksCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLCBXZWJQbHVnSW5BdHRyaWJ1
dGVzS2V5LAotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlciwgV2ViUGx1Z0luQ29udGFpbmVy
S2V5LAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bG9hZE1hbnVhbGx5ID8g
V2ViUGx1Z0luTW9kZUZ1bGwgOiBXZWJQbHVnSW5Nb2RlRW1iZWRdLCBXZWJQbHVnSW5Nb2RlS2V5
LAotICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiFsb2FkTWFudWFsbHldLCBX
ZWJQbHVnSW5TaG91bGRMb2FkTWFpblJlc291cmNlS2V5LAotICAgICAgICAgICAgZWxlbWVudCwg
V2ViUGx1Z0luQ29udGFpbmluZ0VsZW1lbnRLZXksCi0gICAgICAgICAgICBuaWxdOwotICAgICAg
ICBMT0coUGx1Z2lucywgImFyZ3VtZW50czpcbiVAIiwgYXJndW1lbnRzKTsKLSAgICB9IGVsc2Ug
aWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdX
aXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIGFyZ3VtZW50cyA9IFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAgIGJhc2VVUkwsIFdlYlBsdWdp
bkJhc2VVUkxLZXksCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLCBXZWJQbHVnaW5BdHRyaWJ1dGVz
S2V5LAotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlciwgV2ViUGx1Z2luQ29udGFpbmVyS2V5
LAotICAgICAgICAgICAgZWxlbWVudCwgV2ViUGx1Z0luQ29udGFpbmluZ0VsZW1lbnRLZXksCi0g
ICAgICAgICAgICBuaWxdOwotICAgICAgICBMT0coUGx1Z2lucywgImFyZ3VtZW50czpcbiVAIiwg
YXJndW1lbnRzKTsKLSAgICB9Ci0KLSAgICB2aWV3ID0gW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1
Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzIGZyb21QbHVnaW5QYWNrYWdlOnBsdWdpblBh
Y2thZ2VdOwotICAgIFthdHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgIHJldHVybiB2aWV3OwotfQot
Ci0tIChOU1N0cmluZyAqKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleSBrZXlzOihOU0FycmF5
ICopa2V5cyB2YWx1ZXM6KE5TQXJyYXkgKil2YWx1ZXMKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9
IFtrZXlzIGNvdW50XTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICBpZiAoW1trZXlzIG9iamVjdEF0SW5kZXg6aV0gX3dlYmtpdF9pc0Nh
c2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmc6a2V5XSkKLSAgICAgICAgICAgIHJldHVybiBbdmFs
dWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNWaWV3ICop
dmlld0ZvclBsdWdpbldpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVOYW1lczooTlNBcnJheSAqKWF0dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlVmFsdWVzOihOU0FycmF5ICopYXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBET01FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotICAgICAgICAgICAgICAg
ICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHkKLXsKLSAgICBBU1NFUlQoW2F0
dHJpYnV0ZU5hbWVzIGNvdW50XSA9PSBbYXR0cmlidXRlVmFsdWVzIGNvdW50XSk7Ci0KLSAgICBX
ZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZSA9IG5pbDsKLSAgICBOU1ZpZXcgKnZp
ZXcgPSBuaWw7Ci0gICAgaW50IGVycm9yQ29kZSA9IDA7Ci0KLSAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gW3NlbGYgd2ViVmlld107Ci0gICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYlZpZXc6
cGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KTsKLQotICAgIGlmIChbW3dlYlZpZXcgVUlEZWxlZ2F0
ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewotICAgICAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6YXR0cmlidXRlVmFsdWVzIGZvcktleXM6YXR0cmlidXRlTmFtZXNdOwotICAgICAg
ICBOU0RpY3Rpb25hcnkgKmFyZ3VtZW50cyA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHNBbmRLZXlzOgotICAgICAgICAgICAgYXR0cmlidXRlcywgV2ViUGx1Z0luQXR0cmli
dXRlc0tleSwKLSAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmxvYWRNYW51YWxs
eSA/IFdlYlBsdWdJbk1vZGVGdWxsIDogV2ViUGx1Z0luTW9kZUVtYmVkXSwgV2ViUGx1Z0luTW9k
ZUtleSwKLSAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDohbG9hZE1hbnVhbGx5
XSwgV2ViUGx1Z0luU2hvdWxkTG9hZE1haW5SZXNvdXJjZUtleSwKLSAgICAgICAgICAgIGVsZW1l
bnQsIFdlYlBsdWdJbkNvbnRhaW5pbmdFbGVtZW50S2V5LAotICAgICAgICAgICAgVVJMLCBXZWJQ
bHVnSW5CYXNlVVJMS2V5LCAvLyBVUkwgbWlnaHQgYmUgbmlsLCBzbyBhZGQgaXQgbGFzdAotICAg
ICAgICAgICAgbmlsXTsKLQotICAgICAgICB2aWV3ID0gQ2FsbFVJRGVsZWdhdGUod2ViVmlldywg
c2VsZWN0b3IsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgW2F0dHJpYnV0ZXMgcmVsZWFzZV07Ci0g
ICAgICAgIFthcmd1bWVudHMgcmVsZWFzZV07Ci0KLSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAg
ICAgICByZXR1cm4gdmlldzsKLSAgICB9Ci0KLSAgICBpZiAoW01JTUVUeXBlIGxlbmd0aF0gIT0g
MCkKLSAgICAgICAgcGx1Z2luUGFja2FnZSA9IFtbc2VsZiB3ZWJWaWV3XSBfcGx1Z2luRm9yTUlN
RVR5cGU6TUlNRVR5cGVdOwotICAgIGVsc2UKLSAgICAgICAgTUlNRVR5cGUgPSBuaWw7Ci0gICAg
Ci0gICAgTlNTdHJpbmcgKmV4dGVuc2lvbiA9IFtbVVJMIHBhdGhdIHBhdGhFeHRlbnNpb25dOwot
ICAgIGlmICghcGx1Z2luUGFja2FnZSAmJiBbZXh0ZW5zaW9uIGxlbmd0aF0gIT0gMCkgewotICAg
ICAgICBwbHVnaW5QYWNrYWdlID0gW1tzZWxmIHdlYlZpZXddIF9wbHVnaW5Gb3JFeHRlbnNpb246
ZXh0ZW5zaW9uXTsKLSAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgIE5T
U3RyaW5nICpuZXdNSU1FVHlwZSA9IFtwbHVnaW5QYWNrYWdlIE1JTUVUeXBlRm9yRXh0ZW5zaW9u
OmV4dGVuc2lvbl07Ci0gICAgICAgICAgICBpZiAoW25ld01JTUVUeXBlIGxlbmd0aF0gIT0gMCkK
LSAgICAgICAgICAgICAgICBNSU1FVHlwZSA9IG5ld01JTUVUeXBlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgTlNVUkwgKmJhc2VVUkwgPSBbc2VsZiBiYXNlVVJMXTsKLSAgICBpZiAocGx1Z2lu
UGFja2FnZSkgewotICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2Vi
UGx1Z2luUGFja2FnZSBjbGFzc11dKSB7Ci0gICAgICAgICAgICB2aWV3ID0gW3NlbGYgcGx1Z2lu
Vmlld1dpdGhQYWNrYWdlOihXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczphdHRyaWJ1dGVOYW1lcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGVW
YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFz
ZVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxlbWVudDplbGVt
ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5OmxvYWRN
YW51YWxseV07Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotI2lmbmRlZiBfX0xQNjRfXwotICAg
ICAgICBlbHNlIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2UgY2xhc3NdXSkgewotICAgICAgICAgICAgV2ViTmV0c2NhcGVQbHVnaW5FbWJl
ZGRlZFZpZXcgKmVtYmVkZGVkVmlldyA9IFtbW1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOmZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBl
UGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDpVUkwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
S2V5czphdHRyaWJ1dGVOYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZVZhbHVlcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01FbGVtZW50OmVsZW1lbnRdIGF1dG9y
ZWxlYXNlXTsKLSAgICAgICAgICAgIHZpZXcgPSBlbWJlZGRlZFZpZXc7Ci0gICAgICAgIH0gCi0j
ZW5kaWYKLSAgICB9IGVsc2UKLSAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JDYW5ub3RG
aW5kUGx1Z0luOwotCi0gICAgaWYgKCFlcnJvckNvZGUgJiYgIXZpZXcpCi0gICAgICAgIGVycm9y
Q29kZSA9IFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbjsKLQotICAgIGlmIChlcnJvckNvZGUp
IHsKLSAgICAgICAgTlNTdHJpbmcgKnBsdWdpblBhZ2UgPSBbc2VsZiB2YWx1ZUZvcktleTpAInBs
dWdpbnNwYWdlIiBrZXlzOmF0dHJpYnV0ZU5hbWVzIHZhbHVlczphdHRyaWJ1dGVWYWx1ZXNdOwot
ICAgICAgICBOU1VSTCAqcGx1Z2luUGFnZVVSTCA9IHBsdWdpblBhZ2UgIT0gbmlsID8gW3NlbGYg
VVJMV2l0aEF0dHJpYnV0ZVN0cmluZzpwbHVnaW5QYWdlXSA6IG5pbDsKLSAgICAgICAgTlNFcnJv
ciAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIF9pbml0V2l0aFBsdWdpbkVycm9yQ29kZTplcnJv
ckNvZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGVudFVSTDpVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGx1Z2luUGFnZVVSTDpwbHVnaW5QYWdlVVJMCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6
W3BsdWdpblBhY2thZ2UgbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpNSU1FVHlwZV07Ci0gICAgICAgIFdlYk51
bGxQbHVnaW5WaWV3ICpudWxsVmlldyA9IFtbW1dlYk51bGxQbHVnaW5WaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOmZyYW1lIGVycm9yOmVycm9yIERPTUVsZW1lbnQ6ZWxlbWVudF0gYXV0b3JlbGVh
c2VdOwotICAgICAgICB2aWV3ID0gbnVsbFZpZXc7Ci0gICAgICAgIFtlcnJvciByZWxlYXNlXTsK
LSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHZpZXcpOwotICAgIHJldHVybiB2aWV3OwotfQotCi0t
ICh2b2lkKXJlZGlyZWN0RGF0YVRvUGx1Z2luOihOU1ZpZXcgKilwbHVnaW5WaWV3Ci17Ci0gICAg
V2ViSFRNTFJlcHJlc2VudGF0aW9uICpyZXByZXNlbnRhdGlvbiA9IChXZWJIVE1MUmVwcmVzZW50
YXRpb24gKilbW19mcmFtZSBfZGF0YVNvdXJjZV0gcmVwcmVzZW50YXRpb25dOwotCi0jaWZuZGVm
IF9fTFA2NF9fCi0gICAgaWYgKFtwbHVnaW5WaWV3IGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBl
UGx1Z2luRW1iZWRkZWRWaWV3IGNsYXNzXV0pCi0gICAgICAgIFtyZXByZXNlbnRhdGlvbiBfcmVk
aXJlY3REYXRhVG9NYW51YWxMb2FkZXI6KFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3ICop
cGx1Z2luVmlldyBmb3JQbHVnaW5WaWV3OnBsdWdpblZpZXddOwotICAgIGVsc2UgewotI2Vsc2UK
LSAgICB7Ci0jZW5kaWYKLSAgICAgICAgV2ViSFRNTFZpZXcgKmRvY1ZpZXcgPSAoV2ViSFRNTFZp
ZXcgKilbW19mcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgICAgIEFTU0VSVChb
ZG9jVmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKLSAgICAgICAgCi0g
ICAgICAgIFdlYlBsdWdpbkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXIgPSBbZG9jVmlldyBf
cGx1Z2luQ29udHJvbGxlcl07Ci0gICAgICAgIFtyZXByZXNlbnRhdGlvbiBfcmVkaXJlY3REYXRh
VG9NYW51YWxMb2FkZXI6cGx1Z2luQ29udHJvbGxlciBmb3JQbHVnaW5WaWV3OnBsdWdpblZpZXdd
OwotICAgIH0KLQotfQotCi0tIChOU1ZpZXcgKil2aWV3Rm9ySmF2YUFwcGxldFdpdGhGcmFtZToo
TlNSZWN0KXRoZUZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczoo
TlNBcnJheSAqKWF0dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZVZhbHVlczooTlNBcnJheSAqKWF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERPTUVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Ci17Ci0gICAgTlNTdHJpbmcg
Kk1JTUVUeXBlID0gQCJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IjsKLSAgICBXZWJCYXNlUGx1
Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZTsKLSAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7Ci0gICAg
Ci0gICAgcGx1Z2luUGFja2FnZSA9IFtbc2VsZiB3ZWJWaWV3XSBfcGx1Z2luRm9yTUlNRVR5cGU6
TUlNRVR5cGVdOwotCi0gICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgaWYgKFtwbHVn
aW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgewotICAg
ICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uLCB0aGUgSmF2YSBwbHVnLWluIHJlcXVpcmVzIHRo
YXQgd2UgcGFzcyB0aGUgZGltZW5zaW9uIG9mIHRoZSBwbHVnLWluIGFzIGF0dHJpYnV0ZXMuCi0g
ICAgICAgICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbYXR0cmlidXRlTmFtZXMgbXV0YWJs
ZUNvcHldOwotICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnZhbHVlcyA9IFthdHRyaWJ1dGVW
YWx1ZXMgbXV0YWJsZUNvcHldOwotICAgICAgICAgICAgaWYgKFtzZWxmIHZhbHVlRm9yS2V5OkAi
d2lkdGgiIGtleXM6YXR0cmlidXRlTmFtZXMgdmFsdWVzOmF0dHJpYnV0ZVZhbHVlc10gPT0gbmls
KSB7Ci0gICAgICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDpAIndpZHRoIl07Ci0gICAgICAg
ICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
ZCIsIChpbnQpdGhlRnJhbWUuc2l6ZS53aWR0aF1dOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKFtzZWxmIHZhbHVlRm9yS2V5OkAiaGVpZ2h0IiBrZXlzOmF0dHJpYnV0ZU5hbWVzIHZh
bHVlczphdHRyaWJ1dGVWYWx1ZXNdID09IG5pbCkgewotICAgICAgICAgICAgICAgIFtuYW1lcyBh
ZGRPYmplY3Q6QCJoZWlnaHQiXTsKLSAgICAgICAgICAgICAgICBbdmFsdWVzIGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgKGludCl0aGVGcmFtZS5zaXplLmhlaWdo
dF1dOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlldyA9IFtzZWxmIHBsdWdpblZpZXdX
aXRoUGFja2FnZTooV2ViUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6bmFtZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6dmFsdWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJMOmJhc2VVUkwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6ZWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYWRNYW51YWxseTpOT107Ci0gICAgICAgICAgICBbbmFtZXMgcmVs
ZWFzZV07Ci0gICAgICAgICAgICBbdmFsdWVzIHJlbGVhc2VdOwotICAgICAgICAgICAgCi0gICAg
ICAgIH0gCi0jaWZuZGVmIF9fTFA2NF9fCi0gICAgICAgIGVsc2UgaWYgKFtwbHVnaW5QYWNrYWdl
IGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKSB7Ci0gICAg
ICAgICAgICB2aWV3ID0gW1tbV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6dGhlRnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlICopcGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOm5pbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
VVJMOmJhc2VVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpNSU1FVHlwZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVLZXlzOmF0
dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFu
dWFsbHk6Tk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRE9NRWxlbWVudDplbGVtZW50XSBhdXRvcmVsZWFzZV07Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgfQotCi0gICAgaWYgKCF2aWV3KSB7Ci0gICAgICAgIE5TRXJyb3IgKmVycm9y
ID0gW1tOU0Vycm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6V2ViS2l0RXJyb3JK
YXZhVW5hdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGVudFVSTDpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luUGFnZVVSTDpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZTpb
cGx1Z2luUGFja2FnZSBuYW1lXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlXTsKLSAgICAgICAgdmlldyA9
IFtbW1dlYk51bGxQbHVnaW5WaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnRoZUZyYW1lIGVycm9y
OmVycm9yIERPTUVsZW1lbnQ6ZWxlbWVudF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBbZXJyb3Ig
cmVsZWFzZV07Ci0gICAgfQotCi0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgcmV0dXJuIHZpZXc7
Ci19Ci0KLS0gKE9iamVjdENvbnRlbnRUeXBlKWRldGVybWluZU9iamVjdEZyb21NSU1FVHlwZToo
TlNTdHJpbmcqKU1JTUVUeXBlIFVSTDooTlNVUkwqKVVSTAotewotICAgIC8vIFRoaXMgaXMgYSBx
dWlyayB0aGF0IGVuc3VyZXMgVGlnZXIgTWFpbCdzIFdlYktpdCBwbHVnLWluIHdpbGwgbG9hZCBk
dXJpbmcgbGF5b3V0Ci0gICAgLy8gYW5kIG5vdCBhdHRhY2ggdGltZS4gKDU1MjA1NDEpCi0gICAg
c3RhdGljIEJPT0wgaXNUaWdlck1haWwgPSBXS0FwcFZlcnNpb25DaGVja0xlc3NUaGFuKEAiY29t
LmFwcGxlLm1haWwiLCAtMSwgMy4wKTsKLSAgICBpZiAoaXNUaWdlck1haWwgJiYgW01JTUVUeXBl
IGlzRXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL3gtYXBwbGUtbXNnLWF0dGFjaG1lbnQiXSkK
LSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKLSAgICAKLSAgICBp
ZiAoW01JTUVUeXBlIGxlbmd0aF0gPT0gMCkgewotICAgICAgICAvLyBUcnkgdG8gZ3Vlc3MgdGhl
IE1JTUUgdHlwZSBiYXNlZCBvZmYgdGhlIGV4dGVuc2lvbi4KLSAgICAgICAgTlNTdHJpbmcgKmV4
dGVuc2lvbiA9IFtbVVJMIHBhdGhdIHBhdGhFeHRlbnNpb25dOwotICAgICAgICBpZiAoW2V4dGVu
c2lvbiBsZW5ndGhdID4gMCkgewotICAgICAgICAgICAgTUlNRVR5cGUgPSBXS0dldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgICAgICAgICBpZiAoW01JTUVUeXBlIGxlbmd0
aF0gPT0gMCkgewotICAgICAgICAgICAgICAgIC8vIElmIG5vIE1JTUUgdHlwZSBpcyBzcGVjaWZp
ZWQsIHVzZSBhIHBsdWctaW4gaWYgd2UgaGF2ZSBvbmUgdGhhdCBjYW4gaGFuZGxlIHRoZSBleHRl
bnNpb24uCi0gICAgICAgICAgICAgICAgaWYgKFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwYWNrYWdl
ID0gW1tzZWxmIHdlYlZpZXddIF9wbHVnaW5Gb3JFeHRlbnNpb246ZXh0ZW5zaW9uXSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoW3BhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFj
a2FnZSBjbGFzc11dKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250
ZW50T3RoZXJQbHVnaW47Ci0jaWZuZGVmIF9fTFA2NF9fCi0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKFtwYWNrYWdlIGlzS2luZE9mQ2xh
c3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChbTUlNRVR5cGUgbGVuZ3RoXSA9PSAwKQotICAgICAgICBy
ZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOyAvLyBHbyBhaGVhZCBhbmQgaG9wZSB0aGF0IHdlIGNh
biBkaXNwbGF5IHRoZSBjb250ZW50LgotCi0gICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZShNSU1FVHlwZSkpCi0gICAgICAgIHJldHVybiBPYmplY3RDb250
ZW50SW1hZ2U7Ci0KLSAgICBpZiAoV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBhY2thZ2UgPSBbW3Nl
bGYgd2ViVmlld10gX3BsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXSkgewotICAgICAgICBpZiAo
W3BhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKSAKLSAgICAg
ICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47Ci0jaWZuZGVmIF9fTFA2NF9f
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKFtwYWNrYWdlIGlzS2luZE9mQ2xh
c3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKTsKLSAgICAgICAgICAgIHJldHVy
biBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0K
LQotICAgIGlmIChbV2ViRnJhbWVWaWV3IF92aWV3Q2xhc3NGb3JNSU1FVHlwZTpNSU1FVHlwZV0p
Ci0gICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7Ci0gICAgCi0gICAgcmV0dXJuIE9i
amVjdENvbnRlbnROb25lOwotfQotCi0tIChqb2JqZWN0KWdldEFwcGxldEluVmlldzooTlNWaWV3
ICopdmlldwotewotICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlBsdWdJbkdldEFwcGxldCldKQotICAgICAgICByZXR1cm4gW3ZpZXcgd2ViUGx1Z0luR2V0QXBw
bGV0XTsKLSAgICByZXR1cm4gW3NlbGYgcG9sbEZvckFwcGxldEluVmlldzp2aWV3XTsKLX0KLQot
Ly8gTk9URTogcG9sbEZvckFwcGxldEluVmlldzogd2lsbCBibG9jayB1bnRpbCB0aGUgYmxvY2sg
aXMgcmVhZHkgdG8gdXNlLCBvcgotLy8gdW50aWwgYSB0aW1lb3V0IGlzIGV4Y2VlZGVkLiAgSXQg
d2lsbCByZXR1cm4gbmlsIGlmIHRoZSB0aW1lb3V0IGlzCi0vLyBleGNlZWRlZC4KLS8vIERlcHJl
Y2F0ZWQsIHVzZSBnZXRBcHBsZXRJblZpZXc6LgotLSAoam9iamVjdClwb2xsRm9yQXBwbGV0SW5W
aWV3OihOU1ZpZXcgKil2aWV3Ci17Ci0gICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocG9sbEZvckFwcGxldEluV2luZG93OildKQotICAgICAgICAvLyBUaGUgSmF2YSBW
TSBuZWVkcyB0aGUgY29udGFpbmluZyB3aW5kb3cgb2YgdGhlIHZpZXcgdG8KLSAgICAgICAgLy8g
aW5pdGlhbGl6ZS4gVGhlIHZpZXcgbWF5IG5vdCB5ZXQgYmUgaW4gdGhlIHdpbmRvdydzIHZpZXcg
Ci0gICAgICAgIC8vIGhpZXJhcmNoeSwgc28gd2UgaGF2ZSB0byBwYXNzIHRoZSB3aW5kb3cgd2hl
biByZXF1ZXN0aW5nCi0gICAgICAgIC8vIHRoZSBhcHBsZXQuCi0gICAgICAgIHJldHVybiBbdmll
dyBwb2xsRm9yQXBwbGV0SW5XaW5kb3c6W1tzZWxmIHdlYlZpZXddIHdpbmRvd11dOwotICAgIHJl
dHVybiAwOwotfQotCi0tICh2b2lkKXJlc3BvbmRUb0NoYW5nZWRDb250ZW50cwotewotICAgIE5T
VmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqdmlldyA9IFtbX2ZyYW1lIGZyYW1lVmlld10gZG9jdW1l
bnRWaWV3XTsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSkKLSAgICAgICAgWyhXZWJIVE1MVmlldyAqKXZpZXcgX3VwZGF0ZUZvbnRQYW5lbF07Ci0gICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90aWZpY2F0aW9uTmFt
ZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpbc2VsZiB3ZWJWaWV3XV07Ci19
Ci0KLS0gKE5TVW5kb01hbmFnZXIgKil1bmRvTWFuYWdlcgotewotICAgIHJldHVybiBbW3NlbGYg
d2ViVmlld10gdW5kb01hbmFnZXJdOwotfQotCi0tICh2b2lkKWlzc3VlUGFzdGVDb21tYW5kCi17
Ci0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXcgPSBbW19mcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50
Vmlld107Ci0gICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcg
Y2xhc3NdXSkKLSAgICAgICAgWyhXZWJIVE1MVmlldyopZG9jdW1lbnRWaWV3IHBhc3RlOm5pbF07
Ci19Ci0KLS0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1NlbGVjdGVkIGZvclZpZXc6KE5T
VmlldyAqKXZpZXcKLXsKLSAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOildKQotICAgICAgICBbdmlldyB3ZWJQbHVnSW5TZXRJ
c1NlbGVjdGVkOmlzU2VsZWN0ZWRdOwotICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0SXNTZWxlY3RlZDopXSkKLSAgICAgICAgW3ZpZXcgc2V0SXNTZWxl
Y3RlZDppc1NlbGVjdGVkXTsKLX0KLQotLSAodm9pZCl3aW5kb3dPYmplY3RDbGVhcmVkCi17Ci0g
ICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcoX2ZyYW1lKTsKLSAgICBXZWJGcmFtZUxv
YWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdH
ZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKLSAgICBpZiAoaW1w
bGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKLSAgICAgICAg
Q2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFyV2luZG93
T2JqZWN0OmZvckZyYW1lOiksIG1fZnJhbWUtPndpbmRvd1NjcmlwdE9iamVjdCgpLCBfZnJhbWUp
OwotICAgIGVsc2UgaWYgKGltcGxlbWVudGF0aW9ucy0+d2luZG93U2NyaXB0T2JqZWN0QXZhaWxh
YmxlRnVuYykKLSAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+
d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZp
ZXc6d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlOiksIG1fZnJhbWUtPndpbmRvd1NjcmlwdE9i
amVjdCgpKTsKLQotICAgIGlmIChbd2ViVmlldyBzY3JpcHREZWJ1Z0RlbGVnYXRlXSB8fCBbV2Vi
U2NyaXB0RGVidWdTZXJ2ZXIgbGlzdGVuZXJDb3VudF0pIHsKLSAgICAgICAgW19mcmFtZSBfZGV0
YWNoU2NyaXB0RGVidWdnZXJdOwotICAgICAgICBbX2ZyYW1lIF9hdHRhY2hTY3JpcHREZWJ1Z2dl
cl07Ci0gICAgfQotfQotCi0tIChCT09MKV9jb21wYXJlRGFzaGJvYXJkUmVnaW9uczooTlNEaWN0
aW9uYXJ5ICopcmVnaW9ucwotewotICAgIHJldHVybiBbbGFzdERhc2hib2FyZFJlZ2lvbnMgaXNF
cXVhbFRvRGljdGlvbmFyeTpyZWdpb25zXTsKLX0KLQotLSAodm9pZClkYXNoYm9hcmRSZWdpb25z
Q2hhbmdlZDooTlNNdXRhYmxlRGljdGlvbmFyeSAqKXJlZ2lvbnMKLXsKLSAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW3NlbGYgd2ViVmlld107Ci0gICAgW3dlYlZpZXcgX2FkZFNjcm9sbGVyRGFzaGJv
YXJkUmVnaW9uczpyZWdpb25zXTsKLQotICAgIGlmICghW3NlbGYgX2NvbXBhcmVEYXNoYm9hcmRS
ZWdpb25zOnJlZ2lvbnNdKSB7Ci0gICAgICAgIENhbGxVSURlbGVnYXRlKHdlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOiksIHJlZ2lvbnMpOwotCi0gICAg
ICAgIFtsYXN0RGFzaGJvYXJkUmVnaW9ucyByZWxlYXNlXTsKLSAgICAgICAgbGFzdERhc2hib2Fy
ZFJlZ2lvbnMgPSBbcmVnaW9ucyByZXRhaW5dOwotICAgIH0KLX0KLQotLSAodm9pZCl3aWxsUG9w
dXBNZW51OihOU01lbnUgKiltZW51Ci17Ci0gICAgQ2FsbFVJRGVsZWdhdGUoW3NlbGYgd2ViVmll
d10sIEBzZWxlY3Rvcih3ZWJWaWV3OndpbGxQb3B1cE1lbnU6KSwgbWVudSk7Ci19Ci0KLS0gKE5T
UmVjdCljdXN0b21IaWdobGlnaHRSZWN0OihOU1N0cmluZyopdHlwZSBmb3JMaW5lOihOU1JlY3Qp
bGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOihXZWJDb3JlOjpOb2RlICopbm9kZQotewotICAgIEFT
U0VSVChfZnJhbWUgIT0gbmlsKTsKLSAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbX2ZyYW1l
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7
Ci0KLSAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVu
dFZpZXc7Ci0gICAgaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiBoaWdobGlnaHRlciA9IFt3ZWJIVE1M
VmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5cGVdOwotICAgIGlmIChbKE5TT2JqZWN0ICopaGln
aGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihoaWdobGlnaHRSZWN0Rm9yTGlu
ZTpyZXByZXNlbnRlZE5vZGU6KV0pCi0gICAgICAgIHJldHVybiBbaGlnaGxpZ2h0ZXIgaGlnaGxp
Z2h0UmVjdEZvckxpbmU6bGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOmtpdChub2RlKV07Ci0gICAg
cmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTpsaW5lUmVjdF07Ci19Ci0K
LS0gKHZvaWQpcGFpbnRDdXN0b21IaWdobGlnaHQ6KE5TU3RyaW5nKil0eXBlIGZvckJveDooTlNS
ZWN0KWJveFJlY3Qgb25MaW5lOihOU1JlY3QpbGluZVJlY3QgYmVoaW5kVGV4dDooQk9PTCl0ZXh0
IGVudGlyZUxpbmU6KEJPT0wpbGluZSByZXByZXNlbnRlZE5vZGU6KFdlYkNvcmU6Ok5vZGUgKilu
b2RlCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIE5TVmlldyAqZG9jdW1lbnRW
aWV3ID0gW1tfZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIGlmICghW2RvY3Vt
ZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1
bWVudFZpZXc7Ci0gICAgaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiBoaWdobGlnaHRlciA9IFt3ZWJI
VE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5cGVdOwotICAgIGlmIChbKE5TT2JqZWN0ICop
aGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwYWludEhpZ2hsaWdodEZv
ckJveDpvbkxpbmU6YmVoaW5kVGV4dDplbnRpcmVMaW5lOnJlcHJlc2VudGVkTm9kZTopXSkKLSAg
ICAgICAgW2hpZ2hsaWdodGVyIHBhaW50SGlnaGxpZ2h0Rm9yQm94OmJveFJlY3Qgb25MaW5lOmxp
bmVSZWN0IGJlaGluZFRleHQ6dGV4dCBlbnRpcmVMaW5lOmxpbmUgcmVwcmVzZW50ZWROb2RlOmtp
dChub2RlKV07Ci0gICAgZWxzZQotICAgICAgICBbaGlnaGxpZ2h0ZXIgcGFpbnRIaWdobGlnaHRG
b3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVoaW5kVGV4dDp0ZXh0IGVudGlyZUxpbmU6
bGluZV07Ci19Ci0KIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw2IEBACiAjaW1wb3J0ICJXZWJDYWNoZWRQYWdlUGxhdGZvcm1EYXRhLmgiCiAj
aW1wb3J0ICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV2ViUG9saWN5RGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJE
b2N1bWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJEb2N1bWVudExvYWRlck1hYy5oIgogI2lt
cG9ydCAiV2ViRG93bmxvYWRJbnRlcm5hbC5oIgpAQCAtNDksOCArNDgsOCBAQAogI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVMb2FkRGVsZWdhdGUuaCIKICNp
bXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50
YXRpb24uaCIKLSNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCisjaW1wb3J0ICJXZWJIVE1MUmVwcmVz
ZW50YXRpb25Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCiAjaW1w
b3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbVBy
aXZhdGUuaCIKICNpbXBvcnQgIldlYkhpc3RvcnlQcml2YXRlLmgiCkBAIC01OSw4ICs1OCwxNSBA
QAogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRy
YXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBs
dWdpbkVtYmVkZGVkVmlldy5oIgorI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgi
CisjaW1wb3J0ICJXZWJOdWxsUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFuZWxBdXRoZW50
aWNhdGlvbkhhbmRsZXIuaCIKKyNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKKyNpbXBv
cnQgIldlYlBsdWdpblBhY2thZ2UuaCIKKyNpbXBvcnQgIldlYlBsdWdpblZpZXdGYWN0b3J5UHJp
dmF0ZS5oIgogI2ltcG9ydCAiV2ViUG9saWN5RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYlBvbGlj
eURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbXBvcnQg
IldlYlJlc291cmNlTG9hZERlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUu
aCIKQEAgLTY4LDYgKzc0LDcgQEAKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQg
IldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNp
bXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50
aWNhdGlvbk1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ2FjaGVkUGFnZS5oPgpAQCAtNzYsMTUgKzgzLDE2IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Gb3JtU3RhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXJUeXBlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZVRyZWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RS
ZXN1bHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ljb25EYXRhYmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJh
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL01vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVN0cmluZy5oPgpAQCAtOTIsOSArMTAwLDkgQEAKICNpbXBvcnQgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVCcmlkZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0
L0RPTUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYktpdC9ET01IVE1MRm9ybUVsZW1lbnQuaD4KQEAg
LTEwNCwxMyArMTEyLDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAvLyBTUEkgZm9y
IE5TVVJMRG93bmxvYWQKIC8vIE5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxMjE4NTA+IAot
QGludGVyZmFjZSBOU1VSTERvd25sb2FkIChOU1VSTERvd25sb2FkUHJpdmF0ZSkKK0BpbnRlcmZh
Y2UgTlNVUkxEb3dubG9hZCAoV2ViTlNVUkxEb3dubG9hZERldGFpbHMpCiAtICh2b2lkKV9zZXRP
cmlnaW5hdGluZ1VSTDooTlNVUkwgKilvcmlnaW5hdGluZ1VSTDsKIEBlbmQKIAotQGludGVyZmFj
ZSBXZWJIaXN0b3J5SXRlbSAoV2ViSGlzdG9yeUl0ZW1Qcml2YXRlKQotLSAoQk9PTClfd2FzVXNl
ckdlc3R1cmU7Ci1AZW5kCisvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRl
ciBXZWJLaXQgcGx1Zy1pbnMuCitOU1N0cmluZyAqV2ViUGx1Z2luQmFzZVVSTEtleSA9IEAiV2Vi
UGx1Z2luQmFzZVVSTCI7CitOU1N0cmluZyAqV2ViUGx1Z2luQXR0cmlidXRlc0tleSA9IEAiV2Vi
UGx1Z2luQXR0cmlidXRlcyI7CitOU1N0cmluZyAqV2ViUGx1Z2luQ29udGFpbmVyS2V5ID0gQCJX
ZWJQbHVnaW5Db250YWluZXIiOwogCiBAaW50ZXJmYWNlIFdlYkZyYW1lUG9saWN5TGlzdGVuZXIg
OiBOU09iamVjdCA8V2ViUG9saWN5RGVjaXNpb25MaXN0ZW5lciwgV2ViRm9ybVN1Ym1pc3Npb25M
aXN0ZW5lcj4KIHsKQEAgLTIzMiw5ICsyNDEsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpzZXRPcmlnaW5hbFVSCiAgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdCAqaGlzdG9yeSA9IFt3
ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdF07CiAgICAgICAgIGludCBiYWNrTGlzdENvdW50ID0gW2hp
c3RvcnkgYmFja0xpc3RDb3VudF07CiAgICAgICAgIGZvciAoaW50IGJhY2tJbmRleCA9IDA7IGJh
Y2tJbmRleCA8PSBiYWNrTGlzdENvdW50ICYmICFvcmlnaW5hbFVSTDsgYmFja0luZGV4KyspIHsK
LSAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtICpjdXJyZW50SXRlbSA9IFtoaXN0b3J5IGl0ZW1B
dEluZGV4Oi1iYWNrSW5kZXhdOwotICAgICAgICAgICAgaWYgKCFbY3VycmVudEl0ZW0gcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2FzVXNlckdlc3R1cmUpXSB8fCBbY3VycmVudEl0ZW0g
X3dhc1VzZXJHZXN0dXJlXSkKLSAgICAgICAgICAgICAgICBvcmlnaW5hbFVSTCA9IFtjdXJyZW50
SXRlbSBVUkxdOworICAgICAgICAgICAgLy8gRklYTUU6IEF0IG9uZSBwb2ludCB3ZSBoYWQgY29k
ZSBoZXJlIHRvIGNoZWNrIGEgIndhcyB1c2VyIGdlc3R1cmUiIGZsYWcuCisgICAgICAgICAgICAv
LyBEbyB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhhdCBsb2dpYz8KKyAgICAgICAgICAgIG9yaWdpbmFs
VVJMID0gW1toaXN0b3J5IGl0ZW1BdEluZGV4Oi1iYWNrSW5kZXhdIFVSTF07CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTExMDEsMzMgKzExMTAsMTAxIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmNhbkNhY2hlUGFnZSgKIH0KIAogUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NT
Y3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKKyAgICBjb25zdCBT
dHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBp
bnQgbWFyZ2luSGVpZ2h0KQogewotICAgIFdlYkZyYW1lQnJpZGdlKiBicmlkZ2UgPSBtX3dlYkZy
YW1lLT5fcHJpdmF0ZS0+YnJpZGdlOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
ICAgICAKLSAgICByZXR1cm4gW2JyaWRnZSBjcmVhdGVDaGlsZEZyYW1lTmFtZWQ6bmFtZQotICAg
ICAgICAgICAgICAgICAgIHdpdGhVUkw6dXJsCi0gICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6
cmVmZXJyZXIgCi0gICAgICAgICAgICAgICAgICAgb3duZXJFbGVtZW50Om93bmVyRWxlbWVudAot
ICAgICAgICAgICAgICAgICAgIGFsbG93c1Njcm9sbGluZzphbGxvd3NTY3JvbGxpbmcKLSAgICAg
ICAgICAgICAgICAgICBtYXJnaW5XaWR0aDptYXJnaW5XaWR0aAotICAgICAgICAgICAgICAgICAg
IG1hcmdpbkhlaWdodDptYXJnaW5IZWlnaHRdOworICAgIEFTU0VSVChtX3dlYkZyYW1lKTsKKyAg
ICAKKyAgICBXZWJGcmFtZVZpZXcgKmNoaWxkVmlldyA9IFtbV2ViRnJhbWVWaWV3IGFsbG9jXSBp
bml0XTsKKyAgICBbY2hpbGRWaWV3IHNldEFsbG93c1Njcm9sbGluZzphbGxvd3NTY3JvbGxpbmdd
OworICAgIFtjaGlsZFZpZXcgX3NldE1hcmdpbldpZHRoOm1hcmdpbldpZHRoXTsKKyAgICBbY2hp
bGRWaWV3IF9zZXRNYXJnaW5IZWlnaHQ6bWFyZ2luSGVpZ2h0XTsKKworICAgIFdlYkZyYW1lQnJp
ZGdlICpuZXdCcmlkZ2UgPSBbW1dlYkZyYW1lQnJpZGdlIGFsbG9jXSBpbml0U3ViZnJhbWVXaXRo
T3duZXJFbGVtZW50Om93bmVyRWxlbWVudCBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6Y2hpbGRW
aWV3XTsKKyAgICBbY2hpbGRWaWV3IHJlbGVhc2VdOworCisgICAgaWYgKCFuZXdCcmlkZ2UpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgW21fd2ViRnJhbWUuZ2V0KCkgX2FkZENoaWxkOltuZXdC
cmlkZ2Ugd2ViRnJhbWVdXTsKKyAgICBbbmV3QnJpZGdlIHJlbGVhc2VdOworCisgICAgUmVmUHRy
PEZyYW1lPiBuZXdGcmFtZSA9IFtuZXdCcmlkZ2UgX2ZyYW1lXTsKKyAgICAKKyAgICBbbV93ZWJG
cmFtZS5nZXQoKSBfbG9hZFVSTDp1cmwgcmVmZXJyZXI6cmVmZXJyZXIgaW50b0NoaWxkOmtpdChu
ZXdGcmFtZS5nZXQoKSldOworCisgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5
IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIW5ld0ZyYW1lLT50
cmVlKCktPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBuZXdGcmFt
ZS5nZXQoKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKICAgICByZXR1cm4g
MDsKIH0KIAogT2JqZWN0Q29udGVudFR5cGUgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENv
bnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAg
ICBXZWJGcmFtZUJyaWRnZSogYnJpZGdlID0gbV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZTsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFticmlkZ2UgZGV0
ZXJtaW5lT2JqZWN0RnJvbU1JTUVUeXBlOm1pbWVUeXBlIFVSTDp1cmxdOworCisgICAgLy8gVGhp
cyBpcyBhIHF1aXJrIHRoYXQgZW5zdXJlcyBUaWdlciBNYWlsJ3MgV2ViS2l0IHBsdWctaW4gd2ls
bCBsb2FkIGR1cmluZyBsYXlvdXQKKyAgICAvLyBhbmQgbm90IGF0dGFjaCB0aW1lLiAoNTUyMDU0
MSkKKyAgICBzdGF0aWMgQk9PTCBpc1RpZ2VyTWFpbCA9IFdLQXBwVmVyc2lvbkNoZWNrTGVzc1Ro
YW4oQCJjb20uYXBwbGUubWFpbCIsIC0xLCAzLjApOworICAgIGlmIChpc1RpZ2VyTWFpbCAmJiBt
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1hcHBsZS1tc2ctYXR0YWNobWVudCIpCisgICAgICAg
IHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisKKyAgICBTdHJpbmcgdHlwZSA9
IG1pbWVUeXBlOworCisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRyeSB0
byBndWVzcyB0aGUgTUlNRSB0eXBlIGJhc2VkIG9mZiB0aGUgZXh0ZW5zaW9uLgorICAgICAgICBO
U1VSTCAqVVJMID0gdXJsOworICAgICAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gW1tVUkwgcGF0
aF0gcGF0aEV4dGVuc2lvbl07CisgICAgICAgIGlmIChbZXh0ZW5zaW9uIGxlbmd0aF0gPiAwKSB7
CisgICAgICAgICAgICB0eXBlID0gV0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24p
OworICAgICAgICAgICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgbm8gTUlNRSB0eXBlIGlzIHNwZWNpZmllZCwgdXNlIGEgcGx1Zy1pbiBpZiB3ZSBoYXZlIG9u
ZSB0aGF0IGNhbiBoYW5kbGUgdGhlIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBpZiAoV2Vi
QmFzZVBsdWdpblBhY2thZ2UgKnBhY2thZ2UgPSBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgp
KSBfcGx1Z2luRm9yRXh0ZW5zaW9uOmV4dGVuc2lvbl0pIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKFtwYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwor
I2lmbmRlZiBfX0xQNjRfXworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChbcGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2UgY2xhc3NdXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7
IC8vIEdvIGFoZWFkIGFuZCBob3BlIHRoYXQgd2UgY2FuIGRpc3BsYXkgdGhlIGNvbnRlbnQuCisK
KyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUp
KQorICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEltYWdlOworCisgICAgaWYgKFdlYkJhc2VQ
bHVnaW5QYWNrYWdlICpwYWNrYWdlID0gW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX3Bs
dWdpbkZvck1JTUVUeXBlOnR5cGVdKSB7CisjaWZuZGVmIF9fTFA2NF9fCisgICAgICAgIGlmIChb
cGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisjZW5kaWYK
KyAgICAgICAgQVNTRVJUKFtwYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2Ug
Y2xhc3NdXSk7CisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47CisgICAg
fQorCisgICAgaWYgKFtXZWJGcmFtZVZpZXcgX3ZpZXdDbGFzc0Zvck1JTUVUeXBlOnR5cGVdKQor
ICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOworICAgIAorICAgIHJldHVybiBPYmpl
Y3RDb250ZW50Tm9uZTsKKwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKICAgICBy
ZXR1cm4gT2JqZWN0Q29udGVudE5vbmU7CiB9CiAKLXN0YXRpYyBOU0FycmF5KiBuc0FycmF5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCitzdGF0aWMgTlNNdXRhYmxlQXJyYXkqIGtpdChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQogewogICAgIHVuc2lnbmVkIGxlbiA9IHZlY3Rv
ci5zaXplKCk7CiAgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5Omxlbl07CkBAIC0xMTM2LDE5ICsxMjEzLDE1NiBAQCBzdGF0aWMgTlNB
cnJheSogbnNBcnJheShjb25zdCBWZWN0b3I8U3RyCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1X
aWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYg
c2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorc3RhdGljIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZShj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgV2ViRnJhbWVCcmlkZ2UqIGJy
aWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7CisgICAgc2l6ZV90IHNpemUgPSBw
YXJhbU5hbWVzLnNpemUoKTsKKyAgICBBU1NFUlQoc2l6ZSA9PSBwYXJhbVZhbHVlcy5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVy
biBwYXJhbVZhbHVlc1tpXTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitzdGF0
aWMgTlNWaWV3ICpwbHVnaW5WaWV3KFdlYkZyYW1lICpmcmFtZSwgV2ViUGx1Z2luUGFja2FnZSAq
cGx1Z2luUGFja2FnZSwKKyAgICBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcywgTlNBcnJheSAqYXR0
cmlidXRlVmFsdWVzLCBOU1VSTCAqYmFzZVVSTCwKKyAgICBET01FbGVtZW50ICplbGVtZW50LCBC
T09MIGxvYWRNYW51YWxseSkKK3sKKyAgICBXZWJIVE1MVmlldyAqZG9jVmlldyA9IChXZWJIVE1M
VmlldyAqKVtbZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIEFTU0VSVChbZG9j
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKKyAgICAgICAgCisgICAg
V2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlciA9IFtkb2NWaWV3IF9wbHVnaW5D
b250cm9sbGVyXTsKKyAgICAKKyAgICAvLyBTdG9yZSBhdHRyaWJ1dGVzIGluIGEgZGljdGlvbmFy
eSBzbyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gV2ViUGx1Z2lucy4KKyAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6YXR0cmlidXRlVmFsdWVzIGZvcktleXM6YXR0cmlidXRlTmFtZXNdOworICAgIAor
ICAgIFtwbHVnaW5QYWNrYWdlIGxvYWRdOworICAgIENsYXNzIHZpZXdGYWN0b3J5ID0gW3BsdWdp
blBhY2thZ2Ugdmlld0ZhY3RvcnldOworICAgIAorICAgIE5TVmlldyAqdmlldyA9IG5pbDsKKyAg
ICBOU0RpY3Rpb25hcnkgKmFyZ3VtZW50cyA9IG5pbDsKKyAgICAKKyAgICBpZiAoW3ZpZXdGYWN0
b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6
KV0pIHsKKyAgICAgICAgYXJndW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgorICAgICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z0luQmFzZVVSTEtleSwK
KyAgICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdJbkF0dHJpYnV0ZXNLZXksCisgICAgICAg
ICAgICBwbHVnaW5Db250cm9sbGVyLCBXZWJQbHVnSW5Db250YWluZXJLZXksCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsb2FkTWFudWFsbHkgPyBXZWJQbHVnSW5Nb2RlRnVs
bCA6IFdlYlBsdWdJbk1vZGVFbWJlZF0sIFdlYlBsdWdJbk1vZGVLZXksCisgICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IWxvYWRNYW51YWxseV0sIFdlYlBsdWdJblNob3VsZExv
YWRNYWluUmVzb3VyY2VLZXksCisgICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVnSW5Db250YWlu
aW5nRWxlbWVudEtleSwKKyAgICAgICAgICAgIG5pbF07CisgICAgICAgIExPRyhQbHVnaW5zLCAi
YXJndW1lbnRzOlxuJUAiLCBhcmd1bWVudHMpOworICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0p
IHsKKyAgICAgICAgYXJndW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgorICAgICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z2luQmFzZVVSTEtleSwKKyAg
ICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdpbkF0dHJpYnV0ZXNLZXksCisgICAgICAgICAg
ICBwbHVnaW5Db250cm9sbGVyLCBXZWJQbHVnaW5Db250YWluZXJLZXksCisgICAgICAgICAgICBl
bGVtZW50LCBXZWJQbHVnSW5Db250YWluaW5nRWxlbWVudEtleSwKKyAgICAgICAgICAgIG5pbF07
CisgICAgICAgIExPRyhQbHVnaW5zLCAiYXJndW1lbnRzOlxuJUAiLCBhcmd1bWVudHMpOworICAg
IH0KKworICAgIHZpZXcgPSBbV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5WaWV3V2l0aEFyZ3Vt
ZW50czphcmd1bWVudHMgZnJvbVBsdWdpblBhY2thZ2U6cGx1Z2luUGFja2FnZV07CisgICAgW2F0
dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgcmV0dXJuIHZpZXc7Cit9CiAKK1dpZGdldCogV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIHJldHVybiBuZXcgV2lkZ2V0KFticmlkZ2Ugdmlld0ZvclBsdWdpbldp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dXJsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOm5zQXJy
YXkocGFyYW1OYW1lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVWYWx1ZXM6bnNBcnJheShwYXJhbVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6bWltZVR5cGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6W0RPTUVsZW1lbnQgX3dyYXBFbGVt
ZW50OmVsZW1lbnRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9h
ZE1hbnVhbGx5OmxvYWRNYW51YWxseV0pOworCisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgp
ID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICBpbnQgZXJyb3JDb2RlID0gMDsKKworICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIFNF
TCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJWaWV3OnBsdWdJblZpZXdXaXRoQXJndW1lbnRzOik7
CisgICAgTlNVUkwgKlVSTCA9IHVybDsKKworICAgIGlmIChbW3dlYlZpZXcgVUlEZWxlZ2F0ZV0g
cmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgeworICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICphdHRyaWJ1dGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9i
amVjdHM6a2l0KHBhcmFtTmFtZXMpIGZvcktleXM6a2l0KHBhcmFtVmFsdWVzKV07CisgICAgICAg
IE5TRGljdGlvbmFyeSAqYXJndW1lbnRzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgICAgICBhdHRyaWJ1dGVzLCBXZWJQbHVnSW5BdHRyaWJ1
dGVzS2V5LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bG9hZE1hbnVhbGx5
ID8gV2ViUGx1Z0luTW9kZUZ1bGwgOiBXZWJQbHVnSW5Nb2RlRW1iZWRdLCBXZWJQbHVnSW5Nb2Rl
S2V5LAorICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiFsb2FkTWFudWFsbHld
LCBXZWJQbHVnSW5TaG91bGRMb2FkTWFpblJlc291cmNlS2V5LAorICAgICAgICAgICAgZWxlbWVu
dCwgV2ViUGx1Z0luQ29udGFpbmluZ0VsZW1lbnRLZXksCisgICAgICAgICAgICBVUkwsIFdlYlBs
dWdJbkJhc2VVUkxLZXksIC8vIFVSTCBtaWdodCBiZSBuaWwsIHNvIGFkZCBpdCBsYXN0CisgICAg
ICAgICAgICBuaWxdOworCisgICAgICAgIE5TVmlldyAqdmlldyA9IENhbGxVSURlbGVnYXRlKHdl
YlZpZXcsIHNlbGVjdG9yLCBhcmd1bWVudHMpOworCisgICAgICAgIFthdHRyaWJ1dGVzIHJlbGVh
c2VdOworICAgICAgICBbYXJndW1lbnRzIHJlbGVhc2VdOworCisgICAgICAgIGlmICh2aWV3KQor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXQodmlldyk7CisgICAgfQorCisgICAgTlNTdHJp
bmcgKk1JTUVUeXBlOworICAgIFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlOwor
ICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTUlNRVR5cGUgPSBuaWw7Cisg
ICAgICAgIHBsdWdpblBhY2thZ2UgPSBuaWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTUlNRVR5
cGUgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luUGFja2FnZSA9IFt3ZWJWaWV3IF9wbHVnaW5G
b3JNSU1FVHlwZTptaW1lVHlwZV07CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nICpleHRlbnNp
b24gPSBbW1VSTCBwYXRoXSBwYXRoRXh0ZW5zaW9uXTsKKyAgICBpZiAoIXBsdWdpblBhY2thZ2Ug
JiYgW2V4dGVuc2lvbiBsZW5ndGhdICE9IDApIHsKKyAgICAgICAgcGx1Z2luUGFja2FnZSA9IFt3
ZWJWaWV3IF9wbHVnaW5Gb3JFeHRlbnNpb246ZXh0ZW5zaW9uXTsKKyAgICAgICAgaWYgKHBsdWdp
blBhY2thZ2UpIHsKKyAgICAgICAgICAgIE5TU3RyaW5nICpuZXdNSU1FVHlwZSA9IFtwbHVnaW5Q
YWNrYWdlIE1JTUVUeXBlRm9yRXh0ZW5zaW9uOmV4dGVuc2lvbl07CisgICAgICAgICAgICBpZiAo
W25ld01JTUVUeXBlIGxlbmd0aF0gIT0gMCkKKyAgICAgICAgICAgICAgICBNSU1FVHlwZSA9IG5l
d01JTUVUeXBlOworICAgICAgICB9CisgICAgfQorCisgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwor
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZShtX3dlYkZyYW1lLmdldCgpKS0+ZG9jdW1l
bnQoKTsKKyAgICBOU1VSTCAqYmFzZVVSTCA9IGRvY3VtZW50LT5iYXNlVVJMKCk7CisgICAgaWYg
KHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xh
c3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkKKyAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5W
aWV3KG1fd2ViRnJhbWUuZ2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwg
a2l0KHBhcmFtTmFtZXMpLCBraXQocGFyYW1WYWx1ZXMpLCBiYXNlVVJMLCBraXQoZWxlbWVudCks
IGxvYWRNYW51YWxseSk7CisgICAgICAgICAgICAKKyNpZm5kZWYgX19MUDY0X18KKyAgICAgICAg
ZWxzZSBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRW
aWV3ICplbWJlZGRlZFZpZXcgPSBbW1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyBhbGxv
Y10KKyAgICAgICAgICAgICAgICBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKQorICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2U6KFdl
Yk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKKyAgICAgICAgICAgICAgICBV
Ukw6VVJMCisgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCisgICAgICAgICAgICAgICAg
TUlNRVR5cGU6TUlNRVR5cGUKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVLZXlzOmtpdChwYXJh
bU5hbWVzKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpraXQocGFyYW1WYWx1ZXMp
CisgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseQorICAgICAgICAgICAg
ICAgIERPTUVsZW1lbnQ6a2l0KGVsZW1lbnQpXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICB2
aWV3ID0gZW1iZWRkZWRWaWV3OworICAgICAgICB9IAorI2VuZGlmCisgICAgfSBlbHNlCisgICAg
ICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbjsKKworICAgIGlmICgh
ZXJyb3JDb2RlICYmICF2aWV3KQorICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckNhbm5v
dExvYWRQbHVnSW47CisKKyAgICBpZiAoZXJyb3JDb2RlKSB7CisgICAgICAgIE5TRXJyb3IgKmVy
cm9yID0gW1tOU0Vycm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6ZXJyb3JDb2Rl
CisgICAgICAgICAgICBjb250ZW50VVJMOlVSTAorICAgICAgICAgICAgcGx1Z2luUGFnZVVSTDpk
b2N1bWVudC0+Y29tcGxldGVVUkwocGFyc2VVUkwocGFyYW1ldGVyVmFsdWUocGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsICJwbHVnaW5zcGFnZSIpKSkKKyAgICAgICAgICAgIHBsdWdpbk5hbWU6W3Bs
dWdpblBhY2thZ2UgbmFtZV0KKyAgICAgICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlXTsKKyAgICAg
ICAgV2ViTnVsbFBsdWdpblZpZXcgKm51bGxWaWV3ID0gW1tbV2ViTnVsbFBsdWdpblZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpCisgICAgICAgICAgICBlcnJvcjplcnJvciBET01FbGVtZW50OmtpdChlbGVtZW50KV0g
YXV0b3JlbGVhc2VdOworICAgICAgICB2aWV3ID0gbnVsbFZpZXc7CisgICAgICAgIFtlcnJvciBy
ZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHZpZXcpOworICAgIHJldHVybiBuZXcg
V2lkZ2V0KHZpZXcpOworCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIHJl
dHVybiAwOwpAQCAtMTE1NywyNSArMTM3MSw5MSBAQCBXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
b1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0gICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2UgcmVkaXJlY3REYXRh
VG9QbHVnaW46cGx1Z2luV2lkZ2V0LT5nZXRWaWV3KCldOworCisgICAgV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uICpyZXByZXNlbnRhdGlvbiA9IChXZWJIVE1MUmVwcmVzZW50YXRpb24gKilbW21fd2Vi
RnJhbWUuZ2V0KCkgX2RhdGFTb3VyY2VdIHJlcHJlc2VudGF0aW9uXTsKKworICAgIE5TVmlldyAq
cGx1Z2luVmlldyA9IHBsdWdpbldpZGdldC0+Z2V0VmlldygpOworCisjaWZuZGVmIF9fTFA2NF9f
CisgICAgaWYgKFtwbHVnaW5WaWV3IGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luRW1i
ZWRkZWRWaWV3IGNsYXNzXV0pCisgICAgICAgIFtyZXByZXNlbnRhdGlvbiBfcmVkaXJlY3REYXRh
VG9NYW51YWxMb2FkZXI6KFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3ICopcGx1Z2luVmll
dyBmb3JQbHVnaW5WaWV3OnBsdWdpblZpZXddOworICAgIGVsc2UgeworI2Vsc2UKKyAgICB7Cisj
ZW5kaWYKKyAgICAgICAgV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IChXZWJIVE1MVmlldyAq
KVtbbV93ZWJGcmFtZS5nZXQoKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgIEFT
U0VSVChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwor
ICAgICAgICBbcmVwcmVzZW50YXRpb24gX3JlZGlyZWN0RGF0YVRvTWFudWFsTG9hZGVyOltkb2N1
bWVudFZpZXcgX3BsdWdpbkNvbnRyb2xsZXJdIGZvclBsdWdpblZpZXc6cGx1Z2luVmlld107Cisg
ICAgfQorCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogV2lkZ2V0KiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBz
aXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcykKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewotICAgIFdpZGdldCogcmVzdWx0ID0gbmV3IFdpZGdl
dDsKLSAgICAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgV2ViRnJhbWVC
cmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7Ci0gICAgcmVzdWx0
LT5zZXRWaWV3KFticmlkZ2Ugdmlld0ZvckphdmFBcHBsZXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlTmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpuc0FycmF5KHBhcmFtVmFsdWVzKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVSTAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERPTUVsZW1lbnQ6W0RPTUVsZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRdXSk7
ICAgIAorCisgICAgTlNWaWV3ICp2aWV3ID0gbmlsOworCisgICAgTlNTdHJpbmcgKk1JTUVUeXBl
ID0gQCJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IjsKKyAgICAKKyAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKKworICAgIFdlYkJhc2VQbHVnaW5Q
YWNrYWdlICpwbHVnaW5QYWNrYWdlID0gW3dlYlZpZXcgX3BsdWdpbkZvck1JTUVUeXBlOk1JTUVU
eXBlXTsKKworICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CisgICAgICAgIGlmIChbcGx1Z2luUGFj
a2FnZSBpc0tpbmRPZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKKyAgICAgICAg
ICAgIC8vIEZvciBzb21lIHJlYXNvbiwgdGhlIEphdmEgcGx1Zy1pbiByZXF1aXJlcyB0aGF0IHdl
IHBhc3MgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcGx1Zy1pbiBhcyBhdHRyaWJ1dGVzLgorICAgICAg
ICAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0ga2l0KHBhcmFtTmFtZXMpOworICAgICAgICAg
ICAgTlNNdXRhYmxlQXJyYXkgKnZhbHVlcyA9IGtpdChwYXJhbVZhbHVlcyk7CisgICAgICAgICAg
ICBpZiAocGFyYW1ldGVyVmFsdWUocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJ3aWR0aCIpLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDpAIndpZHRoIl07Cisg
ICAgICAgICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlZCIsIHNpemUud2lkdGgoKV1dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHBhcmFtZXRlclZhbHVlKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCAiaGVpZ2h0IikuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OkAiaGVpZ2h0Il07CisgICAg
ICAgICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlZCIsIHNpemUud2lkdGgoKV1dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlldyA9
IHBsdWdpblZpZXcobV93ZWJGcmFtZS5nZXQoKSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5Q
YWNrYWdlLCBuYW1lcywgdmFsdWVzLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIE5PKTsKKyAgICAg
ICAgICAgIFtuYW1lcyByZWxlYXNlXTsKKyAgICAgICAgICAgIFt2YWx1ZXMgcmVsZWFzZV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgfSAKKyNpZm5kZWYgX19MUDY0X18KKyAgICAgICAgZWxzZSBp
ZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdl
IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIHZpZXcgPSBbW1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVk
ZGVkVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRz
Y2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCisgICAgICAgICAgICAgICAgVVJMOm5p
bAorICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVSTAorICAgICAgICAgICAgICAgIE1JTUVU
eXBlOk1JTUVUeXBlCisgICAgICAgICAgICAgICAgYXR0cmlidXRlS2V5czpraXQocGFyYW1OYW1l
cykKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6a2l0KHBhcmFtVmFsdWVzKQorICAg
ICAgICAgICAgICAgIGxvYWRNYW51YWxseTpOTworICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6
a2l0KGVsZW1lbnQpXSBhdXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAg
aWYgKCF2aWV3KSB7CisgICAgICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBf
aW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6V2ViS2l0RXJyb3JKYXZhVW5hdmFpbGFibGUKKyAgICAg
ICAgICAgIGNvbnRlbnRVUkw6bmlsCisgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAorICAg
ICAgICAgICAgcGx1Z2luTmFtZTpbcGx1Z2luUGFja2FnZSBuYW1lXQorICAgICAgICAgICAgTUlN
RVR5cGU6TUlNRVR5cGVdOworICAgICAgICB2aWV3ID0gW1tbV2ViTnVsbFBsdWdpblZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpCisgICAgICAgICAgICBlcnJvcjplcnJvciBET01FbGVtZW50OmtpdChlbGVtZW50KV0g
YXV0b3JlbGVhc2VdOworICAgICAgICBbZXJyb3IgcmVsZWFzZV07CisgICAgfQorCisgICAgQVNT
RVJUKHZpZXcpOworICAgIHJldHVybiBuZXcgV2lkZ2V0KHZpZXcpOworCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBu
ZXcgV2lkZ2V0OwogfQogCiBTdHJpbmcgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVk
aWFUeXBlKCkgY29uc3QKQEAgLTExODgsNyArMTQ2OCwyMSBAQCBTdHJpbmcgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6Om92ZXJyaWRlTWVkCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndpbmRv
d09iamVjdENsZWFyZWQoKQogewotICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+YnJpZGdlIHdp
bmRvd09iamVjdENsZWFyZWRdOworICAgIEZyYW1lICpmcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5n
ZXQoKSk7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQo
KSk7CisgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1l
bnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2Vi
Vmlldyk7CisgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JG
cmFtZUZ1bmMpIHsKKyAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9u
cy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3
ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0OmZvckZyYW1lOiksCisgICAgICAgICAgICBmcmFt
ZS0+d2luZG93U2NyaXB0T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIH0gZWxzZSBp
ZiAoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jKSB7Cisg
ICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OndpbmRvd1Nj
cmlwdE9iamVjdEF2YWlsYWJsZTopLAorICAgICAgICAgICAgZnJhbWUtPndpbmRvd1NjcmlwdE9i
amVjdCgpKTsKKyAgICB9CisKKyAgICBpZiAoW3dlYlZpZXcgc2NyaXB0RGVidWdEZWxlZ2F0ZV0g
fHwgW1dlYlNjcmlwdERlYnVnU2VydmVyIGxpc3RlbmVyQ291bnRdKSB7CisgICAgICAgIFttX3dl
YkZyYW1lLmdldCgpIF9kZXRhY2hTY3JpcHREZWJ1Z2dlcl07CisgICAgICAgIFttX3dlYkZyYW1l
LmdldCgpIF9hdHRhY2hTY3JpcHREZWJ1Z2dlcl07CisgICAgfQogfQogCiB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMTcsMTkgKzIxNywyNiBAQCBET01SYW5nZSAqa2l0KFJhbmdlKiByYW5nZSkKICAg
ICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6cmFuZ2VdOwogfQogCi1XZWJDb3JlOjpFZGl0
YWJsZUxpbmtCZWhhdmlvciBjb3JlKFdlYktpdEVkaXRhYmxlTGlua0JlaGF2aW9yIGVkaXRhYmxl
TGlua0JlaGF2aW9yKQorRWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0YWJsZUxp
bmtCZWhhdmlvciBlZGl0YWJsZUxpbmtCZWhhdmlvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RWRpdGFibGVMaW5rQmVoYXZpb3I+KGVkaXRhYmxlTGlua0JlaGF2aW9yKTsK
LX0KLQotV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3Iga2l0KFdlYkNvcmU6OkVkaXRhYmxlTGlu
a0JlaGF2aW9yIGVkaXRhYmxlTGlua0JlaGF2aW9yKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlvcj4oZWRpdGFibGVMaW5rQmVoYXZpb3IpOworICAg
IHN3aXRjaCAoZWRpdGFibGVMaW5rQmVoYXZpb3IpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRFZGl0
YWJsZUxpbmtEZWZhdWx0QmVoYXZpb3I6CisgICAgICAgICAgICByZXR1cm4gRWRpdGFibGVMaW5r
RGVmYXVsdEJlaGF2aW9yOworICAgICAgICBjYXNlIFdlYktpdEVkaXRhYmxlTGlua0Fsd2F5c0xp
dmU6CisgICAgICAgICAgICByZXR1cm4gRWRpdGFibGVMaW5rQWx3YXlzTGl2ZTsKKyAgICAgICAg
Y2FzZSBXZWJLaXRFZGl0YWJsZUxpbmtPbmx5TGl2ZVdpdGhTaGlmdEtleToKKyAgICAgICAgICAg
IHJldHVybiBFZGl0YWJsZUxpbmtPbmx5TGl2ZVdpdGhTaGlmdEtleTsKKyAgICAgICAgY2FzZSBX
ZWJLaXRFZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQ6CisgICAgICAgICAgICByZXR1cm4g
RWRpdGFibGVMaW5rTGl2ZVdoZW5Ob3RGb2N1c2VkOworICAgICAgICBjYXNlIFdlYktpdEVkaXRh
YmxlTGlua05ldmVyTGl2ZToKKyAgICAgICAgICAgIHJldHVybiBFZGl0YWJsZUxpbmtOZXZlckxp
dmU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFZGl0YWJs
ZUxpbmtEZWZhdWx0QmVoYXZpb3I7CiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZSAoV2Vi
SW50ZXJuYWwpCiAKLQogc3RhdGljIGlubGluZSBXZWJGcmFtZSAqZnJhbWUoV2ViQ29yZUZyYW1l
QnJpZGdlICpicmlkZ2UpCiB7CiAgICAgcmV0dXJuICgoV2ViRnJhbWVCcmlkZ2UgKilicmlkZ2Up
LT5fZnJhbWU7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHJldmlz
aW9uIDMwNzAyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxNyArODksMTMgQEAg
V2ViQ29yZTo6UGFnZSogY29yZShXZWJWaWV3ICopOwogV2ViVmlldyAqa2l0KFdlYkNvcmU6OlBh
Z2UqKTsKIAogV2ViQ29yZTo6RWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0YWJs
ZUxpbmtCZWhhdmlvcik7Ci1XZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlvciBraXQoV2ViQ29yZTo6
RWRpdGFibGVMaW5rQmVoYXZpb3IpOwogCiBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3
ZWJGcmFtZSk7CiAKLUBpbnRlcmZhY2UgV2ViRnJhbWVQcml2YXRlIDogTlNPYmplY3QKLXsKK0Bp
bnRlcmZhY2UgV2ViRnJhbWVQcml2YXRlIDogTlNPYmplY3QgewogQHB1YmxpYwogICAgIFdlYkZy
YW1lVmlldyAqd2ViRnJhbWVWaWV3OwotCiAgICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZTsKLQog
ICAgIFdlYlNjcmlwdERlYnVnZ2VyICpzY3JpcHREZWJ1Z2dlcjsKICAgICBpZCBpbnRlcm5hbExv
YWREZWxlZ2F0ZTsKIH0KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9u
IDMwNzAyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzksNyArMTc5LDcgQEAgZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxh
Y2VtZW50UgogCiB9CiAKLUBpbnRlcmZhY2UgTlNWaWV3IChBcHBLaXRTZWNyZXRzSUtub3dBYm91
dCkKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdEZXRhaWxzKQogLSAodm9pZClfcmVjdXJz
aXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNp
YmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNW
aWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3OwogLSAodm9pZClfcmVjdXJz
aXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1cyB2aXNS
ZWN0OihOU1JlY3QpdmlzUmVjdDsKIC0gKE5TUmVjdClfZGlydHlSZWN0OwpAQCAtMTg4LDIxICsx
ODgsMjEgQEAgZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxhY2VtZW50UgogLSAodm9p
ZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOwogQGVuZAogCi1AaW50ZXJmYWNlIE5TQXBwbGljYXRp
b24gKEFwcEtpdFNlY3JldHNJS25vd0Fib3V0KQorQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChX
ZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKIC0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nOwogQGVuZAogCi1AaW50ZXJmYWNlIE5TV2luZG93IChBcHBLaXRTZWNyZXRzSUtub3dB
Ym91dCkKK0BpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKIC0gKGlkKV9u
ZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nOwogLSAodm9pZClfc2V0Rm9yY2VBY3RpdmVD
b250cm9sczooQk9PTClmbGFnOwogQGVuZAogCi1AaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmlu
ZyAoQXBwS2l0U2VjcmV0c0lLbm93QWJvdXQpCi0tIChpZClfaW5pdFdpdGhET01SYW5nZTooRE9N
UmFuZ2UgKilkb21SYW5nZTsKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0
dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQorLSAoaWQpX2luaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2U7CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihO
U1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0
cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3Vi
cmVzb3VyY2VzOwogQGVuZAogCi1AaW50ZXJmYWNlIE5TU3BlbGxDaGVja2VyIChDdXJyZW50bHlQ
cml2YXRlRm9yVGV4dFZpZXcpCitAaW50ZXJmYWNlIE5TU3BlbGxDaGVja2VyIChXZWJOU1NwZWxs
Q2hlY2tlckRldGFpbHMpCiAtICh2b2lkKWxlYXJuV29yZDooTlNTdHJpbmcgKil3b3JkOwogQGVu
ZAogCkBAIC0zNjAsNiArMzYwLDY1IEBAIHN0cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2
ZW50c1BhcmEKICAgICBCT09MIGNvbnN1bWVkQnlJTTsKIH07CiAKK0BpbnRlcmZhY2UgV2ViSFRN
TFZpZXdQcml2YXRlIDogTlNPYmplY3QgeworQHB1YmxpYworICAgIEJPT0wgY2xvc2VkOworICAg
IEJPT0wgbmVlZHNMYXlvdXQ7CisgICAgQk9PTCBuZWVkc1RvQXBwbHlTdHlsZXM7CisgICAgQk9P
TCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKKyAgICBCT09MIHByaW50aW5nOworICAgIEJP
T0wgYXZvaWRpbmdQcmludE9ycGhhbjsKKyAgICAKKyAgICBpZCBzYXZlZFN1YnZpZXdzOworICAg
IEJPT0wgc3Vidmlld3NTZXRBc2lkZTsKKworICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAv
LyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyAgICBCT09MIGhhbmRsaW5nTW91c2VE
b3duRXZlbnQ7CisgICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRs
aW5nIHRoZSBldmVudC4KKyAgICAKKyAgICBOU1NpemUgbGFzdExheW91dFNpemU7CisgICAgCisg
ICAgTlNQb2ludCBsYXN0U2Nyb2xsUG9zaXRpb247CisKKyAgICBXZWJQbHVnaW5Db250cm9sbGVy
ICpwbHVnaW5Db250cm9sbGVyOworICAgIAorICAgIE5TU3RyaW5nICp0b29sVGlwOworICAgIE5T
VG9vbFRpcFRhZyBsYXN0VG9vbFRpcFRhZzsKKyAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKKyAg
ICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0YTsKKyAgICAKKyAgICBOU1RpbWVyICphdXRvc2Ny
b2xsVGltZXI7CisgICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKKyAgICAKKyAg
ICBOU0FycmF5KiBwYWdlUmVjdHM7CisKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBoaWdobGln
aHRlcnM7CisKKyAgICBCT09MIHJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOworICAgIEJPT0wgbmV4
dFJlc3BvbmRlckRpc2FibGVkT25jZTsKKyAgICAKKyAgICBXZWJUZXh0Q29tcGxldGVDb250cm9s
bGVyICpjb21wQ29udHJvbGxlcjsKKyAgICAKKyAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3Vu
ZDsKKworICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyAqaW50ZXJw
cmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBCT09MIHJlY2VpdmVkTk9PUDsKKyAgICAKKyAg
ICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlOworICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlICpw
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKKyAgICAKKyAgICBDRlJ1bkxvb3BUaW1lclJlZiB1
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcjsKKyAgICBDRlJ1bkxvb3BUaW1lclJlZiB1
cGRhdGVNb3VzZW92ZXJUaW1lcjsKKworICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5U2Vs
ZWN0b3I7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQk9PTCBlbnVtZXJhdGluZ1N1YnZpZXdzOwor
I2VuZGlmCit9CistICh2b2lkKWNsZWFyOworQGVuZAorCiBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1
ZSBraXQoVHJpU3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewpJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAzMDcwMikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNzkgKzI4LDE1IEBACiAKIC8vIFRoaW5ncyBpbnRl
cm5hbCB0byB0aGUgV2ViS2l0IGZyYW1ld29yazsgbm90IFNQSS4KIAotI2ltcG9ydCA8V2ViS2l0
L1dlYkhUTUxWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCAiV2ViSFRNTFZpZXdQcml2YXRlLmgiCiAK
LUBjbGFzcyBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyOwotQGNsYXNzIERPTURvY3VtZW50RnJh
Z21lbnQ7Ci1AY2xhc3MgRE9NRWxlbWVudDsKK0BjbGFzcyBXZWJGcmFtZTsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAgICAgY2xhc3MgQ2FjaGVkSW1h
Z2U7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIH0KIAotc3RydWN0IFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLQotQGludGVyZmFjZSBXZWJIVE1MVmlld1ByaXZh
dGUgOiBOU09iamVjdAotewotQHB1YmxpYwotICAgIEJPT0wgY2xvc2VkOwotICAgIEJPT0wgbmVl
ZHNMYXlvdXQ7Ci0gICAgQk9PTCBuZWVkc1RvQXBwbHlTdHlsZXM7Ci0gICAgQk9PTCBpZ25vcmlu
Z01vdXNlRHJhZ2dlZEV2ZW50czsKLSAgICBCT09MIHByaW50aW5nOwotICAgIEJPT0wgYXZvaWRp
bmdQcmludE9ycGhhbjsKLSAgICAKLSAgICBpZCBzYXZlZFN1YnZpZXdzOwotICAgIEJPT0wgc3Vi
dmlld3NTZXRBc2lkZTsKLQotICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0IGFm
dGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLSAgICBCT09MIGhhbmRsaW5nTW91c2VEb3duRXZlbnQ7
Ci0gICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBl
dmVudC4KLSAgICAKLSAgICBOU1NpemUgbGFzdExheW91dFNpemU7Ci0gICAgCi0gICAgTlNQb2lu
dCBsYXN0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICBXZWJQbHVnaW5Db250cm9sbGVyICpwbHVnaW5D
b250cm9sbGVyOwotICAgIAotICAgIE5TU3RyaW5nICp0b29sVGlwOwotICAgIE5TVG9vbFRpcFRh
ZyBsYXN0VG9vbFRpcFRhZzsKLSAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKLSAgICB2b2lkICp0
cmFja2luZ1JlY3RVc2VyRGF0YTsKLSAgICAKLSAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7
Ci0gICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKLSAgICAKLSAgICBOU0FycmF5
KiBwYWdlUmVjdHM7Ci0KLSAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBoaWdobGlnaHRlcnM7Ci0K
LSAgICBCT09MIHJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOwotICAgIEJPT0wgbmV4dFJlc3BvbmRl
ckRpc2FibGVkT25jZTsKLSAgICAKLSAgICBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyICpjb21w
Q29udHJvbGxlcjsKLSAgICAKLSAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKLQotICAg
IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyAqaW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVyczsKLSAgICBCT09MIHJlY2VpdmVkTk9PUDsKLSAgICAKLSAgICBXZWJEYXRh
U291cmNlICpkYXRhU291cmNlOwotICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlICpwcm9taXNlZERy
YWdUSUZGRGF0YVNvdXJjZTsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVUaW1lcjsKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVNb3Vz
ZW92ZXJUaW1lcjsKLQotICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3I7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgQk9PTCBlbnVtZXJhdGluZ1N1YnZpZXdzOwotI2VuZGlmCi19
Ci0tICh2b2lkKWNsZWFyOwotQGVuZAotCiBAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJJbnRl
cm5hbCkKIC0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7CiAtICh2b2lkKV91cGRhdGVGb250UGFu
ZWw7CkBAIC0xMDksMTQgKzQ1LDEyIEBAIHN0cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2
ZW50c1BhcmEKIC0gKHZvaWQpX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2luczsK
IC0gKHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7CiAjZW5kaWYK
LS0gKGlkPFdlYkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcq
KXR5cGU7CistIChpZCA8V2ViSFRNTEhpZ2hsaWdodGVyPilfaGlnaGxpZ2h0ZXJGb3JUeXBlOihO
U1N0cmluZyopdHlwZTsKIC0gKFdlYkZyYW1lICopX2ZyYW1lOwotLSAodm9pZClwYXN0ZTooaWQp
c2VuZGVyOwotLSAodm9pZCljbG9zZUlmTm90Q3VycmVudFZpZXc7CiAtICh2b2lkKV9sb29rVXBJ
bkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyOwogLSAodm9pZClfaG92ZXJGZWVkYmFja1N1
c3BlbmRlZENoYW5nZWQ7CiAtIChCT09MKV9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6KFdlYkNv
cmU6OktleWJvYXJkRXZlbnQgKilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRT
YXZlOwotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKKy0gKERPTURvY3VtZW50RnJhZ21lbnQg
KilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJv
YXJkOwogLSAoTlNFdmVudCAqKV9tb3VzZURvd25FdmVudDsKICNpZm5kZWYgQlVJTERJTkdfT05f
VElHRVIKIC0gKEJPT0wpaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOwpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksMTMgKzI5LDggQEAKICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmll
dy5oPgogCiBAY2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKLUBjbGFzcyBET01FbGVtZW50Owog
QGNsYXNzIERPTU5vZGU7CiBAY2xhc3MgRE9NUmFuZ2U7Ci1AY2xhc3MgV2ViQXJjaGl2ZTsKLUBj
bGFzcyBXZWJGcmFtZUJyaWRnZTsKLUBjbGFzcyBXZWJWaWV3OwotQGNsYXNzIFdlYkZyYW1lOwog
QGNsYXNzIFdlYlBsdWdpbkNvbnRyb2xsZXI7CiAKIEBwcm90b2NvbCBXZWJIVE1MSGlnaGxpZ2h0
ZXIKQEAgLTkzLDExICs4OCwxMiBAQAogLSAoQk9PTClfaXNFZGl0YWJsZTsKIAogLSAoQk9PTClf
dHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwotLSAodm9pZClfc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5k
OihCT09MKWY7CistICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpaXNCYWNr
Z3JvdW5kVHJhbnNwYXJlbnQ7CiAKIC0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3Ry
aW5nOwogCi0vLyBTUEkncyBmb3IgTWFpbC4KKy8vIFNQSSB1c2VkIGJ5IE1haWwuCisvLyBGSVhN
RTogVGhlc2Ugc2hvdWxkIGFsbCBiZSBtb3ZlZCB0byBXZWJWaWV3OyB3ZSB3b24ndCBhbHdheXMg
aGF2ZSBhIFdlYkhUTUxWaWV3LgogLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdl
OwogLSAoTlNSZWN0KV9zZWxlY3Rpb25EcmFnZ2luZ1JlY3Q7CiAtIChET01Ob2RlICopX2luc2Vy
dE9yZGVyZWRMaXN0OwpAQCAtMTA4LDggKzEwNCw4IEBACiAtIChET01Ob2RlICopX2luY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZDsKIC0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxVbm9yZGVyZWQ7CiAtICh2b2lkKV9kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bDsKLS0gKHZvaWQpX3NldEhpZ2hsaWdodGVyOihpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+KWhpZ2hs
aWdodGVyIG9mVHlwZTooTlNTdHJpbmcqKXR5cGU7Ci0tICh2b2lkKV9yZW1vdmVIaWdobGlnaHRl
ck9mVHlwZTooTlNTdHJpbmcqKXR5cGU7CistICh2b2lkKV9zZXRIaWdobGlnaHRlcjooaWQgPFdl
YkhUTUxIaWdobGlnaHRlcj4paGlnaGxpZ2h0ZXIgb2ZUeXBlOihOU1N0cmluZyAqKXR5cGU7Cist
ICh2b2lkKV9yZW1vdmVIaWdobGlnaHRlck9mVHlwZTooTlNTdHJpbmcgKil0eXBlOwogLSAoRE9N
RG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm9hcmQgZm9yVHlwZTooTlNTdHJpbmcgKilwYm9hcmRUeXBlIGluQ29u
dGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNv
dXJjZXM7CiAKIC8vIFNQSSBmb3IgRHVtcFJlbmRlclRyZWUKQEAgLTEyMiw1ICsxMTgsNCBAQAog
CiAtIChCT09MKV9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZDsKIAotCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOCBAQAog
I2ltcG9ydCA8V2ViS2l0L1dlYlByZWZlcmVuY2VzLmg+CiAjaW1wb3J0IDxRdWFydHovUXVhcnR6
Lmg+CiAKLS8vIFdlYktpdEVkaXRhYmxlTGlua0JlaGF2aW9yIG5lZWRzIHRvIG1hdGNoIHRoZSBF
ZGl0YWJsZUxpbmtCZWhhdmlvciBlbnVtIGluIFdlYkNvcmUKIHR5cGVkZWYgZW51bSB7Ci0gICAg
V2ViS2l0RWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yID0gMCwKKyAgICBXZWJLaXRFZGl0YWJs
ZUxpbmtEZWZhdWx0QmVoYXZpb3IsCiAgICAgV2ViS2l0RWRpdGFibGVMaW5rQWx3YXlzTGl2ZSwK
ICAgICBXZWJLaXRFZGl0YWJsZUxpbmtPbmx5TGl2ZVdpdGhTaGlmdEtleSwKICAgICBXZWJLaXRF
ZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQsCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQko
cmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSwxMCBAQCBtYWNybyh5YW5rQW5kU2VsZWN0KSBcCiAjZGVm
aW5lIFdlYktpdE9yaWdpbmFsVG9wUHJpbnRpbmdNYXJnaW5LZXkgQCJXZWJLaXRPcmlnaW5hbFRv
cE1hcmdpbiIKICNkZWZpbmUgV2ViS2l0T3JpZ2luYWxCb3R0b21QcmludGluZ01hcmdpbktleSBA
IldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIgogCisjZGVmaW5lIEtleWJvYXJkVUlNb2RlRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIEAiY29tLmFwcGxlLktleWJvYXJkVUlNb2RlRGlkQ2hhbmdlIgor
I2RlZmluZSBBcHBsZUtleWJvYXJkVUlNb2RlIENGU1RSKCJBcHBsZUtleWJvYXJkVUlNb2RlIikK
KyNkZWZpbmUgVW5pdmVyc2FsQWNjZXNzRG9tYWluIENGU1RSKCJjb20uYXBwbGUudW5pdmVyc2Fs
YWNjZXNzIikKKwogc3RhdGljIEJPT0wgc19kaWRTZXRDYWNoZU1vZGVsOwogc3RhdGljIFdlYkNh
Y2hlTW9kZWwgc19jYWNoZU1vZGVsID0gV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCkBA
IC0yOTQsOCArMjk4LDcgQEAgc3RhdGljIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0g
MAogLSAoaWQpaW5pdFdpdGhUYXJnZXQ6KGlkKXRhcmdldCBkZWZhdWx0VGFyZ2V0OihpZClkZWZh
dWx0VGFyZ2V0IGNhdGNoRXhjZXB0aW9uczooQk9PTCljYXRjaEV4Y2VwdGlvbnM7CiBAZW5kCiAK
LUBpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVjdAoteworQGludGVyZmFjZSBXZWJW
aWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMKICAgICBQYWdlKiBwYWdlOwogICAgIApA
QCAtMzY1LDYgKzM2OCw5IEBAIHN0YXRpYyBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9
IDAKICAgICBXZWJQbHVnaW5EYXRhYmFzZSAqcGx1Z2luRGF0YWJhc2U7CiAgICAgCiAgICAgSGFz
aE1hcDx1bnNpZ25lZCBsb25nLCBSZXRhaW5QdHI8aWQ+ID4qIGlkZW50aWZpZXJNYXA7CisKKyAg
ICBCT09MIF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkOworICAgIEtleWJvYXJkVUlNb2RlIF9rZXli
b2FyZFVJTW9kZTsKIH0KIEBlbmQKIApAQCAtNzQ0LDYgKzc1MCwxMyBAQCBzdGF0aWMgYm9vbCBk
ZWJ1Z1dpZGdldCA9IHRydWU7CiAgICAgLy8gS2VlcCB0aGUgZ2xvYmFsIHBsdWctaW4gZGF0YWJh
c2UgYWN0aXZlIHVudGlsIHRoZSBhcHAgdGVybWluYXRlcyB0byBhdm9pZCBoYXZpbmcgdG8gcmVs
b2FkIHBsdWctaW4gYnVuZGxlcy4KICAgICBpZiAoIXBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQg
JiYgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nKQogICAgICAgICBbV2ViUGx1Z2luRGF0YWJhc2Ug
Y2xvc2VTaGFyZWREYXRhYmFzZV07CisKKyAgICBpZiAoX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9k
ZUFjY2Vzc2VkKSB7CisgICAgICAgIFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSAKKyAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpLZXli
b2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKKyAgICAgICAgICAgIHJlbW92ZU9i
c2VydmVyOnNlbGYgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0
Om5pbF07CisgICAgfQogfQogCiArIChOU1N0cmluZyAqKV9NSU1FVHlwZUZvckZpbGU6KE5TU3Ry
aW5nICopcGF0aApAQCAtNDE2OCw2ICs0MTgxLDQ0IEBAIHN0YXRpYyBOU1N0cmluZyAqY3JlYXRl
TWFjT1NYVmVyc2lvblN0cmkKICAgICAgICAgQ0ZSZWxlYXNlKHNlbGYpOwogfQogCistICh2b2lk
KV9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgoreworICAgIENGUHJlZmVyZW5jZXNBcHBTeW5jaHJvbml6ZShVbml2ZXJz
YWxBY2Nlc3NEb21haW4pOworCisgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1h
dDsKKyAgICBpbnQgbW9kZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBJbnRlZ2VyVmFsdWUoQXBwbGVL
ZXlib2FyZFVJTW9kZSwgVW5pdmVyc2FsQWNjZXNzRG9tYWluLCAma2V5RXhpc3RzQW5kSGFzVmFs
aWRGb3JtYXQpOworICAgIAorICAgIC8vIFRoZSBrZXlib2FyZCBhY2Nlc3MgbW9kZSBpcyByZXBv
cnRlZCBieSB0d28gYml0czoKKyAgICAvLyBCaXQgMCBpcyBzZXQgaWYgZmVhdHVyZSBpcyBvbgor
ICAgIC8vIEJpdCAxIGlzIHNldCBpZiBmdWxsIGtleWJvYXJkIGFjY2VzcyB3b3JrcyBmb3IgYW55
IGNvbnRyb2wsIG5vdCBqdXN0IHRleHQgYm94ZXMgYW5kIGxpc3RzCisgICAgLy8gV2UgcmVxdWly
ZSBib3RoIGJpdHMgdG8gYmUgb24uCisgICAgLy8gSSBkbyBub3Qga25vdyB0aGF0IHdlIHdvdWxk
IGV2ZXIgZ2V0IG9uZSBiaXQgb24gYW5kIHRoZSBvdGhlciBvZmYgc2luY2UKKyAgICAvLyBjaGVj
a2luZyB0aGUgY2hlY2tib3ggaW4gc3lzdGVtIHByZWZlcmVuY2VzIHdoaWNoIGlzIG1hcmtlZCBh
cyAiVHVybiBvbiBmdWxsIGtleWJvYXJkIGFjY2VzcyIKKyAgICAvLyB0dXJucyBvbiBib3RoIGJp
dHMuCisgICAgX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9kZSA9IChtb2RlICYgMHgyKSA/IEtleWJv
YXJkQWNjZXNzRnVsbCA6IEtleWJvYXJkQWNjZXNzRGVmYXVsdDsKKyAgICAKKyAgICAvLyBjaGVj
ayBmb3IgdGFiYmluZyB0byBsaW5rcworICAgIGlmIChbX3ByaXZhdGUtPnByZWZlcmVuY2VzIHRh
YnNUb0xpbmtzXSkKKyAgICAgICAgX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9kZSA9IChLZXlib2Fy
ZFVJTW9kZSkoX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9kZSB8IEtleWJvYXJkQWNjZXNzVGFic1Rv
TGlua3MpOworfQorCistIChLZXlib2FyZFVJTW9kZSlfa2V5Ym9hcmRVSU1vZGUKK3sKKyAgICBp
ZiAoIV9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGVBY2Nlc3NlZCkgeworICAgICAgICBfcHJpdmF0
ZS0+X2tleWJvYXJkVUlNb2RlQWNjZXNzZWQgPSBZRVM7CisgICAgICAgIFtzZWxmIF9yZXRyaWV2
ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOm5pbF07CisgICAgICAgIAorICAgICAgICBb
W05TRGlzdHJpYnV0ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCisgICAgICAg
ICAgICBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfcmV0cmlldmVLZXlib2Fy
ZFVJTW9kZUZyb21QcmVmZXJlbmNlczopIAorICAgICAgICAgICAgbmFtZTpLZXlib2FyZFVJTW9k
ZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKworICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAorICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5j
ZXM6KSAKKyAgICAgICAgICAgICAgICAgICBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlm
aWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICB9CisgICAgcmV0dXJuIF9wcml2YXRlLT5fa2V5Ym9h
cmRVSU1vZGU7Cit9CisKIEBlbmQKIAogLy8gV2UgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBjYWxs
IHRoZSBkZWxlZ2F0ZXMgYW5kIGJsb2NrIGV4Y2VwdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUK
SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDMwNzAyKQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMyArMjYsMTcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotLy8gVGhpcyBoZWFkZXIgY29u
dGFpbnMgV2ViVmlldyBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0
aGUgV2ViIEtpdCwgYnV0IGFyZSBuZWl0aGVyIFNQSSBub3IgQVBJLgorLy8gVGhpcyBoZWFkZXIg
Y29udGFpbnMgV2ViVmlldyBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBp
biBXZWJLaXQsIGJ1dCBhcmUgbmVpdGhlciBTUEkgbm9yIEFQSS4KIAogI2ltcG9ydCAiV2ViUHJl
ZmVyZW5jZXMuaCIKICNpbXBvcnQgIldlYlZpZXdQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBl
c0ludGVybmFsLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cworI2ltcG9ydCA8V2ViQ29yZS9XZWJD
b3JlS2V5Ym9hcmRVSU1vZGUuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIEtVUkw7
CkBAIC02Myw2ICs2Nyw3IEBAIHR5cGVkZWYgV2ViQ29yZTo6UGFnZSBXZWJDb3JlUGFnZTsKIEBp
bnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0ludGVybmFsKQogI2lmZGVmIF9fY3BsdXNwbHVzCiAt
IChXZWJDb3JlOjpTdHJpbmcpX3VzZXJBZ2VudEZvclVSTDooY29uc3QgV2ViQ29yZTo6S1VSTCYp
dXJsOworLSAoV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlOwogI2VuZGlm
CiBAZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19496</attachid>
            <date>2008-03-03 10:38:38 -0800</date>
            <delta_ts>2008-03-04 07:19:35 -0800</delta_ts>
            <desc>smaller piece for Adam to review</desc>
            <filename>BridgePart1Patch.txt</filename>
            <type>text/plain</type>
            <size>33305</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDcxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDgtMDMtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gc29t
ZSAiY2xlYW51cCIgb24gdGhlIHBhdGggdG8gcmVtb3ZpbmcgV2ViQ29yZUZyYW1lQnJpZGdlCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBFeHBvcnRlZCBzb21lIHN0dWZmIHdlIGVpdGhl
ciBhbHJlYWR5IHVzZSBvcgorICAgICAgICBJIGFtIGFib3V0IHRvIHVzZSBpbiBhbiB1cGNvbWlu
ZyBwYXRjaC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
TWFkZSBGaWxlQ2hvb3Nlci5oIHByaXZhdGUgcmF0aGVyCisgICAgICAgIHRoYW4gcHJvamVjdCwg
Zm9yIGZ1dHVyZSB1c2UgaW4gV2ViS2l0LgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW06IFJlbW92ZWQgc29tZSBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6IEFkZGVkIGEgbm93LW5lZWRlZCBvciBzb29uLXRvLWJlLW5lZWRl
ZCBpbmNsdWRlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDogRGl0dG8uCisKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRvci5oOiBSZW1vdmVkIG1hbnkgdW5uZWVkZWQgZGVjbGFyYXRpb25z
IGFuZCBpbmNsdWRlcy4KKyAgICAgICAgUmVtb3ZlZCB0aGUgdW51c2VkIHVzZXJWaXNpYmxlU3Ry
aW5nIGZ1bmN0aW9uLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rKTogQWRkZWQgcGFyYW1ldGVyIGZvciB0cmlnZ2Vy
aW5nRXZlbnQsIHdoaWNoIG5vCisgICAgICAgIGxvbmdlciBoYXMgYSBkZWZhdWx0IHZhbHVlLgor
ICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVlhbmtBbmRTZWxlY3QpOiBEaXR0by4KKworICAgICAg
ICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbTogUmVtb3ZlZCB1c2VyVmlzaWJsZVN0cmluZy4K
KworICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmlzS2V5Ym9hcmRPcHRpb25UYWIpOiBUd2Vha2VkIGZvcm1hdHRpbi4KKworICAgICAgICAq
IHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1l
QnJpZGdlIGRyYWdTb3VyY2VNb3ZlZFRvOl0pOiBHZXQgd2luZG93IGZyb20gLVtOU1ZpZXcgd2lu
ZG93XQorICAgICAgICByYXRoZXIgdGhhbiBmcm9tIHRoZSBicmlkZ2UuIFRoZXJlJ3Mgbm8gc3Bl
Y2lhbCB2YWx1ZSBpbiB0aGUgYnJpZGdlJ3Mgd2luZG93CisgICAgICAgIG1ldGhvZCBhbmQgd2Ug
Y2FuIHVzZSBOU1ZpZXcgZGlyZWN0bHkuCisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBk
cmFnU291cmNlRW5kZWRBdDpvcGVyYXRpb246XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKTogVXNlIGEgbmV3IFdlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3Mg
dG8KKyAgICAgICAgZmluZCB0aGUgYnVuZGxlIHJhdGhlciB0aGFuIHVzaW5nIFdlYkNvcmVGcmFt
ZUJyaWRnZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IEFkZGVk
IGEgbm93LW5lZWRlZCBvciBzb29uLXRvLWJlLW5lZWRlZCBpbmNsdWRlLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhc2hib2FyZFJlZ2lvblZhbHVl
OjpvcGVyYXRvcj09KTogRml4ZWQgbWlzdGFrZSB3aGVyZSB0aGlzIHdhc24ndAorICAgICAgICBj
b21wYXJpbmcgdGhlIGNsaXAgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6RGFzaGJvYXJk
UmVnaW9uVmFsdWU6Om9wZXJhdG9yIT0pOiBBZGRlZC4gTmVlZGVkIGJ5IG15IGZ1dHVyZSB3b3Jr
LgorCiAyMDA4LTAzLTAzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzA3MDIp
CisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsx
MzgsOCBAQCBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjdXZWJD
b3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1EZXNjcmlwdGlvbkVQMTROU011dGFibGVBcnJh
eQogX19aTjdXZWJDb3JlMTFFZGl0Q29tbWFuZDdyZWFwcGx5RXYKIF9fWk43V2ViQ29yZTExRWRp
dENvbW1hbmQ3dW5hcHBseUV2CitfX1pON1dlYkNvcmUxMUZpbGVDaG9vc2VyMTBjaG9vc2VGaWxl
RVJLTlNfNlN0cmluZ0UKK19fWk43V2ViQ29yZTExRmlsZUNob29zZXJEMUV2CiBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyMTFjb21wbGV0ZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUx
MUZyYW1lTG9hZGVyMTJjYW5DYWNoZVBhZ2VFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEy
c2hvdWxkUmVsb2FkRVJLTlNfNEtVUkxFUzNfCkBAIC0yNDQsNyArMjQ2LDYgQEAgX19aTjdXZWJD
b3JlMTJpY29uRGF0YWJhc2VFdgogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktTMF8K
IF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEQxRXYKIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRF
dmVudEMxRVJLTlNfMTJBdG9taWNTdHJpbmdFYmJQTlNfOURPTVdpbmRvd0VSS05TXzZTdHJpbmdF
amJiYmJiCi1fX1pOSzdXZWJDb3JlMTdSZXNvdXJjZUVycm9yQmFzZThsYXp5SW5pdEV2CiBfX1pO
N1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKIF9fWk43
V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U1ZGVyZWZFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRF
CiBfX1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTJzZXRDb21taXR0ZWRFYgpAQCAtMzIzLDYg
KzMyNCw3IEBAIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEsKIF9fWk43
V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEtVUkxFTlNfMTROYXZpZ2F0aW9uVHlw
ZUUKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRXYKIF9fWk43V2ViQ29yZTE2Y29s
b3JGcm9tTlNDb2xvckVQN05TQ29sb3IKK19fWk43V2ViQ29yZTE3ZXF1YWxJZ25vcmluZ0Nhc2VF
UE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1Nb3VzZUV2ZW50QzFF
UDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxOUNTU1N0eWxlRGVjbGFyYXRpb24xMXNldFByb3BlcnR5
RVJLTlNfNlN0cmluZ0VTM19SaQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTFz
aG93Q29uc29sZUV2CkBAIC02MDcsNiArNjA5LDcgQEAgX19aTks3V2ViQ29yZTE0UmVzb3VyY2VM
b2FkZXIxMWZyYW1lTG9hZAogX19aTks3V2ViQ29yZTE1UHJvZ3Jlc3NUcmFja2VyMTdlc3RpbWF0
ZWRQcm9ncmVzc0V2CiBfX1pOSzdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QxMm5zVVJMUmVxdWVz
dEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKK19f
Wk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxhenlJbml0RXYKIF9fWk5LN1dlYkNvcmUx
OVJlc291cmNlUmVxdWVzdEJhc2UzdXJsRXYKIF9fWk5LN1dlYkNvcmUxOVJlc291cmNlUmVxdWVz
dEJhc2U3aXNFbXB0eUV2CiBfX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTdpc0lu
UGFzc3dvcmRGaWVsZEV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCQkwNjY5M0RC
QjBCRkJBMkY0MDAyMTYwNzIgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjY5M0RCODBCRkJBMkY0MDAyMTYw
NzIgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07CiAJCTA2NjkzREJDMEJGQkEyRjQw
MDIxNjA3MiAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjY5M0RCOTBCRkJBMkY0MDAyMTYwNzIgLyogSW5zcGVj
dG9yQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA2NjkzRjdCMEJGQkM5MTcwMDIxNjA3MiAvKiBpbnNwZWN0b3IgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA2NjkzRjQ1MEJGQkM5MTYw
MDIxNjA3MiAvKiBpbnNwZWN0b3IgKi87IH07Ci0JCTA2NkM3NzJCMEFCNjAzQjcwMDIzOENDNCAv
KiBGaWxlQ2hvb3Nlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDY2Qzc3MkEwQUI2MDNCNzAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyLmggKi87IH07CisJ
CTA2NkM3NzJCMEFCNjAzQjcwMDIzOENDNCAvKiBGaWxlQ2hvb3Nlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDY2Qzc3MkEwQUI2MDNCNzAwMjM4Q0M0
IC8qIEZpbGVDaG9vc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDY2Qzc3MkQwQUI2MDNEMjAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDY2Qzc3MkMw
QUI2MDNEMjAwMjM4Q0M0IC8qIEZpbGVDaG9vc2VyTWFjLm1tICovOyB9OwogCQkwNjZDNzczMDBB
QjYwM0ZEMDAyMzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDY2Qzc3MkUwQUI2MDNGRDAwMjM4
Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcCAqLzsgfTsKIAkJMDY2Qzc3MzEwQUI2
MDNGRDAwMjM4Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNjZDNzcyRjBBQjYwM0ZEMDAyMzhDQzQg
LyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw2IEBACiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2Uu
aCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4ZWNTdGF0ZS5oPgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvb2JqY19pbnN0YW5jZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvcnVudGlt
ZV9vYmplY3QuaD4KQEAgLTQ2LDEwICs0NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
ICAgIGlmIChJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpIFwKICAgICAgICAg
cHJpbnRmKCIlczolZDpbJWRdICBKYXZhU2NyaXB0IGV4Y2VwdGlvbjogICVzXG4iLCBfX0ZJTEVf
XywgX19MSU5FX18sIGdldHBpZCgpLCBleGVjLT5leGNlcHRpb24oKS0+dG9PYmplY3QoZXhlYykt
PmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSktPnRvU3RyaW5nKGV4ZWMp
LmFzY2lpKCkpOwogCi1AaW50ZXJmYWNlIFdlYkZyYW1lCi0tIChXZWJDb3JlRnJhbWVCcmlkZ2Ug
KilfYnJpZGdlOyAvLyBpbXBsZW1lbnRlZCBpbiBXZWJLaXQKLUBlbmQKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIEhhc2hNYXA8SlNPYmplY3QqLCBOU09iamVjdCo+IEpTV3JhcHBl
ck1hcDsKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJG
b250RGF0YS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywzNSArMjcsMjUgQEAKICNk
ZWZpbmUgRWRpdG9yX2gKIAogI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1BvbGljeS5oIgorI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRv
ckRlbGV0ZUFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLWNsYXNzIE5TU3RyaW5nOwotY2xhc3MgTlNV
Ukw7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOwogY2xhc3MgQ2xpcGJvYXJkOwogY2xhc3MgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjsK
LWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBFZGl0Q29tbWFuZDsKLWNsYXNzIEVkaXRv
ckludGVybmFsQ29tbWFuZDsKIGNsYXNzIEVkaXRvckNsaWVudDsKLWNsYXNzIEV2ZW50VGFyZ2V0
Tm9kZTsKLWNsYXNzIEZyYW1lOworY2xhc3MgRWRpdG9ySW50ZXJuYWxDb21tYW5kOwogY2xhc3Mg
SFRNTEVsZW1lbnQ7CitjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgUGFzdGVib2FyZDsKLWNs
YXNzIFJhbmdlOwotY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKLWNsYXNzIFNlbGVjdGlvbjsK
IGNsYXNzIFNpbXBsZUZvbnREYXRhOworY2xhc3MgVGV4dDsKIAogc3RydWN0IENvbXBvc2l0aW9u
VW5kZXJsaW5lIHsKICAgICBDb21wb3NpdGlvblVuZGVybGluZSgpIApAQCAtMTEzLDcgKzEwMyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIG91dGRlbnQoKTsKICAgICB2b2lkIHRyYW5zcG9zZSgpOwog
Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50LCBQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNpbmdET01SYW5nZSwgRWRpdG9y
SW5zZXJ0QWN0aW9uIGdpdmVuQWN0aW9uKTsKKyAgICBib29sIHNob3VsZEluc2VydEZyYWdtZW50
KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIFBhc3NSZWZQdHI8UmFuZ2U+LCBFZGl0b3JJ
bnNlcnRBY3Rpb24pOwogICAgIGJvb2wgc2hvdWxkSW5zZXJ0VGV4dChjb25zdCBTdHJpbmcmLCBS
YW5nZSosIEVkaXRvckluc2VydEFjdGlvbikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRTaG93RGVs
ZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50KikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGREZWxldGVS
YW5nZShSYW5nZSopIGNvbnN0OwpAQCAtMTg3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICBDb21t
YW5kIGNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSk7CiAKICAgICBib29sIGluc2VydFRleHQoY29uc3QgU3RyaW5nJiwgRXZlbnQqIHRyaWdnZXJp
bmdFdmVudCk7Ci0gICAgYm9vbCBpbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29u
c3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIEV2ZW50KiB0cmlnZ2VyaW5nRXZl
bnQgPSAwKTsKKyAgICBib29sIGluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25z
dCBTdHJpbmcmLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgRXZlbnQqIHRyaWdnZXJpbmdFdmVu
dCk7CiAgICAgYm9vbCBpbnNlcnRMaW5lQnJlYWsoKTsKICAgICBib29sIGluc2VydFBhcmFncmFw
aFNlcGFyYXRvcigpOwogICAgIApAQCAtMjU3LDEwICsyNDcsNiBAQCBwdWJsaWM6CiAKICAgICBT
ZWxlY3Rpb24gc2VsZWN0aW9uRm9yQ29tbWFuZChFdmVudCopOwogCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopOwotI2VuZGlmCi0KICAg
ICB2b2lkIGFwcGVuZFRvS2lsbFJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBwcmVwZW5k
VG9LaWxsUmluZyhjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgeWFua0Zyb21LaWxsUmluZygp
OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMzA3MDIpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
Rm9ybWF0QmxvY2tDb21tYW5kLmgiCiAjaW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgpAQCAtOTM4LDE0ICs5MzksMTQgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZVVuc2VsZWN0KEZyYW1lKiBmcmFtZQogCiBzdGF0aWMgYm9vbCBleGVjdXRlWWFu
ayhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JikKIHsKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRF
dmVudChmcmFtZS0+ZWRpdG9yKCktPnlhbmtGcm9tS2lsbFJpbmcoKSwgZmFsc2UpOworICAgIGZy
YW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGZyYW1lLT5l
ZGl0b3IoKS0+eWFua0Zyb21LaWxsUmluZygpLCBmYWxzZSwgMCk7CiAgICAgZnJhbWUtPmVkaXRv
cigpLT5zZXRLaWxsUmluZ1RvWWFua2VkU3RhdGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
c3RhdGljIGJvb2wgZXhlY3V0ZVlhbmtBbmRTZWxlY3QoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPmVkaXRvcigp
LT5pbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoZnJhbWUtPmVkaXRvcigpLT55YW5r
RnJvbUtpbGxSaW5nKCksIHRydWUpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dFdp
dGhvdXRTZW5kaW5nVGV4dEV2ZW50KGZyYW1lLT5lZGl0b3IoKS0+eWFua0Zyb21LaWxsUmluZygp
LCB0cnVlLCAwKTsKICAgICBmcmFtZS0+ZWRpdG9yKCktPnNldEtpbGxSaW5nVG9ZYW5rZWRTdGF0
ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0J
KHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDkgQEAKICNpbXBvcnQgIkVkaXRvci5o
IgogCiAjaW1wb3J0ICJDbGlwYm9hcmRNYWMuaCIKLSNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgor
I2ltcG9ydCAiRG9jTG9hZGVyLmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2ltcG9ydCAiRnJhbWVW
aWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDksMTMgKzUxLDYgQEAgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbAogICAgIHJldHVybiBuZXcgQ2xpcGJv
YXJkTWFjKGZhbHNlLCBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSwgcG9saWN5KTsK
IH0KIAotTlNTdHJpbmcqIEVkaXRvcjo6dXNlclZpc2libGVTdHJpbmcoTlNVUkwqIG5zVVJMKQot
ewotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgpLT51c2VyVmlzaWJs
ZVN0cmluZyhuc1VSTCk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQogc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUtpbGxSaW5nSWZOZWVkZWQoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkS2ls
bFJpbmcgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZp
c2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw5ICs5Myw5IEBAIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gRXZl
bnRIYW5kbGVyOjoKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0tleWJvYXJkT3B0aW9uVGFiKEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIHJldHVybiBldmVudAotICAgICYmIChldmVudC0+dHlw
ZSgpID09IGtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpCi0g
ICAgJiYgZXZlbnQtPmFsdEtleSgpCi0gICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAi
VSswMDA5IjsgICAgCisgICAgICAgICYmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCB8
fCBldmVudC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpCisgICAgICAgICYmIGV2ZW50LT5hbHRL
ZXkoKQorICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMDkiOyAgICAK
IH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2Fy
ZEV2ZW50KiBldmVudCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1l
QnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1l
QnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMwLDIyICsxMTMwLDI4IEBAIHN0YXRpYyBI
VE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbUQKIAogLSAodm9pZClkcmFnU291cmNlTW92
ZWRUbzooTlNQb2ludCl3aW5kb3dMb2MKIHsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICAv
LyBGSVhNRTogRmFrZSBtb2RpZmllciBrZXlzIGhlcmUuCi0gICAgICAgIFBsYXRmb3JtTW91c2VF
dmVudCBldmVudChJbnRQb2ludCh3aW5kb3dMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFtz
ZWxmIHdpbmRvd10pLAotICAgICAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAw
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7Ci0gICAgICAgIG1f
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kcmFnU291cmNlTW92ZWRUbyhldmVudCk7Ci0gICAgfQor
ICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9
IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICAv
LyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJlLCBidXQgdGhleSBzaG91
bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KElu
dFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywgW3ZpZXctPmdldFZpZXco
KSB3aW5kb3ddKSwKKyAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7CisgICAgbV9mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmRyYWdTb3VyY2VNb3ZlZFRvKGV2ZW50KTsKIH0KIAogLSAodm9pZClkcmFn
U291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRp
b24pb3BlcmF0aW9uCiB7Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgLy8gRklYTUU6IEZh
a2UgbW9kaWZpZXIga2V5cyBoZXJlLgotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQo
SW50UG9pbnQod2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbc2VsZiB3aW5kb3dd
KSwKLSAgICAgICAgICAgIExlZnRCdXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgMCwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1lKCkpOwotICAgICAgICBtX2ZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJh
dGlvbik7Ci0gICAgfQorICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybjsKKyAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJl
LCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCisgICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywg
W3ZpZXctPmdldFZpZXcoKSB3aW5kb3ddKSwKKyAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVu
dE1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7Cisg
ICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VFbmRlZEF0KGV2ZW50LCAoRHJh
Z09wZXJhdGlvbilvcGVyYXRpb24pOwogfQogCiAtIChCT09MKWdldERhdGE6KE5TRGF0YSAqKilk
YXRhIGFuZFJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICoqKXJlc3BvbnNlIGZvclVSTDooTlNTdHJp
bmcgKil1cmwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
CShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDcgKzMwLDEyIEBACiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW1wb3J0ICJX
ZWJDb3JlRnJhbWVCcmlkZ2UuaCIKKworQGludGVyZmFjZSBXZWJDb3JlQnVuZGxlRmluZGVyIDog
TlNPYmplY3QKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVCdW5kbGVGaW5kZXIKK0Bl
bmQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MSw3ICs1Niw3IEBAIEltYWdlKiBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QKIHsKICAgICBzdGF0aWMgQml0bWFwSW1hZ2Ug
bnVsbEltYWdlOwogICAgIAotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxl
Rm9yQ2xhc3M6W1dlYkNvcmVGcmFtZUJyaWRnZSBjbGFzc11dOworICAgIE5TQnVuZGxlICpidW5k
bGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3Nd
XTsKICAgICBOU1N0cmluZyAqaW1hZ2VQYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm5hbWVdIG9mVHlwZTpAInRpZmYiXTsKICAgICBO
U0RhdGEgKm5hbWVkSW1hZ2VEYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOmlt
YWdlUGF0aF07CiAgICAgaWYgKG5hbWVkSW1hZ2VEYXRhKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lt
cG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkVkaXRvci5oIgogI2ltcG9ydCAiRm91
bmRhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkltYWdlLmgiCiAj
aW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRWRpdG9yLmgiCiAjaW1w
b3J0ICJFZGl0b3JDbGllbnQuaCIKKyNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW1wb3J0ICJJbWFnZS5oIgogI2ltcG9ydCAiS1VSTC5oIgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsMTEgQEAgZW51
bSBWZXJ0aWNhbFBvc2l0aW9uSGludCB7CiBzdHJ1Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWUgewog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEYXNoYm9hcmRSZWdpb25WYWx1ZSYgbykgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IG8udHlwZSAmJiBib3VuZHMgPT0gby5ib3Vu
ZHMgJiYgbGFiZWwgPT0gby5sYWJlbDsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gby50eXBlICYm
IGJvdW5kcyA9PSBvLmJvdW5kcyAmJiBjbGlwID09IG8uY2xpcCAmJiBsYWJlbCA9PSBvLmxhYmVs
OworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGFzaGJvYXJkUmVnaW9uVmFsdWUm
IG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKICAgICB9CiAK
ICAgICBTdHJpbmcgbGFiZWw7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzA3MTEpCisrKyBXZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDA4LTAzLTAzICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIHNvbWUgImNsZWFudXAiIG9uIHRoZSBwYXRoIHRvIHJl
bW92aW5nIFdlYkNvcmVGcmFtZUJyaWRnZQorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFz
ZU1hbmFnZXIubW06IFR3ZWFrIGluY2x1ZGVzLgorICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJh
c2VUcmFja2VyQ2xpZW50Lm1tOiBEaXR0by4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlNlY3VyaXR5
T3JpZ2luLm1tOiBEaXR0by4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlNlY3VyaXR5T3JpZ2luSW50
ZXJuYWwuaDogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAg
ICAoY29yZSk6IENoYW5nZWQgdG8gZ2V0IHJpZCBvZiB0aGUgcmVxdWlyZW1lbnQgdGhhdCBXZWJL
aXRFZGl0YWJsZUxpbmtCZWhhdmlvciBleGFjdGx5CisgICAgICAgIG1hdGNoIFdlYkNvcmU6OkVk
aXRhYmxlTGlua0JlaGF2aW9yLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5o
OiBSZW1vdmVkIHVudXNlZCBraXQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tOiBNb3ZlZCBXZWJIVE1MVmlld1ByaXZhdGUgY2xhc3MgaW4gaGVyZS4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaDogTW92ZWQgV2ViSFRNTFZld1ByaXZh
dGUgY2xhc3Mgb3V0IG9mIGhlcmUuCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlld1ByaXZh
dGUuaDogVHdlYWtlZCBmb3JtYXR0aW5nIGFuZCByZW1vdmVkIHNvbWUgdW5uZWVkZWQgZGVjbGFy
YXRpb25zLgorCisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaDogUmVt
b3ZlZCBhIG5vLWxvbmdlci1uZWVkZWQgY29tbWVudC4KKwogMjAwOC0wMy0wMSAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpJ
bmRleDogV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCShyZXZpc2lvbiAz
MDcwMikKKysrIFdlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIldlYkRhdGFiYXNlTWFuYWdlcklu
dGVybmFsLmgiCiAKICNpbXBvcnQgIldlYkRhdGFiYXNlVHJhY2tlckNsaWVudC5oIgotI2ltcG9y
dCAiV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdp
bkludGVybmFsLmgiCiAKICNpbXBvcnQgPFdlYkNvcmUvRGF0YWJhc2VUcmFja2VyLmg+CkluZGV4
OiBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0JKHJl
dmlzaW9uIDMwNzAyKQorKysgV2ViS2l0L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlVHJhY2tlckNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiV2ViRGF0
YWJhc2VUcmFja2VyQ2xpZW50LmgiCiAKICNpbXBvcnQgIldlYkRhdGFiYXNlTWFuYWdlclByaXZh
dGUuaCIKLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2Vi
U2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgpJbmRleDogV2ViS2l0L21hYy9TdG9yYWdl
L1dlYlNlY3VyaXR5T3JpZ2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvU3RvcmFnZS9X
ZWJTZWN1cml0eU9yaWdpbi5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1N0b3Jh
Z2UvV2ViU2VjdXJpdHlPcmlnaW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw3ICsyNSw2IEBACiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSNpbXBvcnQgIldlYlNlY3VyaXR5T3JpZ2lu
UHJpdmF0ZS5oIgogCiAjaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgiCiAKSW5k
ZXg6IFdlYktpdC9tYWMvU3RvcmFnZS9XZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9TdG9yYWdlL1dlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaAko
cmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1N0b3JhZ2UvV2ViU2VjdXJpdHlPcmlnaW5J
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKKyNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogfQpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjE3LDE5
ICsyMTcsMjYgQEAgRE9NUmFuZ2UgKmtpdChSYW5nZSogcmFuZ2UpCiAgICAgcmV0dXJuIFtET01S
YW5nZSBfd3JhcFJhbmdlOnJhbmdlXTsKIH0KIAotV2ViQ29yZTo6RWRpdGFibGVMaW5rQmVoYXZp
b3IgY29yZShXZWJLaXRFZGl0YWJsZUxpbmtCZWhhdmlvciBlZGl0YWJsZUxpbmtCZWhhdmlvcikK
K0VkaXRhYmxlTGlua0JlaGF2aW9yIGNvcmUoV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3IgZWRp
dGFibGVMaW5rQmVoYXZpb3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkVk
aXRhYmxlTGlua0JlaGF2aW9yPihlZGl0YWJsZUxpbmtCZWhhdmlvcik7Ci19Ci0KLVdlYktpdEVk
aXRhYmxlTGlua0JlaGF2aW9yIGtpdChXZWJDb3JlOjpFZGl0YWJsZUxpbmtCZWhhdmlvciBlZGl0
YWJsZUxpbmtCZWhhdmlvcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RWRpdGFi
bGVMaW5rQmVoYXZpb3I+KGVkaXRhYmxlTGlua0JlaGF2aW9yKTsKKyAgICBzd2l0Y2ggKGVkaXRh
YmxlTGlua0JlaGF2aW9yKSB7CisgICAgICAgIGNhc2UgV2ViS2l0RWRpdGFibGVMaW5rRGVmYXVs
dEJlaGF2aW9yOgorICAgICAgICAgICAgcmV0dXJuIEVkaXRhYmxlTGlua0RlZmF1bHRCZWhhdmlv
cjsKKyAgICAgICAgY2FzZSBXZWJLaXRFZGl0YWJsZUxpbmtBbHdheXNMaXZlOgorICAgICAgICAg
ICAgcmV0dXJuIEVkaXRhYmxlTGlua0Fsd2F5c0xpdmU7CisgICAgICAgIGNhc2UgV2ViS2l0RWRp
dGFibGVMaW5rT25seUxpdmVXaXRoU2hpZnRLZXk6CisgICAgICAgICAgICByZXR1cm4gRWRpdGFi
bGVMaW5rT25seUxpdmVXaXRoU2hpZnRLZXk7CisgICAgICAgIGNhc2UgV2ViS2l0RWRpdGFibGVM
aW5rTGl2ZVdoZW5Ob3RGb2N1c2VkOgorICAgICAgICAgICAgcmV0dXJuIEVkaXRhYmxlTGlua0xp
dmVXaGVuTm90Rm9jdXNlZDsKKyAgICAgICAgY2FzZSBXZWJLaXRFZGl0YWJsZUxpbmtOZXZlckxp
dmU6CisgICAgICAgICAgICByZXR1cm4gRWRpdGFibGVMaW5rTmV2ZXJMaXZlOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRWRpdGFibGVMaW5rRGVmYXVsdEJl
aGF2aW9yOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWUgKFdlYkludGVybmFsKQogCi0K
IHN0YXRpYyBpbmxpbmUgV2ViRnJhbWUgKmZyYW1lKFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdl
KQogewogICAgIHJldHVybiAoKFdlYkZyYW1lQnJpZGdlICopYnJpZGdlKS0+X2ZyYW1lOwpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCShyZXZpc2lvbiAzMDcwMikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksMTcgKzg5LDEzIEBAIFdlYkNvcmU6OlBhZ2Uq
IGNvcmUoV2ViVmlldyAqKTsKIFdlYlZpZXcgKmtpdChXZWJDb3JlOjpQYWdlKik7CiAKIFdlYkNv
cmU6OkVkaXRhYmxlTGlua0JlaGF2aW9yIGNvcmUoV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3Ip
OwotV2ViS2l0RWRpdGFibGVMaW5rQmVoYXZpb3Iga2l0KFdlYkNvcmU6OkVkaXRhYmxlTGlua0Jl
aGF2aW9yKTsKIAogV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpOwogCi1A
aW50ZXJmYWNlIFdlYkZyYW1lUHJpdmF0ZSA6IE5TT2JqZWN0Ci17CitAaW50ZXJmYWNlIFdlYkZy
YW1lUHJpdmF0ZSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMKICAgICBXZWJGcmFtZVZpZXcgKndlYkZy
YW1lVmlldzsKLQogICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2U7Ci0KICAgICBXZWJTY3JpcHRE
ZWJ1Z2dlciAqc2NyaXB0RGVidWdnZXI7CiAgICAgaWQgaW50ZXJuYWxMb2FkRGVsZWdhdGU7CiB9
CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiAzMDcwMikKKysrIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcg
KzE3OSw3IEBAIGV4dGVybiBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFIKIAogfQog
Ci1AaW50ZXJmYWNlIE5TVmlldyAoQXBwS2l0U2VjcmV0c0lLbm93QWJvdXQpCitAaW50ZXJmYWNl
IE5TVmlldyAoV2ViTlNWaWV3RGV0YWlscykKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0
SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wp
aXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVW
aWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKIC0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxE
aXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZp
c1JlY3Q7CiAtIChOU1JlY3QpX2RpcnR5UmVjdDsKQEAgLTE4OCwyMSArMTg4LDIxIEBAIGV4dGVy
biBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFIKIC0gKHZvaWQpX3dpbmRvd0NoYW5n
ZWRLZXlTdGF0ZTsKIEBlbmQKIAotQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChBcHBLaXRTZWNy
ZXRzSUtub3dBYm91dCkKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlv
bkRldGFpbHMpCiAtICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIEBlbmQK
IAotQGludGVyZmFjZSBOU1dpbmRvdyAoQXBwS2l0U2VjcmV0c0lLbm93QWJvdXQpCitAaW50ZXJm
YWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCiAtIChpZClfbmV3Rmlyc3RSZXNwb25k
ZXJBZnRlclJlc2lnbmluZzsKIC0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wp
ZmxhZzsKIEBlbmQKIAotQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKEFwcEtpdFNlY3Jl
dHNJS25vd0Fib3V0KQotLSAoaWQpX2luaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdlICopZG9tUmFu
Z2U7CitAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5n
RGV0YWlscykKKy0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwogLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBk
b2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGlj
dGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKIEBl
bmQKIAotQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoQ3VycmVudGx5UHJpdmF0ZUZvclRleHRW
aWV3KQorQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxz
KQogLSAodm9pZClsZWFybldvcmQ6KE5TU3RyaW5nICopd29yZDsKIEBlbmQKIApAQCAtMzYwLDYg
KzM2MCw2NSBAQCBzdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhCiAgICAg
Qk9PTCBjb25zdW1lZEJ5SU07CiB9OwogCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6
IE5TT2JqZWN0IHsKK0BwdWJsaWMKKyAgICBCT09MIGNsb3NlZDsKKyAgICBCT09MIG5lZWRzTGF5
b3V0OworICAgIEJPT0wgbmVlZHNUb0FwcGx5U3R5bGVzOworICAgIEJPT0wgaWdub3JpbmdNb3Vz
ZURyYWdnZWRFdmVudHM7CisgICAgQk9PTCBwcmludGluZzsKKyAgICBCT09MIGF2b2lkaW5nUHJp
bnRPcnBoYW47CisgICAgCisgICAgaWQgc2F2ZWRTdWJ2aWV3czsKKyAgICBCT09MIHN1YnZpZXdz
U2V0QXNpZGU7CisKKyAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBo
YW5kbGluZyB0aGUgZXZlbnQuCisgICAgQk9PTCBoYW5kbGluZ01vdXNlRG93bkV2ZW50OworICAg
IE5TRXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQu
CisgICAgCisgICAgTlNTaXplIGxhc3RMYXlvdXRTaXplOworICAgIAorICAgIE5TUG9pbnQgbGFz
dFNjcm9sbFBvc2l0aW9uOworCisgICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJv
bGxlcjsKKyAgICAKKyAgICBOU1N0cmluZyAqdG9vbFRpcDsKKyAgICBOU1Rvb2xUaXBUYWcgbGFz
dFRvb2xUaXBUYWc7CisgICAgaWQgdHJhY2tpbmdSZWN0T3duZXI7CisgICAgdm9pZCAqdHJhY2tp
bmdSZWN0VXNlckRhdGE7CisgICAgCisgICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOworICAg
IE5TRXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7CisgICAgCisgICAgTlNBcnJheSogcGFn
ZVJlY3RzOworCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogaGlnaGxpZ2h0ZXJzOworCisgICAg
Qk9PTCByZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsKKyAgICBCT09MIG5leHRSZXNwb25kZXJEaXNh
YmxlZE9uY2U7CisgICAgCisgICAgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciAqY29tcENvbnRy
b2xsZXI7CisgICAgCisgICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91bmQ7CisKKyAgICBXZWJI
VE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgKmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7CisgICAgQk9PTCByZWNlaXZlZE5PT1A7CisgICAgCisgICAgV2ViRGF0YVNvdXJj
ZSAqZGF0YVNvdXJjZTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSAqcHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2U7CisgICAgCisgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlVGltZXI7CisgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlTW91c2VvdmVy
VGltZXI7CisKKyAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yOworCisjaWZu
ZGVmIE5ERUJVRworICAgIEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsKKyNlbmRpZgorfQorLSAo
dm9pZCljbGVhcjsKK0BlbmQKKwogc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRl
IHN0YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUpIHsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDc5ICsyOCwxNSBAQAogCiAvLyBUaGluZ3MgaW50ZXJuYWwgdG8gdGhlIFdl
YktpdCBmcmFtZXdvcms7IG5vdCBTUEkuCiAKLSNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgIldlYkhUTUxWaWV3UHJpdmF0ZS5oIgogCi1AY2xhc3MgV2ViVGV4
dENvbXBsZXRlQ29udHJvbGxlcjsKLUBjbGFzcyBET01Eb2N1bWVudEZyYWdtZW50OwotQGNsYXNz
IERPTUVsZW1lbnQ7CitAY2xhc3MgV2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIENhY2hlZEltYWdlOworICAgIGNsYXNz
IEtleWJvYXJkRXZlbnQ7CiB9CiAKLXN0cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcnM7Ci0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXdQcml2YXRlIDogTlNPYmplY3QK
LXsKLUBwdWJsaWMKLSAgICBCT09MIGNsb3NlZDsKLSAgICBCT09MIG5lZWRzTGF5b3V0OwotICAg
IEJPT0wgbmVlZHNUb0FwcGx5U3R5bGVzOwotICAgIEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRF
dmVudHM7Ci0gICAgQk9PTCBwcmludGluZzsKLSAgICBCT09MIGF2b2lkaW5nUHJpbnRPcnBoYW47
Ci0gICAgCi0gICAgaWQgc2F2ZWRTdWJ2aWV3czsKLSAgICBCT09MIHN1YnZpZXdzU2V0QXNpZGU7
Ci0KLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0
aGUgZXZlbnQuCi0gICAgQk9PTCBoYW5kbGluZ01vdXNlRG93bkV2ZW50OwotICAgIE5TRXZlbnQg
KmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0gICAgCi0g
ICAgTlNTaXplIGxhc3RMYXlvdXRTaXplOwotICAgIAotICAgIE5TUG9pbnQgbGFzdFNjcm9sbFBv
c2l0aW9uOwotCi0gICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlcjsKLSAg
ICAKLSAgICBOU1N0cmluZyAqdG9vbFRpcDsKLSAgICBOU1Rvb2xUaXBUYWcgbGFzdFRvb2xUaXBU
YWc7Ci0gICAgaWQgdHJhY2tpbmdSZWN0T3duZXI7Ci0gICAgdm9pZCAqdHJhY2tpbmdSZWN0VXNl
ckRhdGE7Ci0gICAgCi0gICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOwotICAgIE5TRXZlbnQg
KmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7Ci0gICAgCi0gICAgTlNBcnJheSogcGFnZVJlY3RzOwot
Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSogaGlnaGxpZ2h0ZXJzOwotCi0gICAgQk9PTCByZXNp
Z25pbmdGaXJzdFJlc3BvbmRlcjsKLSAgICBCT09MIG5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7
Ci0gICAgCi0gICAgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciAqY29tcENvbnRyb2xsZXI7Ci0g
ICAgCi0gICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91bmQ7Ci0KLSAgICBXZWJIVE1MVmlld0lu
dGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgKmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7
Ci0gICAgQk9PTCByZWNlaXZlZE5PT1A7Ci0gICAgCi0gICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNv
dXJjZTsKLSAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSAqcHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2U7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0
YXRlVGltZXI7Ci0gICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlTW91c2VvdmVyVGltZXI7Ci0K
LSAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsKLSNlbmRpZgotfQotLSAodm9pZCljbGVh
cjsKLUBlbmQKLQogQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwpCiAtICh2b2lk
KV9zZWxlY3Rpb25DaGFuZ2VkOwogLSAodm9pZClfdXBkYXRlRm9udFBhbmVsOwpAQCAtMTA5LDE0
ICs0NSwxMyBAQCBzdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhCiAtICh2
b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnM7CiAtICh2b2lkKV9yZXN1
bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zOwogI2VuZGlmCi0tIChpZDxXZWJIVE1M
SGlnaGxpZ2h0ZXI+KV9oaWdobGlnaHRlckZvclR5cGU6KE5TU3RyaW5nKil0eXBlOworLSAoaWQg
PFdlYkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcqKXR5cGU7
CiAtIChXZWJGcmFtZSAqKV9mcmFtZTsKIC0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcjsKLS0gKHZv
aWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3OwogLSAodm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJv
bU1lbnU6KGlkKXNlbmRlcjsKIC0gKHZvaWQpX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2Vk
OwogLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihXZWJDb3JlOjpLZXlib2FyZEV2
ZW50ICopZXZlbnQgc2hvdWxkU2F2ZUNvbW1hbmQ6KEJPT0wpc2hvdWxkU2F2ZTsKLS0gKERPTURv
Y3VtZW50RnJhZ21lbnQqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQ7CistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIC0gKE5TRXZl
bnQgKilfbW91c2VEb3duRXZlbnQ7CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAtIChCT09M
KWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDMwNzAyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDEzICsyOSw4IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZpZXcuaD4KIAogQGNsYXNz
IERPTURvY3VtZW50RnJhZ21lbnQ7Ci1AY2xhc3MgRE9NRWxlbWVudDsKIEBjbGFzcyBET01Ob2Rl
OwogQGNsYXNzIERPTVJhbmdlOwotQGNsYXNzIFdlYkFyY2hpdmU7Ci1AY2xhc3MgV2ViRnJhbWVC
cmlkZ2U7Ci1AY2xhc3MgV2ViVmlldzsKLUBjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJQbHVn
aW5Db250cm9sbGVyOwogCiBAcHJvdG9jb2wgV2ViSFRNTEhpZ2hsaWdodGVyCkBAIC05MywxMSAr
ODgsMTIgQEAKIC0gKEJPT0wpX2lzRWRpdGFibGU7CiAKIC0gKEJPT0wpX3RyYW5zcGFyZW50QmFj
a2dyb3VuZDsKLS0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClmOworLSAo
dm9pZClfc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kOihCT09MKWlzQmFja2dyb3VuZFRyYW5zcGFy
ZW50OwogCiAtICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXN0cmluZzsKIAotLy8gU1BJ
J3MgZm9yIE1haWwuCisvLyBTUEkgdXNlZCBieSBNYWlsLgorLy8gRklYTUU6IFRoZXNlIHNob3Vs
ZCBhbGwgYmUgbW92ZWQgdG8gV2ViVmlldzsgd2Ugd29uJ3QgYWx3YXlzIGhhdmUgYSBXZWJIVE1M
Vmlldy4KIC0gKE5TSW1hZ2UgKilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZTsKIC0gKE5TUmVjdClf
c2VsZWN0aW9uRHJhZ2dpbmdSZWN0OwogLSAoRE9NTm9kZSAqKV9pbnNlcnRPcmRlcmVkTGlzdDsK
QEAgLTEwOCw4ICsxMDQsOCBAQAogLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbE9yZGVyZWQ7CiAtIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5v
cmRlcmVkOwogLSAodm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWw7Ci0tICh2b2lkKV9z
ZXRIaWdobGlnaHRlcjooaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiloaWdobGlnaHRlciBvZlR5cGU6
KE5TU3RyaW5nKil0eXBlOwotLSAodm9pZClfcmVtb3ZlSGlnaGxpZ2h0ZXJPZlR5cGU6KE5TU3Ry
aW5nKil0eXBlOworLSAodm9pZClfc2V0SGlnaGxpZ2h0ZXI6KGlkIDxXZWJIVE1MSGlnaGxpZ2h0
ZXI+KWhpZ2hsaWdodGVyIG9mVHlwZTooTlNTdHJpbmcgKil0eXBlOworLSAodm9pZClfcmVtb3Zl
SGlnaGxpZ2h0ZXJPZlR5cGU6KE5TU3RyaW5nICopdHlwZTsKIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlwZSBpbkNvbnRleHQ6KERPTVJhbmdl
ICopY29udGV4dCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwogCiAvLyBT
UEkgZm9yIER1bXBSZW5kZXJUcmVlCkBAIC0xMjIsNSArMTE4LDQgQEAKIAogLSAoQk9PTClfY2Fu
U21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CiAK
LQogQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aAkocmV2aXNpb24gMzA3MDIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQ
cml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDggQEAKICNpbXBvcnQgPFdlYktp
dC9XZWJQcmVmZXJlbmNlcy5oPgogI2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgogCi0vLyBXZWJL
aXRFZGl0YWJsZUxpbmtCZWhhdmlvciBuZWVkcyB0byBtYXRjaCB0aGUgRWRpdGFibGVMaW5rQmVo
YXZpb3IgZW51bSBpbiBXZWJDb3JlCiB0eXBlZGVmIGVudW0gewotICAgIFdlYktpdEVkaXRhYmxl
TGlua0RlZmF1bHRCZWhhdmlvciA9IDAsCisgICAgV2ViS2l0RWRpdGFibGVMaW5rRGVmYXVsdEJl
aGF2aW9yLAogICAgIFdlYktpdEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUsCiAgICAgV2ViS2l0RWRp
dGFibGVMaW5rT25seUxpdmVXaXRoU2hpZnRLZXksCiAgICAgV2ViS2l0RWRpdGFibGVMaW5rTGl2
ZVdoZW5Ob3RGb2N1c2VkLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19497</attachid>
            <date>2008-03-03 10:48:50 -0800</date>
            <delta_ts>2008-03-04 07:41:06 -0800</delta_ts>
            <desc>work in progress (ready to land, but needs to be broken in pieces for review)</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>124071</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA4LTAzLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjQwCisgICAgICAgICAgZWxp
bWluYXRlIFdlYkNvcmVGcmFtZUJyaWRnZQorCisgICAgICAgIFRoaXMgcGF0Y2ggZWxpbWluYXRl
cyB0aGUgcGFydHMgb2YgdGhlIGJyaWRnZSB1c2VkIGZvciBjYWxscyAqdG8qIFdlYktpdC4KKwor
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQuCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYWtlIEZpbGVDaG9vc2VyLmggInByaXZhdGUiLCBz
byB3ZSBjYW4gdXNlCisgICAgICAgIGl0IGZyb20gV2ViS2l0LgorICAgICAgICAqIGJpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOiBFbGltaW5hdGUgdW5uZWVkZWQgYnJpZGdlLXJlbGF0
ZWQgZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IEFkZGVk
IG5vdy1uZWVkZWQgaW5jbHVkZSBvZiBGcmFtZS5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOiBNb3ZlZCB0aGUgTWFjLXNwZWNpZmljIHBhcnQgb2Yg
dGhpcyB0byBFZGl0b3JNYWMuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogUmVtb3ZlZCBk
ZWZhdWx0IHZhbHVlIGZyb20gaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50LgorICAg
ICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBkZWNsYXJhdGlvbnMuIFJlbW92ZWQg
dXNlclZpc2libGVTdHJpbmcgZnVuY3Rpb24uCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rKTogVXBkYXRlZCBmb3IgRWRp
dG9yLmggY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rQW5kU2VsZWN0KTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpwYXN0ZSk6IEFkZGVkLiBDYWxscyBwYXN0ZTogb24gdGhlIGRvY3VtZW50
IHZpZXcgKG5vcm1hbGx5IGEKKyAgICAgICAgV2ViSFRNTFZpZXcpLiBXZSBzaG91bGQgZ2V0IHJp
ZCBvZiB0aGlzIGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnNldFNlbGVjdGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGln
aHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBuZXcgY2xp
ZW50IGZ1bmN0aW9ucyB0byByZXBsYWNlIGNhbGxzIHVwIHRvIFdlYktpdAorICAgICAgICB0aGF0
IHdlcmUgZm9ybWVybHkgaGFuZGxlZCBieSB0aGUgYnJpZGdlLgorCisgICAgICAgICogcGFnZS9G
cmFtZS5oOiBSZW1vdmVkIHVubmVlZGVkIGRlY2xhcmF0aW9ucy4gUmVtb3ZlZCBmdW5jdGlvbnMK
KyAgICAgICAgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQsIHdpbGxQb3B1cE1lbnUsIGN1c3RvbUhp
Z2hsaWdoTGluZVJlY3QsIHBhaW50Q3VzdG9tSGlnaGxpZ2h0LAorICAgICAgICBhbmQgaXNzdWVQ
YXN0ZUNvbW1hbmQuIENhbGxlcnMgbm93IHVzZSB0aGUgQ2hyb21lQ2xpZW50IGRpcmVjdGx5IGlu
c3RlYWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMpOiBDaGFuZ2VkIHRvIGNhbGwgZGFz
aGJvYXJkUmVnaW9uc0NoYW5nZWQKKyAgICAgICAgb24gQ2hyb21lQ2xpZW50IGFuZCB0byBvbmx5
IGNhbGwgaXQgd2hlbiB0aGUgcmVnaW9ucyBhY3R1YWxseSBjaGFuZ2VkLgorCisgICAgICAgICog
cGFnZS9tYWMvQ2hyb21lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpmb2N1c05T
Vmlldyk6IENoYW5nZWQgdG8gY2FsbCBmaXJzdFJlc3BvbmRlciBhbmQgbWFrZUZpcnN0UmVzcG9u
ZGVyCisgICAgICAgIHZpYSB0aGUgY2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRnZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojp3aWxsUG9wVXBNZW51KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmphdmFBcHBsZXQpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMpOiBDaGFuZ2VkIHRvIGNhbGwga2V5Ym9hcmRVSU1v
ZGUgdmlhIHRoZQorICAgICAgICBjbGllbnQgaW5zdGVhZCBvZiB0aGUgYnJpZGdlLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6IERp
dHRvLCBidXQgZm9yIGZpcnN0UmVzcG9uZGVyCisgICAgICAgIGFuZCBtYWtlRmlyc3RSZXNwb25k
ZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJX
aWRnZXRUcmFja2luZyk6IEdldCB0aGUgd2luZG93IGJ5IGNhbGxpbmcKKyAgICAgICAgd2luZG93
IG9uIHRoZSBOU1ZpZXcgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnJpZGdlLiBUaGUgV2ViS2l0IHNp
ZGUgd2Fzbid0IGRvaW5nIGFueXRoaW5nCisgICAgICAgIHNwZWNpYWwsIHNvIGEgY2FsbCB0byAt
W05TVmlldyB3aW5kb3ddIGlzIGZpbmUuCisKKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdl
dCk6IENyZWF0ZSB0aGUgSmF2YSBhcHBsZXQgdXNpbmcgdGhlCisgICAgICAgIGNsaWVudCBpbnN0
ZWFkIG9mIHRoZSBicmlkZ2UuCisKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UuaDogUmVtb3ZlZCBhIGxvdCBvZiBkZWNsYXJhdGlvbnMgZm9yIHRoaW5ncyB0aGF0IGFyZQor
ICAgICAgICBlaXRoZXIgdW51c2VkIG9yIG5lZWRlZCBvbmx5IGZvciBjYWxscyBmcm9tIFdlYkNv
cmUgdG8gV2ViS2l0LgorICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToK
KyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRyYWdTb3VyY2VNb3ZlZFRvOl0pOiBHZXQg
d2luZG93IGZyb20gLVtOU1ZpZXcgd2luZG93XSBpbnN0ZWFkCisgICAgICAgIG9mIHRoZSBicmlk
Z2UuCisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBkcmFnU291cmNlRW5kZWRBdDpvcGVy
YXRpb246XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKTogTW92ZWQgdGhpcyBo
ZXJlLiBJdCdzIG5vIGxvbmdlciBwbGF0Zm9ybS1zcGVjaWZpYy4KKyAgICAgICAgQWxzbyBzdGFy
dCB0aGUgcmVmY291bnQgYXQgMS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjcmVh
dGUpOiBBZGRlZCBhZG9wdFJlZiBzaW5jZSB0aGUgcmVmY291bnQgbm8gc3RhcnRzIGF0IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjp+RmlsZUNob29zZXIpOiBNb3ZlZCBoZXJl
LiBObyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oOiBSZW1vdmVkIG1fY29udHJvbGxlciwgd2hpY2ggd2FzIE1hY2ludG9zaC1zcGVj
aWZpYy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6IENoYW5nZWQgY29k
ZSB0byBmaW5kIHRoZSBXZWJDb3JlIGJ1bmRsZSB0byB1c2UKKyAgICAgICAgYSB0YXNrLXNwZWNp
ZmljIGVtcHR5IFdlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3MgaW5zdGVhZCBvZiB1c2luZyBXZWJD
b3JlRnJhbWVCcmlkZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsu
Y3BwOiBSZW1vdmVkIEZpbGVDaG9vc2VyIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLAorICAg
ICAgICBzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvRmlsZUNob29zZXJRdC5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3d4
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L0ZpbGVDaG9vc2VyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6Om9wZW5G
aWxlQ2hvb3Nlcik6IENhbGwgdGhlIGNocm9tZSBjbGllbnQgaW5zdGVhZCBvZiB0aGUKKyAgICAg
ICAgYnJpZGdlIHRvIHJ1biB0aGUgb3BlbiBwYW5lbC4gQWxsb3dzIHVzIHRvIGdldCByaWQgb2Yg
dGhlIFdlYkNvcmVPcGVuUGFuZWxDb250cm9sbGVyCisgICAgICAgIGNsYXNzIGFuZCBtX2NvbnRy
b2xsZXIgZGF0YSBtZW1iZXIgYW5kIG1vdmUgdGhlIGNvc250cnV0b3IvZGVzdHJ1Y3RvciB0byBw
bGF0Zm9ybS0KKyAgICAgICAgaW5kZXBlbmRlbnQgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9Qb3B1cE1lbnVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cp
OiBDYWxsIHdpbGxQb3BVcE1lbnUgb24gY2hyb21lIGNsaWVudCBpbnN0ZWFkIG9mIGZyYW1lLgor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6IENhbGwgc2V0U2VsZWN0ZWQgb24gY2hyb21lIGNsaWVu
dCBpbnN0ZWFkIG9mIGJyaWRnZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxp
Z2h0KTogQ2FsbCBjaHJvbWUgY2xpZW50IGluc3RlYWQgb2YgZnJhbWUuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50
Q3VzdG9tSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3Zl
cmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3I9PSk6
IEZpeGVkIHRvIGNoZWNrIHRoZSBjbGlwIHJlY3RhbmdsZSB0b28uCisgICAgICAgIChXZWJDb3Jl
OjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3IhPSk6IEFkZGVkLiBOZWVkZWQgZm9yIHRo
ZSBjb2RlIHRoYXQgY2hlY2tzCisgICAgICAgIGlmIHR3byB2ZWN0b3JzIG9mIHRoZXNlIGFyZSBp
ZGVudGljYWwgaW4gdXBkYXRlRGFzaGJvYXJkUmVnaW9ucy4KKwogMjAwOC0wMy0wMyAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHJldmlzaW9uIDMwNzEyKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhw
CSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiArNjkyLDcgQEAgX19aTks3V2ViQ29yZTlTZWxlY3Rp
b24xN2lzQ29udGVudEVkaXRhYgogX19aTks3V2ViQ29yZTlTZWxlY3Rpb24yM2lzQ29udGVudFJp
Y2hseUVkaXRhYmxlRXYKIF9fWk5LN1dlYkNvcmU5U2VsZWN0aW9uN3RvUmFuZ2VFdgogX19aTks3
V2ViQ29yZTlUaW1lckJhc2U4aXNBY3RpdmVFdgorX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVu
dEUKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRp
dmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDYgKzI5LDcgQEAK
IAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFu
ZC5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgpAQCAtOTUwLDMwICs5NTEsMjYgQEAgdm9pZCBFZGl0b3I6OmNvcHko
KQogICAgIGRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7CiB9CiAKKyNpZiAhUExBVEZP
Uk0oTUFDKQorCiB2b2lkIEVkaXRvcjo6cGFzdGUoKQogewogICAgIEFTU0VSVChtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKLSAgICBEb2NMb2FkZXIqIGxvYWRlciA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PmRvY0xvYWRlcigpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyB1c2luZyB0aGUgcGxhdGZv
cm0gaW5kZXBlbmRlbnQgY29kZSBiZWxvdyByZXF1aXJlcyBtb3ZpbmcgYWxsIG9mCi0gICAgLy8g
V0VCSFRNTFZpZXc6IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQgb3ZlciB0byBQYXN0
ZWJvYXJkTWFjLgotICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKLSAg
ICBtX2ZyYW1lLT5pc3N1ZVBhc3RlQ29tbWFuZCgpOwotICAgIGxvYWRlci0+c2V0QWxsb3dTdGFs
ZVJlc291cmNlcyhmYWxzZSk7Ci0jZWxzZQogICAgIGlmICh0cnlESFRNTFBhc3RlKCkpCiAgICAg
ICAgIHJldHVybjsgICAgIC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9uCiAgICAgaWYg
KCFjYW5QYXN0ZSgpKQogICAgICAgICByZXR1cm47CisgICAgRG9jTG9hZGVyKiBsb2FkZXIgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKTsKICAgICBsb2FkZXItPnNldEFsbG93U3Rh
bGVSZXNvdXJjZXModHJ1ZSk7CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLCB0cnVlKTsKICAgICBlbHNlCiAgICAg
ICAgIHBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkOjpnZW5lcmFsUGFz
dGVib2FyZCgpKTsKICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpOwot
I2VuZGlmCiB9CiAKKyNlbmRpZgorCiB2b2lkIEVkaXRvcjo6cGFzdGVBc1BsYWluVGV4dCgpCiB7
CiAgICBpZiAoIWNhblBhc3RlKCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDQgKzEwNSwyMCBAQCB2b2lkIEVkaXRvcjo6c2hvd0NvbG9yUGFuZWwo
KQogICAgIFtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gb3JkZXJGcm9udENvbG9y
UGFuZWw6bmlsXTsKIH0KIAorLy8gRklYTUU6IFdlIHdhbnQgdG8gdXNlIHRoZSBwbGF0Zm9ybS1p
bmRlcGVuZGVudCBjb2RlIGluc3RlYWQuIEJ1dCB3aGVuIHdlIGxhc3QKKy8vIHRyaWVkIHRvIGRv
IHNvIGl0IHNlZW1lZCB0aGF0IHdlIGZpcnN0IG5lZWQgdG8gbW92ZSBtb3JlIG9mIHRoZSBsb2dp
YyBmcm9tCisvLyAtW1dlYkhUTUxWaWV3LmNwcCBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJv
YXJkXSBpbnRvIFBhc3RlYm9hcmRNYWMuCisKK3ZvaWQgRWRpdG9yOjpwYXN0ZSgpCit7CisgICAg
QVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJh
bWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBEb2NMb2Fk
ZXIqIGxvYWRlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpOworICAgIGxvYWRl
ci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyh0cnVlKTsKKyAgICBbdmlldy0+Z2V0RG9jdW1lbnRW
aWV3KCkgdHJ5VG9QZXJmb3JtOkBzZWxlY3RvcihwYXN0ZTopIHdpdGg6bmlsXTsKKyAgICBsb2Fk
ZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDYgKzM0MywyNyBAQCB2b2lkIENocm9tZTo6
cHJpbnQoRnJhbWUqIGZyYW1lKQogICAgIG1fY2xpZW50LT5wcmludChmcmFtZSk7CiB9CiAKKy8v
IC0tLS0tLS0tCisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgp
Cit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRTZWxlY3RlZChXaWRnZXQqLCBib29sKQor
eworfQorCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUq
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKQoreworICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBib29sLCBib29sKQoreworfQorCisvLyAtLS0tLS0tLQorCiBQYWdlR3JvdXBMb2Fk
RGVmZXJyZXI6OlBhZ2VHcm91cExvYWREZWZlcnJlcihQYWdlKiBwYWdlLCBib29sIGRlZmVyU2Vs
ZikKIHsKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiogZ3JvdXAgPSBwYWdlLT5mcmFtZU5hbWVz
cGFjZSgpOwpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE5ICsyMiwzNSBAQAog
I2RlZmluZSBDaHJvbWVDbGllbnRfaAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRlZiBjbGFzcyBfam9iamVjdCogam9i
amVjdDsKKworI2lmbmRlZiBfX09CSkNfXworY2xhc3MgTlNNZW51OworY2xhc3MgTlNSZXNwb25k
ZXI7CitjbGFzcyBOU1ZpZXc7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAg
Y2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIEZpbGVDaG9vc2VyOwogICAgIGNsYXNzIEZs
b2F0UmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAg
IGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNs
YXNzIFN0cmluZzsKKyAgICBjbGFzcyBXaWRnZXQ7CiAgICAgCisgICAgc3RydWN0IERhc2hib2Fy
ZFJlZ2lvblZhbHVlOwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAgIHN0cnVjdCBX
aW5kb3dGZWF0dXJlczsKLSAgICAKKwogICAgIGNsYXNzIENocm9tZUNsaWVudCB7CiAgICAgcHVi
bGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCkgPSAwOwpAQCAtMTA0
LDYgKzEyMCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
KSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKFdpZGdldCosIGJvb2wpOworCisg
ICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoTm9kZSosIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgbGlu
ZVJlY3QsCisgICAgICAgICAgICBib29sIGJlaGluZFRleHQsIGJvb2wgZW50aXJlTGluZSk7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5Ym9h
cmRVSU1vZGUoKTsKKyAgICAgICAgdmlydHVhbCBOU1Jlc3BvbmRlciAqZmlyc3RSZXNwb25kZXIo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcihOU1Jlc3BvbmRlciAq
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVDaG9v
c2VyPik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUG9wVXBNZW51KE5TTWVudSAqKTsKKyAg
ICAgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3ICopOworI2VuZGlmCisKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsgfQogICAgIH07
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RnJhbWUuaAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgMjAwMC0yMDAx
IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgogICogICAgICAgICAgICAgICAgICAg
ICAyMDAwLTIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CiAgKiAgICAgICAgICAg
ICAgICAgICAgIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgPDFTdGVpbkBnbXguZGU+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9s
bHRlY2ggQVNBCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjgsMjEgKzI4LDE1IEBACiAjaWZuZGVmIEZyYW1l
X2gKICNkZWZpbmUgRnJhbWVfaAogCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJFZGl0
QWN0aW9uLmgiCiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisjaW5jbHVkZSAiRWRpdEFjdGlvbi5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5Lmgi
Ci0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBzdHJ1Y3QgTlBPYmplY3Q7CiAKIG5hbWVzcGFjZSBLSlMgewogCi0gICAgY2xhc3MgSW50
ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAKICAgICBuYW1lc3BhY2UgQmlu
ZGluZ3MgewpAQCAtNTQsMTcgKzQ4LDExIEBAIG5hbWVzcGFjZSBLSlMgewogCiAjaWYgUExBVEZP
Uk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNBcnJheTsKLUBjbGFzcyBOU0RpY3Rp
b25hcnk7Ci1AY2xhc3MgTlNNZW51OwotQGNsYXNzIE5TTXV0YWJsZURpY3Rpb25hcnk7Ci1AY2xh
c3MgTlNTdHJpbmc7CiBAY2xhc3MgV2ViQ29yZUZyYW1lQnJpZGdlOwogQGNsYXNzIFdlYlNjcmlw
dE9iamVjdDsKICNlbHNlCiBjbGFzcyBOU0FycmF5OwogY2xhc3MgTlNEaWN0aW9uYXJ5OwotY2xh
c3MgTlNNZW51OwogY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIE5TU3RyaW5nOwog
Y2xhc3MgV2ViQ29yZUZyYW1lQnJpZGdlOwpAQCAtNzUsNDAgKzYzLDIwIEBAIHR5cGVkZWYgaW50
IE5TV3JpdGluZ0RpcmVjdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBbmlt
YXRpb25Db250cm9sbGVyOwotY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
OwotY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFZGl0b3I7Ci1jbGFz
cyBFbGVtZW50OwogY2xhc3MgRXZlbnRIYW5kbGVyOwotY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
RnJhbWVMb2FkZXI7CiBjbGFzcyBGcmFtZUxvYWRlckNsaWVudDsKIGNsYXNzIEhUTUxGcmFtZU93
bmVyRWxlbWVudDsKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50OwotY2xhc3MgRnJhbWVQcml2
YXRlOwogY2xhc3MgRnJhbWVUcmVlOwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtK
U1Byb3h5OwotY2xhc3MgS1VSTDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBQYWdlOwotY2xhc3MgUmFu
Z2U7CiBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbjsKIGNsYXNzIFJlbmRlclBhcnQ7CiBjbGFzcyBT
ZWxlY3Rpb247CiBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwotY2xhc3MgU2V0dGluZ3M7CiBj
bGFzcyBXaWRnZXQ7CiAKLXN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwotCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKIGNsYXNzIEZyYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8
RnJhbWU+IHsKQEAgLTIwMSw4ICsxNjksNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgZG9jdW1l
bnRUeXBlU3RyaW5nKCkgY29uc3Q7CiAKLSAgICB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2Vk
KCk7Ci0KICAgICB2b2lkIGNsZWFyU2NyaXB0UHJveHkoKTsKICAgICB2b2lkIGNsZWFyRE9NV2lu
ZG93KCk7CiAKQEAgLTM2MSwyNiArMzI3LDE3IEBAIHB1YmxpYzoKIAogICAgIE5TTXV0YWJsZURp
Y3Rpb25hcnkqIGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CiAKLSAgICB2b2lkIHdpbGxQ
b3B1cE1lbnUoTlNNZW51Kik7Ci0KICAgICBOU0ltYWdlKiBzZWxlY3Rpb25JbWFnZShib29sIGZv
cmNlQmxhY2tUZXh0ID0gZmFsc2UpIGNvbnN0OwogICAgIE5TSW1hZ2UqIHNuYXBzaG90RHJhZ0lt
YWdlKE5vZGUqLCBOU1JlY3QqIGltYWdlUmVjdCwgTlNSZWN0KiBlbGVtZW50UmVjdCkgY29uc3Q7
CiAKIHByaXZhdGU6ICAgIAogICAgIE5TSW1hZ2UqIGltYWdlRnJvbVJlY3QoTlNSZWN0KSBjb25z
dDsKIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8gQ2hyb21lCi0KLXB1YmxpYzoKLSAgICBGbG9h
dFJlY3QgY3VzdG9tSGlnaGxpZ2h0TGluZVJlY3QoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LCBOb2RlKik7Ci0gICAgdm9pZCBwYWludEN1c3RvbUhp
Z2hsaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgYm9vbCB0ZXh0LCBib29sIGxpbmUsIE5vZGUq
KTsKLQogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRWRpdG9yCiAKIHB1YmxpYzoKICAgICBOU0Rp
Y3Rpb25hcnkqIGZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBO
U1dyaXRpbmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgp
IGNvbnN0OwotICAgIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQoKTsKIAogI2VuZGlmCiAKSW5kZXg6
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgICAgICAgICAg
ICAxOTk5IExhcnMgS25vbGwgPGtub2xsQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAg
IDE5OTkgQW50dGkgS29pdmlzdG8gPGtvaXZpc3RvQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAg
ICAgICAgIDIwMDAgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVu
bmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMzgsNiArMzksNyBA
QAogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTEwMjAsMTMgKzEwMjIsMTggQEAgSW50UmVjdCBGcmFtZVZp
ZXc6OndpbmRvd0NsaXBSZWN0Rm9yTGF5ZQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRGFzaGJv
YXJkUmVnaW9ucygpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKGRvYy0+aGFzRGFzaGJvYXJkUmVnaW9ucygpKSB7Ci0gICAgICAgIFZlY3RvcjxE
YXNoYm9hcmRSZWdpb25WYWx1ZT4gbmV3UmVnaW9uczsKLSAgICAgICAgZG9jLT5yZW5kZXJlcigp
LT5jb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyhuZXdSZWdpb25zKTsKLSAgICAgICAgZG9jLT5zZXRE
YXNoYm9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOwotICAgICAgICBtX2ZyYW1lLmdldCgpLT5kYXNo
Ym9hcmRSZWdpb25zQ2hhbmdlZCgpOwotICAgIH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQtPmhhc0Rhc2hib2FyZFJlZ2lv
bnMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxEYXNoYm9hcmRSZWdpb25WYWx1ZT4g
bmV3UmVnaW9uczsKKyAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+Y29sbGVjdERhc2hib2FyZFJl
Z2lvbnMobmV3UmVnaW9ucyk7CisgICAgaWYgKG5ld1JlZ2lvbnMgPT0gZG9jdW1lbnQtPmRhc2hi
b2FyZFJlZ2lvbnMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRvY3VtZW50LT5zZXREYXNoYm9h
cmRSZWdpb25zKG5ld1JlZ2lvbnMpOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpLT5kYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6
dXBkYXRlQ29udHJvbFRpbnRzKCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1tCShyZXZpc2lvbiAz
MDcxMikKKysrIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLy8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDggKzIyLDggQEAKICNpbXBvcnQgIkNocm9t
ZS5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0j
aW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIkZpbGVD
aG9vc2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzEsMjUgKzMxLDUwIEBAIHZv
aWQgQ2hyb21lOjpmb2N1c05TVmlldyhOU1ZpZXcqIHZpZXcpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5icmlkZ2UoKTsKLSAgICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNwb25k
ZXIgPSBbYnJpZGdlIGZpcnN0UmVzcG9uZGVyXTsKKyAgICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNw
b25kZXIgPSBjbGllbnQoKS0+Zmlyc3RSZXNwb25kZXIoKTsKICAgICBpZiAoZmlyc3RSZXNwb25k
ZXIgPT0gdmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFbdmlldyB3aW5kb3ddIHx8
ICFbdmlldyBzdXBlcnZpZXddIHx8ICFbdmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbYnJpZGdlIG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3XTsKKyAg
ICBjbGllbnQoKS0+bWFrZUZpcnN0UmVzcG9uZGVyKHZpZXcpOwogCiAgICAgLy8gU2V0dGluZyBm
b2N1cyBjYW4gYWN0dWFsbHkgY2F1c2UgYSBzdHlsZSBjaGFuZ2Ugd2hpY2ggbWlnaHQKICAgICAv
LyByZW1vdmUgdGhlIHZpZXcgZnJvbSBpdHMgc3VwZXJ2aWV3IHdoaWxlIGl0J3MgYmVpbmcgbWFk
ZQogICAgIC8vIGZpcnN0IHJlc3BvbmRlci4gVGhpcyBjb25mdXNlcyBBcHBLaXQgc28gd2UgbXVz
dCByZXN0b3JlCiAgICAgLy8gdGhlIG9sZCBmaXJzdCByZXNwb25kZXIuCiAgICAgaWYgKCFbdmll
dyBzdXBlcnZpZXddKQotICAgICAgICBbYnJpZGdlIG1ha2VGaXJzdFJlc3BvbmRlcjpmaXJzdFJl
c3BvbmRlcl07CisgICAgICAgIGNsaWVudCgpLT5tYWtlRmlyc3RSZXNwb25kZXIoZmlyc3RSZXNw
b25kZXIpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorS2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50OjprZXlib2FyZFVJTW9k
ZSgpCit7CisgICAgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsKK30KKworTlNSZXNwb25k
ZXIgKkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIoKQoreworICAgIHJldHVybiBuaWw7Cit9
CiAKK3ZvaWQgQ2hyb21lQ2xpZW50OjptYWtlRmlyc3RSZXNwb25kZXIoTlNSZXNwb25kZXIgKikK
K3sKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVD
aG9vc2VyPikKK3sKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OndpbGxQb3BVcE1lbnUoTlNNZW51
ICopCit7Cit9CisKK2pvYmplY3QgQ2hyb21lQ2xpZW50OjpqYXZhQXBwbGV0KE5TVmlldyAqKQor
eworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogCiAjaW5jbHVkZSAiQmxvY2tFeGNlcHRpb25z
LmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWFjLmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpA
QCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZUZyYW1lQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTA1LDcgKzEw
NSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNUb0xpCiAKIGJvb2wg
RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29u
c3QKIHsKLSAgICBLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSA9IFttX2ZyYW1lLT5icmlk
Z2UoKSBrZXlib2FyZFVJTW9kZV07CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEtleWJvYXJkVUlN
b2RlIGtleWJvYXJkVUlNb2RlID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5rZXlib2FyZFVJ
TW9kZSgpOwogICAgIGJvb2wgaGFuZGxpbmdPcHRpb25UYWIgPSBpc0tleWJvYXJkT3B0aW9uVGFi
KGV2ZW50KTsKIAogICAgIC8vIElmIHRhYi10by1saW5rcyBpcyBvZmYsIG9wdGlvbi10YWIgYWx3
YXlzIGhpZ2hsaWdodHMgYWxsIGNvbnRyb2xzCkBAIC0yMzgsMTEgKzI0MiwxNSBAQCBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKLSAgICBpZiAoW21fZnJhbWUtPmJyaWRnZSgpIGZpcnN0UmVzcG9uZGVyXSAh
PSB2aWV3KSB7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHBhZ2UtPmNocm9tZSgpLT5jbGll
bnQoKS0+Zmlyc3RSZXNwb25kZXIoKSAhPSB2aWV3KSB7CiAgICAgICAgIC8vIE5vcm1hbGx5IFtO
U1dpbmRvdyBzZW5kRXZlbnQ6XSBoYW5kbGVzIHNldHRpbmcgdGhlIGZpcnN0IHJlc3BvbmRlci4K
ICAgICAgICAgLy8gQnV0IGluIG91ciBjYXNlLCB0aGUgZXZlbnQgd2FzIHNlbnQgdG8gdGhlIHZp
ZXcgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgd2ViIHBhZ2UuCiAgICAgICAgIGlmIChbY3VycmVu
dEV2ZW50KCkuZ2V0KCkgY2xpY2tDb3VudF0gPD0gMSAmJiBbdmlldyBhY2NlcHRzRmlyc3RSZXNw
b25kZXJdICYmIFt2aWV3IG5lZWRzUGFuZWxUb0JlY29tZUtleV0pCi0gICAgICAgICAgICBbbV9m
cmFtZS0+YnJpZGdlKCkgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXddOworICAgICAgICAgICAgcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5tYWtlRmlyc3RSZXNwb25kZXIodmlldyk7CiAgICAgfQog
CiAgICAgLy8gV2UgbmVlZCB0byAiZGVmZXIgbG9hZGluZyIgd2hpbGUgdHJhY2tpbmcgdGhlIG1v
dXNlLCBiZWNhdXNlIHRlYXJpbmcgZG93biB0aGUKQEAgLTI1Miw5ICsyNjAsOSBAQCBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAgICAgLy8gbW91c2UuIFdlIHNob3Vs
ZCBjb25maXJtIHRoYXQsIGFuZCB0aGVuIHJlbW92ZSB0aGUgZGVmZXJyc0xvYWRpbmcKICAgICAv
LyBoYWNrIGVudGlyZWx5LgogICAgIAotICAgIGJvb2wgd2FzRGVmZXJyaW5nTG9hZGluZyA9IG1f
ZnJhbWUtPnBhZ2UoKS0+ZGVmZXJzTG9hZGluZygpOworICAgIGJvb2wgd2FzRGVmZXJyaW5nTG9h
ZGluZyA9IHBhZ2UtPmRlZmVyc0xvYWRpbmcoKTsKICAgICBpZiAoIXdhc0RlZmVycmluZ0xvYWRp
bmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAg
ICAgICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKIAogICAgIEFTU0VSVCghbV9zZW5k
aW5nRXZlbnRUb1N1YnZpZXcpOwogICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gdHJ1ZTsK
QEAgLTI2Miw3ICsyNzAsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50
VG9XCiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKICAgICAKICAgICBpZiAo
IXdhc0RlZmVycmluZ0xvYWRpbmcpCi0gICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJz
TG9hZGluZyhmYWxzZSk7CisgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwog
CiAgICAgLy8gUmVtZW1iZXIgd2hpY2ggdmlldyB3ZSBzZW50IHRoZSBldmVudCB0bywgc28gd2Ug
Y2FuIGRpcmVjdCB0aGUgcmVsZWFzZSBldmVudCBwcm9wZXJseS4KICAgICBtX21vdXNlRG93blZp
ZXcgPSB2aWV3OwpAQCAtNTM1LDYgKzU0MywxMCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VV
cChOU0V2ZW50ICpldmVuCiAgKi8KIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kRmFrZUV2ZW50c0Fm
dGVyV2lkZ2V0VHJhY2tpbmcoTlNFdmVudCAqaW5pdGlhdGluZ0V2ZW50KQogeworICAgIEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybjsKKwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIG1fc2VuZGlu
Z0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7CkBAIC01NDMsMzQgKzU1NSwzNCBAQCB2b2lkIEV2ZW50
SGFuZGxlcjo6c2VuZEZha2VFdmVudHNBZnRlcldpCiAgICAgICAgIE5TRXZlbnQgKmZha2VFdmVu
dCA9IG5pbDsKICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBOU0xlZnRNb3VzZURvd24pIHsKICAg
ICAgICAgICAgIGZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xlZnRN
b3VzZVVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpbaW5p
dGlhdGluZ0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVyRmxhZ3M6W2luaXRpYXRpbmdFdmVudCBtb2RpZmllckZsYWdzXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZl
bnQgdGltZXN0YW1wXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1i
ZXI6W2luaXRpYXRpbmdFdmVudCB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dDpbaW5pdGlhdGluZ0V2ZW50IGNvbnRleHRdCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjpbaW5pdGlhdGluZ0V2
ZW50IGV2ZW50TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xp
Y2tDb3VudDpbaW5pdGlhdGluZ0V2ZW50IGNsaWNrQ291bnRdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVzc3VyZTpbaW5pdGlhdGluZ0V2ZW50IHByZXNzdXJlXV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246W2luaXRp
YXRpbmdFdmVudCBsb2NhdGlvbkluV2luZG93XQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2RpZmllckZsYWdzOltpbml0aWF0aW5nRXZlbnQgbW9kaWZpZXJGbGFnc10K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbaW5p
dGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpbmRvd051bWJlcjpbaW5pdGlhdGluZ0V2ZW50IHdpbmRvd051bWJlcl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpbaW5pdGlhdGlu
Z0V2ZW50IGNvbnRleHRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnROdW1iZXI6W2luaXRpYXRpbmdFdmVudCBldmVudE51bWJlcl0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tDb3VudDpbaW5pdGlhdGluZ0V2ZW50IGNs
aWNrQ291bnRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
c3N1cmU6W2luaXRpYXRpbmdFdmVudCBwcmVzc3VyZV1dOwogICAgICAgICAKICAgICAgICAgICAg
IFtOU0FwcCBwb3N0RXZlbnQ6ZmFrZUV2ZW50IGF0U3RhcnQ6WUVTXTsKICAgICAgICAgfSBlbHNl
IHsgLy8gZXZlbnRUeXBlID09IE5TS2V5RG93bgogICAgICAgICAgICAgZmFrZUV2ZW50ID0gW05T
RXZlbnQga2V5RXZlbnRXaXRoVHlwZTpOU0tleVVwCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbjpbaW5pdGlhdGluZ0V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbaW5pdGlhdGluZ0V2
ZW50IG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVzdGFtcDpbaW5pdGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2luZG93TnVtYmVyOltpbml0aWF0aW5nRXZlbnQgd2luZG93TnVtYmVyXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W2luaXRpYXRpbmdF
dmVudCBjb250ZXh0XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3Rl
cnM6W2luaXRpYXRpbmdFdmVudCBjaGFyYWN0ZXJzXSAKLSAgICAgICAgICAgICAgICAgY2hhcmFj
dGVyc0lnbm9yaW5nTW9kaWZpZXJzOltpbml0aWF0aW5nRXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzXSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBUmVwZWF0
Oltpbml0aWF0aW5nRXZlbnQgaXNBUmVwZWF0XSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrZXlDb2RlOltpbml0aWF0aW5nRXZlbnQga2V5Q29kZV1dOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpbaW5pdGlhdGluZ0V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllckZsYWdzOltpbml0aWF0aW5nRXZlbnQgbW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W2luaXRpYXRpbmdFdmVudCB0
aW1lc3RhbXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVt
YmVyOltpbml0aWF0aW5nRXZlbnQgd2luZG93TnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpbaW5pdGlhdGluZ0V2ZW50IGNvbnRleHRdCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOltpbml0aWF0
aW5nRXZlbnQgY2hhcmFjdGVyc10gCisgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyc0ln
bm9yaW5nTW9kaWZpZXJzOltpbml0aWF0aW5nRXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FSZXBlYXQ6
W2luaXRpYXRpbmdFdmVudCBpc0FSZXBlYXRdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2V5Q29kZTpbaW5pdGlhdGluZ0V2ZW50IGtleUNvZGVdXTsKICAgICAg
ICAgICAgIFtOU0FwcCBwb3N0RXZlbnQ6ZmFrZUV2ZW50IGF0U3RhcnQ6WUVTXTsKICAgICAgICAg
fQotICAgICAgICAvLyBGSVhNRTogIFdlIHNob3VsZCByZWFsbHkgZ2V0IHRoZSBjdXJyZW50IG1v
ZGlmaWVyRmxhZ3MgaGVyZSwgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIHBvbGwKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkgZ2V0IHRoZSBjdXJyZW50IG1vZGlmaWVyRmxhZ3MgaGVy
ZSwgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIHBvbGwKICAgICAgICAgLy8gdGhlbSBpbiBDb2NvYSwg
YW5kIGJlY2F1c2UgdGhlIGV2ZW50IHN0cmVhbSB3YXMgc3RvbGVuIGJ5IHRoZSBDYXJib24gbWVu
dSBjb2RlIHdlIGhhdmUKICAgICAgICAgLy8gbm8gdXAtdG8tZGF0ZSBjYWNoZSBvZiB0aGVtIGFu
eXdoZXJlLgogICAgICAgICBmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6
TlNNb3VzZU1vdmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbjpbW21fZnJhbWUtPmJyaWRnZSgpIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNF
dmVudCBtb3VzZUxvY2F0aW9uXV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uOltbdmlldy0+Z2V0VmlldygpIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFz
ZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2RpZmllckZsYWdzOltpbml0aWF0aW5nRXZlbnQgbW9kaWZpZXJGbGFnc10KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZl
bnQgdGltZXN0YW1wXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dO
dW1iZXI6W2luaXRpYXRpbmdFdmVudCB3aW5kb3dOdW1iZXJdCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMu
bW0JKHJldmlzaW9uIDMwNzEyKQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChh
cEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkNTU0hlbHBlci5oIgogI2ltcG9ydCAiQ2FjaGUuaCIK
ICNpbXBvcnQgIkNocm9tZS5oIgorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJD
bGlwYm9hcmRFdmVudC5oIgogI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgiCiAjaW1wb3J0ICJDb2xv
ck1hYy5oIgpAQCAtOTMsOSArOTQsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvTlBfanNv
YmplY3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZV9pbXBsLmg+CiAKLSN1
bmRlZiBfd2ViY29yZV9USU1JTkcKLQotQGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z0luKQor
QGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z2luKQogLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0
OwogLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0OwogQGVuZApAQCAt
NDkzLDExICs0OTIsNiBAQCBOU1dyaXRpbmdEaXJlY3Rpb24gRnJhbWU6OmJhc2VXcml0aW5nRGly
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBGcmFtZTo6aXNzdWVQYXN0ZUNvbW1hbmQo
KQotewotICAgIFtkLT5tX2JyaWRnZSBpc3N1ZVBhc3RlQ29tbWFuZF07Ci19Ci0KIGNvbnN0IHNo
b3J0IGVuYWJsZVJvbWFuS2V5Ym9hcmRzT25seSA9IC0yMzsKIHZvaWQgRnJhbWU6OnNldFVzZVNl
Y3VyZUtleWJvYXJkRW50cnkoYm9vbCBlbmFibGUpCiB7CkBAIC01NjAsMjcgKzU1NCw2IEBAIE5T
TXV0YWJsZURpY3Rpb25hcnkqIEZyYW1lOjpkYXNoYm9hcmRSZWcKICAgICByZXR1cm4gd2ViUmVn
aW9uczsKIH0KIAotdm9pZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkgKndlYlJlZ2lvbnMgPSBkYXNoYm9hcmRSZWdpb25zRGljdGlv
bmFyeSgpOwotICAgIFtkLT5tX2JyaWRnZSBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZDp3ZWJSZWdp
b25zXTsKLX0KLQotdm9pZCBGcmFtZTo6d2lsbFBvcHVwTWVudShOU01lbnUgKiBtZW51KQotewot
ICAgIFtkLT5tX2JyaWRnZSB3aWxsUG9wdXBNZW51Om1lbnVdOwotfQotCi1GbG9hdFJlY3QgRnJh
bWU6OmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gW2QtPm1f
YnJpZGdlIGN1c3RvbUhpZ2hsaWdodFJlY3Q6dHlwZSBmb3JMaW5lOmxpbmVSZWN0IHJlcHJlc2Vu
dGVkTm9kZTpub2RlXTsKLX0KLQotdm9pZCBGcmFtZTo6cGFpbnRDdXN0b21IaWdobGlnaHQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgbGluZVJlY3QsIGJvb2wgdGV4dCwgYm9vbCBsaW5lLCBOb2RlKiBub2RlKQotewot
ICAgIFtkLT5tX2JyaWRnZSBwYWludEN1c3RvbUhpZ2hsaWdodDp0eXBlIGZvckJveDpib3hSZWN0
IG9uTGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OnRleHQgZW50aXJlTGluZTpsaW5lIHJlcHJlc2Vu
dGVkTm9kZTpub2RlXTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxl
Y3Rpb24oKSAKIHsKICAgICBpZiAoIXNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNSYW5nZSgpKQpA
QCAtNTg4LDI1ICs1NjEsMjYgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxl
Y3RpbwogICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgpOwogfQogCi0KIEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2ViQ29yZTo6
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgTlNWaWV3KiBhVmlldyA9IHdpZGdldC0+Z2V0Vmlldygp
OwotICAgIGlmICghYVZpZXcpCisgICAgTlNWaWV3KiB3aWRnZXRWaWV3ID0gd2lkZ2V0LT5nZXRW
aWV3KCk7CisgICAgaWYgKCF3aWRnZXRWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHZv
aWQqIG5hdGl2ZUhhbmRsZSA9IGFWaWV3OworICAgIHZvaWQqIG5hdGl2ZUhhbmRsZSA9IHdpZGdl
dFZpZXc7CiAgICAgQ3JlYXRlUm9vdE9iamVjdEZ1bmN0aW9uIGNyZWF0ZVJvb3RPYmplY3QgPSBS
b290T2JqZWN0OjpjcmVhdGVSb290T2JqZWN0KCk7CiAgICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QgPSBjcmVhdGVSb290T2JqZWN0KG5hdGl2ZUhhbmRsZSk7CiAKLSAgICBpZiAoW2FW
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2JqZWN0Rm9yV2ViU2NyaXB0KV0pIHsK
LSAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW2FWaWV3IG9iamVjdEZvcldlYlNjcmlw
dF07CisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2Jq
ZWN0Rm9yV2ViU2NyaXB0KV0pIHsKKyAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW3dp
ZGdldFZpZXcgb2JqZWN0Rm9yV2ViU2NyaXB0XTsKICAgICAgICAgaWYgKG9iamVjdEZvcldlYlNj
cmlwdCkKICAgICAgICAgICAgIHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1
YWdlSW5zdGFuY2UoSW5zdGFuY2U6Ok9iamVjdGl2ZUNMYW5ndWFnZSwgb2JqZWN0Rm9yV2ViU2Ny
aXB0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxz
ZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2Ny
aXB0YWJsZU9iamVjdCldKSB7CisgICAgfQorCisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCldKSB7CiAj
aWYgVVNFKE5QT0JKRUNUKQotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBbYVZpZXcgY3Jl
YXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdF07CisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9
IFt3aWRnZXRWaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdOwogICAgICAgICBpZiAo
bnBPYmplY3QpIHsKICAgICAgICAgICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3RhbmNlOjpj
cmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShJbnN0YW5jZTo6Q0xhbmd1YWdlLCBucE9i
amVjdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwogCkBAIC02MTgsMjIgKzU5MiwxNyBAQCBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIGpvYmplY3QgYXBwbGV0OwotICAgIAorICAgIFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8vIEdl
dCBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBKYXZhIGFwcGxldCBpbnN0YW5jZS4KLSAgICBpZiAo
W2QtPm1fYnJpZGdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZ2V0QXBwbGV0SW5WaWV3
OildKQotICAgICAgICBhcHBsZXQgPSBbZC0+bV9icmlkZ2UgZ2V0QXBwbGV0SW5WaWV3OmFWaWV3
XTsKLSAgICBlbHNlCi0gICAgICAgIGFwcGxldCA9IFtkLT5tX2JyaWRnZSBwb2xsRm9yQXBwbGV0
SW5WaWV3OmFWaWV3XTsKLSAgICAKLSAgICBpZiAoYXBwbGV0KSB7Ci0gICAgICAgIC8vIFdyYXAg
dGhlIEphdmEgaW5zdGFuY2UgaW4gYSBsYW5ndWFnZSBuZXV0cmFsIGJpbmRpbmcgYW5kIGhhbmQK
LSAgICAgICAgLy8gb2ZmIG93bmVyc2hpcCB0byB0aGUgQVBQTEVUIGVsZW1lbnQuCi0gICAgICAg
IEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJ
bnN0YW5jZShJbnN0YW5jZTo6SmF2YUxhbmd1YWdlLCBhcHBsZXQsIHJvb3RPYmplY3QucmVsZWFz
ZSgpKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
MDsKKyAgICBqb2JqZWN0IGFwcGxldCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+amF2YUFw
cGxldCh3aWRnZXRWaWV3KTsKKyAgICBpZiAoIWFwcGxldCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyBXcmFwIHRoZSBKYXZhIGluc3RhbmNlIGluIGEgbGFuZ3VhZ2UgbmV1dHJhbCBiaW5k
aW5nIGFuZCBoYW5kIG9mZiBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICByZXR1cm4gSW5z
dGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNlKEluc3RhbmNlOjpKYXZhTGFu
Z3VhZ2UsIGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwogfQogCiBXZWJTY3JpcHRPYmpl
Y3QqIEZyYW1lOjp3aW5kb3dTY3JpcHRPYmplY3QoKQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2Vi
Q29yZUZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzLDM3ICsyMywxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lt
cG9ydCA8Q29jb2EvQ29jb2EuaD4KLSNpbXBvcnQgPEphdmFWTS9qbmkuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRBY3Rp
b24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRBZmZpbml0
eS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KIAotI2lmIFVTRShOUE9C
SkVDVCkKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZS5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBIVE1MRnJhbWVP
d25lckVsZW1lbnQ7Ci0gICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBTdHJpbmc7Ci19Ci0KIEBj
bGFzcyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogQGNsYXNzIERPTURvY3VtZW50OwogQGNsYXNz
IERPTURvY3VtZW50RnJhZ21lbnQ7CiBAY2xhc3MgRE9NRWxlbWVudDsKLUBjbGFzcyBET01IVE1M
SW5wdXRFbGVtZW50OwotQGNsYXNzIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ7CiBAY2xhc3MgRE9N
Tm9kZTsKIEBjbGFzcyBET01SYW5nZTsKLUBjbGFzcyBOU01lbnU7Ci0KLUBwcm90b2NvbCBXZWJD
b3JlUmVuZGVyVHJlZUNvcGllcjsKIAogZW51bSBXZWJDb3JlRGV2aWNlVHlwZSB7CiAgICAgV2Vi
Q29yZURldmljZVNjcmVlbiwKQEAgLTc0LDkgKzUzLDggQEAgZW51bSBXZWJTY3JvbGxHcmFudWxh
cml0eSB7CiAgICAgV2ViU2Nyb2xsV2hlZWwKIH07CiAKLUBwcm90b2NvbCBXZWJDb3JlT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIgPE5TT2JqZWN0PgotLSAodm9pZCljaG9vc2VGaWxlbmFtZTooTlNT
dHJpbmcgKilmaWxlTmFtZTsKLS0gKHZvaWQpY2FuY2VsOworQHByb3RvY29sIFdlYkNvcmVSZW5k
ZXJUcmVlQ29waWVyIDxOU09iamVjdD4KKy0gKE5TT2JqZWN0ICopbm9kZVdpdGhOYW1lOihOU1N0
cmluZyAqKW5hbWUgcG9zaXRpb246KE5TUG9pbnQpcG9zaXRpb24gcmVjdDooTlNSZWN0KXJlY3Qg
dmlldzooTlNWaWV3ICopdmlldyBjaGlsZHJlbjooTlNBcnJheSAqKWNoaWxkcmVuOwogQGVuZAog
CiAvLyBXZWJDb3JlRnJhbWVCcmlkZ2Ugb2JqZWN0cyBhcmUgdXNlZCBieSBXZWJDb3JlIHRvIGFi
c3RyYWN0IGF3YXkgb3BlcmF0aW9ucyB0aGF0IG5lZWQKQEAgLTg4LDggKzY2LDcgQEAgZW51bSBX
ZWJTY3JvbGxHcmFudWxhcml0eSB7CiAKIC8vIFRoZSBXZWJDb3JlRnJhbWVCcmlkZ2UgaW50ZXJm
YWNlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHVzZSBieSB0aGUgbm9uLVdlYkNvcmUgc2lkZSBvZiB0
aGUgYnJpZGdlLgogCi1AaW50ZXJmYWNlIFdlYkNvcmVGcmFtZUJyaWRnZSA6IE5TT2JqZWN0Ci17
CitAaW50ZXJmYWNlIFdlYkNvcmVGcmFtZUJyaWRnZSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMKICAg
ICBXZWJDb3JlOjpGcmFtZSogbV9mcmFtZTsKICAgICBCT09MIF9zaG91bGRDcmVhdGVSZW5kZXJl
cnM7CkBAIC0yMDksNDYgKzE4NiwzIEBAIGVudW0gV2ViU2Nyb2xsR3JhbnVsYXJpdHkgewogLSAo
dm9pZClyZWNlaXZlZERhdGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29kaW5nTmFtZTooTlNTdHJp
bmcgKil0ZXh0RW5jb2RpbmdOYW1lOwogCiBAZW5kCi0KLS8vIFRoZSBXZWJDb3JlRnJhbWVCcmlk
Z2UgcHJvdG9jb2wgY29udGFpbnMgbWV0aG9kcyBmb3IgdXNlIGJ5IHRoZSBXZWJDb3JlIHNpZGUg
b2YgdGhlIGJyaWRnZS4KLQotQHByb3RvY29sIFdlYkNvcmVGcmFtZUJyaWRnZQotCi0tIChOU1dp
bmRvdyAqKXdpbmRvdzsKLQotLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcjsKLS0gKHZv
aWQpbWFrZUZpcnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRlciAqKXJlc3BvbmRlcjsKLQotLSAodm9p
ZClydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3RlbmVyOihpZCA8V2ViQ29y
ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lcjsKLQotLSAoam9iamVjdCln
ZXRBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXc7Ci0KLS8vIERlcHJlY2F0ZWQsIHVzZSBnZXRB
cHBsZXRJblZpZXc6IGluc3RlYWQuCi0tIChqb2JqZWN0KXBvbGxGb3JBcHBsZXRJblZpZXc6KE5T
VmlldyAqKXZpZXc7Ci0KLS0gKHZvaWQpaXNzdWVQYXN0ZUNvbW1hbmQ7Ci0KLS0gKHZvaWQpc2V0
SXNTZWxlY3RlZDooQk9PTClpc1NlbGVjdGVkIGZvclZpZXc6KE5TVmlldyAqKXZpZXc7Ci0KLS0g
KHZvaWQpZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6KE5TTXV0YWJsZURpY3Rpb25hcnkgKilyZWdp
b25zOwotLSAodm9pZCl3aWxsUG9wdXBNZW51OihOU01lbnUgKiltZW51OwotCi0tIChOU1JlY3Qp
Y3VzdG9tSGlnaGxpZ2h0UmVjdDooTlNTdHJpbmcqKXR5cGUgZm9yTGluZTooTlNSZWN0KWxpbmVS
ZWN0IHJlcHJlc2VudGVkTm9kZTooV2ViQ29yZTo6Tm9kZSAqKW5vZGU7Ci0tICh2b2lkKXBhaW50
Q3VzdG9tSGlnaGxpZ2h0OihOU1N0cmluZyopdHlwZSBmb3JCb3g6KE5TUmVjdClib3hSZWN0IG9u
TGluZTooTlNSZWN0KWxpbmVSZWN0IGJlaGluZFRleHQ6KEJPT0wpdGV4dCBlbnRpcmVMaW5lOihC
T09MKWxpbmUgcmVwcmVzZW50ZWROb2RlOihXZWJDb3JlOjpOb2RlICopbm9kZTsKLQotLSAoV2Vi
Q29yZTo6S2V5Ym9hcmRVSU1vZGUpa2V5Ym9hcmRVSU1vZGU7Ci0KLUBlbmQKLQotLy8gVGhpcyBp
bnRlcmZhY2UgZGVmaW5pdGlvbiBhbGxvd3MgdGhvc2Ugd2hvIGhvbGQgYSBXZWJDb3JlRnJhbWVC
cmlkZ2UgKiB0byBjYWxsIGFsbCB0aGUgbWV0aG9kcwotLy8gaW4gdGhlIFdlYkNvcmVGcmFtZUJy
aWRnZSBwcm90b2NvbCB3aXRob3V0IHJlcXVpcmluZyB0aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiB0
byBzdXBwbHkgdGhlIG1ldGhvZHMuCi0vLyBUaGlzIGlkaW9tIGlzIGFwcHJvcHJpYXRlIGJlY2F1
c2UgV2ViQ29yZUZyYW1lQnJpZGdlIGlzIGFuIGFic3RyYWN0IGNsYXNzLgotCi1AaW50ZXJmYWNl
IFdlYkNvcmVGcmFtZUJyaWRnZSAoU3ViY2xhc3NSZXNwb25zaWJpbGl0eSkgPFdlYkNvcmVGcmFt
ZUJyaWRnZT4KLUBlbmQKLQotLy8gUHJvdG9jb2xzIHRoYXQgbWFrZSB1cCBwYXJ0IG9mIHRoZSBp
bnRlcmZhY2VzIGFib3ZlLgotCi1AcHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXIgPE5T
T2JqZWN0PgotLSAoTlNPYmplY3QgKilub2RlV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBwb3Np
dGlvbjooTlNQb2ludClwIHJlY3Q6KE5TUmVjdClyZWN0IHZpZXc6KE5TVmlldyAqKXZpZXcgY2hp
bGRyZW46KE5TQXJyYXkgKiljaGlsZHJlbjsKLUBlbmQKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2Vi
Q29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCiAjaW1wb3J0ICJDU1NIZWxwZXIuaCIKICNpbXBvcnQg
IkNhY2hlLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNsaXBib2FyZE1h
Yy5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkRPTUltcGxlbWVudGF0aW9uLmgi
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOSArMzMsMjAg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAoraW5saW5lIEZpbGVDaG9vc2VyOjpGaWxl
Q2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9maWxlbmFtZShmaWxlbmFtZSkKKyAg
ICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKK3sKK30KKwogUGFzc1JlZlB0cjxGaWxl
Q2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIHJldHVybiBuZXcgRmlsZUNob29zZXIoY2xp
ZW50LCBmaWxlbmFtZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlQ2hvb3NlcihjbGll
bnQsIGZpbGVuYW1lKSk7Cit9CisKK0ZpbGVDaG9vc2VyOjp+RmlsZUNob29zZXIoKQorewogfQog
CiB2b2lkIEZpbGVDaG9vc2VyOjpjbGVhcigpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCShy
ZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTYgKzMxLDYgQEAKICNkZWZpbmUgRmlsZUNob29zZXJf
aAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lmZGVm
IF9fT0JKQ19fCi1AY2xhc3MgT3BlblBhbmVsQ29udHJvbGxlcjsKLSNlbHNlCi1jbGFzcyBPcGVu
UGFuZWxDb250cm9sbGVyOwotI2VuZGlmCi0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC02NCw4ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBJdCdzIGEgbGF5ZXJp
bmcgdmlvbGF0aW9uIHRoYXQgd2UgcGFzcyBhIERvY3VtZW50IGluIGhlcmUuCiAgICAgLy8gVGhl
IHBsYXRmb3JtIGRpcmVjdG9yeSBpcyB1bmRlcm5lYXRoIHRoZSBET00sIHNvIGl0IGNhbid0IHVz
ZSB0aGUgRE9NLgotICAgIC8vIEJlY2F1c2Ugb2YgVUkgZGVsZWdhdGVzLCBpdCdzIG5vdCBjbGVh
ciB0aGF0IHRoaXMgY2xhc3MgYmVsb25ncyBpbiB0aGUgcGxhdGZvcm0KLSAgICAvLyBsYXllciBh
dCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdzaWRlIHRoZSBDaHJvbWUgY2xhc3MgaW5z
dGVhZC4KKyAgICAvLyBCZWNhdXNlIG9mIFVJIGRlbGVnYXRlcywgaXQncyBub3QgY2xlYXIgdGhh
dCB0aGUgRmlsZUNob29zZXIgY2xhc3MKKyAgICAvLyBiZWxvbmdzIGluIHRoZSBwbGF0Zm9ybSBs
YXllciBhdCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdzaWRlCisgICAgLy8gdGhlIENo
cm9tZSBjbGFzcyBpbnN0ZWFkLgogICAgIHZvaWQgb3BlbkZpbGVDaG9vc2VyKERvY3VtZW50Kik7
CiAKICAgICBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFt
ZTsgfQpAQCAtODQsMTAgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBGaWxlQ2hvb3NlckNsaWVudCog
bV9jbGllbnQ7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAgICAgUmVmUHRyPEljb24+IG1faWNv
bjsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8T3BlblBhbmVsQ29udHJvbGxl
cj4gbV9jb250cm9sbGVyOwotI2VuZGlmCiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRmlsZUNob29zZXJHdGsuY3BwCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVDaG9vc2VyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTggKzU2LDYg
QEAgc3RhdGljIGJvb2wgc3RyaW5nQnlBZG9wdGluZ0ZpbGVTeXN0ZW1SZQogICAgIHJldHVybiB0
cnVlOwogfQogCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29zZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNvdW50ZWQ8RmlsZUNob29z
ZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZpbGVuYW1lKGZpbGVuYW1l
KQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotewotfQotCi1GaWxlQ2hvb3Nl
cjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9v
c2VyKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVu
dC0+dmlldygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZUNob29zZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZUNob29zZXJNYWMubW0JKHJl
dmlzaW9uIDMwNzEyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmlsZUNob29zZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDg2ICszMCwyNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJGaWxl
Q2hvb3Nlci5oIgogCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50
LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBv
cnQgIkljb24uaCIKICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbXBvcnQgIlBhZ2Uu
aCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJTdHJpbmdUcnVuY2F0b3Iu
aCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotQGludGVyZmFjZSBXZWJDb3JlT3BlblBhbmVsQ29udHJvbGxlciA6IE5TT2JqZWN0
IDxXZWJDb3JlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IHsKLSAgICBGaWxlQ2hvb3NlciAqX2Zp
bGVDaG9vc2VyOwotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqX2JyaWRnZTsKLX0KLS0gKGlkKWlu
aXRXaXRoRmlsZUNob29zZXI6KEZpbGVDaG9vc2VyICopZmlsZUNob29zZXI7Ci0tICh2b2lkKWRp
c2Nvbm5lY3RGaWxlQ2hvb3NlcjsKLS0gKHZvaWQpYmVnaW5TaGVldFdpdGhGcmFtZTooRnJhbWUq
KWZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZU9wZW5QYW5lbENvbnRyb2xs
ZXIKLQotLSAoaWQpaW5pdFdpdGhGaWxlQ2hvb3NlcjooRmlsZUNob29zZXIgKilmaWxlQ2hvb3Nl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgX2ZpbGVDaG9vc2VyID0gZmlsZUNob29zZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdEZpbGVDaG9vc2VyCi17Ci0gICAgX2ZpbGVD
aG9vc2VyID0gMDsKLX0KLQotLSAodm9pZCliZWdpblNoZWV0V2l0aEZyYW1lOihGcmFtZSopZnJh
bWUKLXsKLSAgICBpZiAoIV9maWxlQ2hvb3NlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IF9icmlkZ2UgPSBmcmFtZS0+YnJpZGdlKCk7Ci0gICAgW19icmlkZ2UgcmV0YWluXTsKLSAgICBb
X2JyaWRnZSBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3RlbmVyOnNlbGZd
OwotfQotCi0tICh2b2lkKWNob29zZUZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lCi17Ci0g
ICAgaWYgKF9maWxlQ2hvb3NlcikKLSAgICAgICAgX2ZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlKGZp
bGVuYW1lKTsKLSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQotLSAodm9pZCljYW5jZWwKLXsK
LSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQotQGVuZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29zZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+
KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKQot
ICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotICAgICwgbV9jb250cm9sbGVyKEFk
b3B0TlMsIFtbV2ViQ29yZU9wZW5QYW5lbENvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRmlsZUNo
b29zZXI6dGhpc10pCi17Ci19Ci0KLUZpbGVDaG9vc2VyOjp+RmlsZUNob29zZXIoKQotewotICAg
IFttX2NvbnRyb2xsZXIuZ2V0KCkgZGlzY29ubmVjdEZpbGVDaG9vc2VyXTsKLX0KLQogdm9pZCBG
aWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIFttX2NvbnRyb2xs
ZXIuZ2V0KCkgYmVnaW5TaGVldFdpdGhGcmFtZTpmcmFtZV07CisgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cnVuT3BlblBhbmVsKHRoaXMpOwog
fQogCiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYgZm9u
dCwgaW50IHdpZHRoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5t
bQkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwx
NCArMjAsMTYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUG9wdXBNZW51LmgiCiAK
KyNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiRXZlbnRIYW5kbGVyLmgiCi0jaW1w
b3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1l
Vmlldy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MT3B0R3JvdXBFbGVt
ZW50LmgiCiAjaW1wb3J0ICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTE1MSw3ICsxNTMsOCBAQCB2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0
JiByLCBGCiAgICAgW3ZpZXcgYWRkU3VidmlldzpkdW1teVZpZXcuZ2V0KCldOwogICAgIGxvY2F0
aW9uID0gW2R1bW15Vmlldy5nZXQoKSBjb252ZXJ0UG9pbnQ6bG9jYXRpb24gZnJvbVZpZXc6dmll
d107CiAgICAgCi0gICAgZnJhbWUtPndpbGxQb3B1cE1lbnUobWVudSk7CisgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PndpbGxQb3BVcE1lbnUobWVudSk7CiAgICAgd2tQb3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJv
dW5kZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRleCwgZm9udCk7CiAKICAgICBb
bV9wb3B1cC5nZXQoKSBkaXNtaXNzUG9wVXBdOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2lkZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1h
Yy5tbQkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NiArMjcsNyBAQAogI2ltcG9ydCAiV2lkZ2V0LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9u
cy5oIgorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBv
cnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGb250LmgiCkBAIC0zNCw3ICszNSw2IEBACiAjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgotI2ltcG9ydCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0
ICJXZWJDb3JlRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlldy5oIgogI2ltcG9ydCAi
V2lkZ2V0Q2xpZW50LmgiCkBAIC0yMzUsMTEgKzIzNSwxNiBAQCB2b2lkIFdpZGdldDo6aW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0K
IAotLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21lOyBiYWQgbGF5ZXJpbmcgdGhh
dCB0aGlzIGtub3dzIGFib3V0IEZyYW1lLgorLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8g
Q2hyb21lOyBiYWQgbGF5ZXJpbmcgdGhhdCB0aGlzIGtub3dzIGFib3V0IEZyYW1lIGFuZCBQYWdl
Lgogdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1NlbGVjdGVkKQogewotICAgIGlm
IChGcmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQodGhpcykpCi0gICAgICAgIFtm
cmFtZS0+YnJpZGdlKCkgc2V0SXNTZWxlY3RlZDppc1NlbGVjdGVkIGZvclZpZXc6Z2V0Vmlldygp
XTsKKyAgICBGcmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQodGhpcyk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgp
LT5jbGllbnQoKS0+c2V0U2VsZWN0ZWQodGhpcywgaXNTZWxlY3RlZCk7CiB9CiAKIHZvaWQgV2lk
Z2V0OjphZGRUb1N1cGVydmlldyhOU1ZpZXcgKnZpZXcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0ZpbGVDaG9vc2VyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
RmlsZUNob29zZXJRdC5jcHAJKHJldmlzaW9uIDMwNzEyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9GaWxlQ2hvb3NlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNob29z
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNvdW50
ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZpbGVu
YW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotewotfQot
Ci1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6
b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2MpCiB7CiAgICAgUGFnZSAqcGFnZSA9IGRvYy0+
cGFnZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZUNob29zZXJXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVDaG9vc2VyV2luLmNwcAkocmV2
aXNpb24gMzA3MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBSZWZDb3VudGVkPEZpbGVDaG9vc2VyPigwKQot
ICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAs
IG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKLXsKLX0KLQotRmlsZUNob29zZXI6On5GaWxl
Q2hvb3NlcigpCi17Ci19Ci0KIHZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxlQ2hvb3NlcihEb2N1
bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXco
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJl
dmlzaW9uIDMwNzEyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDYgQEAgdm9pZCBQbGF0Zm9ybVNjcm9s
bGJhcjo6dXBkYXRlVGh1bWJQb3NpdAogdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1
bWJQcm9wb3J0aW9uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIAotRmls
ZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBp
bml0aWFsRmlsZW5hbWUpIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4oMCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci0vL1Bhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZpbGVDaG9vc2VyOjpjcmVhdGUo
RmlsZUNob29zZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIGluaXRpYWxGaWxlbmFtZSkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4oKTsgfQotRmlsZUNo
b29zZXI6On5GaWxlQ2hvb3NlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGaWxlQ2hv
b3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBT
dHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0
aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDMwNzEyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDExICsyMywxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKIAorI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRp
dG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgpAQCAtNTMwLDE0ICs1MzIsMjMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dENvbXBvc2l0aW9uQmFjawogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorCiB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50IHR5LCBjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gb2JqZWN0KCktPmRvY3VtZW50KCkt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgUm9vdElubGluZUJveCogciA9IHJvb3QoKTsKICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QodHgg
KyByLT54UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHItPndpZHRoKCksIHNlbGVjdGlvbkhl
aWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGV4dFJlY3QodHggKyB4UG9zKCksIHJvb3RSZWN0Lnko
KSwgd2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogCi0gICAgb2JqZWN0KCktPmRvY3VtZW50
KCktPmZyYW1lKCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR5cGUsIHRleHRSZWN0LCByb290UmVj
dCwgdHJ1ZSwgZmFsc2UsIG9iamVjdCgpLT5ub2RlKCkpOworICAgIHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCktPm5vZGUoKSwgdHlwZSwgdGV4
dFJlY3QsIHJvb3RSZWN0LCB0cnVlLCBmYWxzZSk7CiB9CisKICNlbmRpZgogCiB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0
eCwgaW50IHR5LCBpbnQgZGVjbykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNp
b24gMzA3MTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExICsxLDkgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNSBBbGxhbiBT
YW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDUs
IDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI4LDEyICsyNiwxNCBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogCiAj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCkBAIC03MDMsMTkgKzcwMywyOCBAQCB2b2lkIFJlbmRlckJveDo6cGFp
bnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgUmVu
ZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChpbnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1
cm47CisKICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAg
Um9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAwOwogICAgIGlm
IChyKSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPnhQb3MoKSwgdHkgKyBy
LT5zZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogICAg
ICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290UmVjdC55KCksIHdpZHRoKCks
IHJvb3RSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRD
dXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCByb290UmVjdCwgYmVoaW5kVGV4dCwgZmFs
c2UsIG5vZGUoKSk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0
b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0
LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCAr
IG1feCwgdHkgKyBtX3ksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCBpbWFnZVJlY3Qs
IGJlaGluZFRleHQsIGZhbHNlLCBub2RlKCkpOworICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KG5vZGUoKSwgdHlwZSwgaW1hZ2VSZWN0LCBpbWFn
ZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlKTsKICAgICB9CiB9CisKICNlbmRpZgogCiBJbnRSZWN0
IFJlbmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0eSkKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBA
QAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaHRtbCByZW5kZXJlciBmb3IgS0RF
LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDExICsyMSwxMyBAQAogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgorI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogCkBAIC0x
MzYsMTEgKzEzNiwxOSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNCb3goUmVu
CiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgUm9vdElubGluZUJveDo6YWRkSGlnaGxp
Z2h0T3ZlcmZsb3coKQogeworICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdCgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKwog
ICAgIC8vIEhpZ2hsaWdodCBhY3RzIGFzIGEgc2VsZWN0aW9uIGluZmxhdGlvbi4KICAgICBGbG9h
dFJlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCksIHdpZHRoKCksIHNlbGVjdGlvbkhlaWdo
dCgpKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0
KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KG9iamVjdCgp
LT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QsIG9iamVjdCgpLT5ub2RlKCkpKTsKKyAg
ICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KG9iamVjdCgpLT5ub2RlKCksIG9iamVjdCgp
LT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QpKTsKICAgICBzZXRIb3Jpem9udGFsT3Zl
cmZsb3dQb3NpdGlvbnMobWluKGxlZnRPdmVyZmxvdygpLCBpbmZsYXRlZFJlY3QueCgpKSwgbWF4
KHJpZ2h0T3ZlcmZsb3coKSwgaW5mbGF0ZWRSZWN0LnJpZ2h0KCkpKTsKICAgICBzZXRWZXJ0aWNh
bE92ZXJmbG93UG9zaXRpb25zKG1pbih0b3BPdmVyZmxvdygpLCBpbmZsYXRlZFJlY3QueSgpKSwg
bWF4KGJvdHRvbU92ZXJmbG93KCksIGluZmxhdGVkUmVjdC5ib3R0b20oKSkpOwogfQpAQCAtMTUw
LDEyICsxNTgsMjAgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodAog
ICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pIHx8IG9i
amVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAorICAgIEZyYW1l
KiBmcmFtZSA9IG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEdldCB0aGUgaW5mbGF0ZWQgcmVj
dCBzbyB0aGF0IHdlIGNhbiBwcm9wZXJseSBoaXQgdGVzdC4KICAgICBGbG9hdFJlY3Qgcm9vdFJl
Y3QodHggKyB4UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHdpZHRoKCksIHNlbGVjdGlvbkhl
aWdodCgpKTsKLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gb2JqZWN0KCktPmRvY3VtZW50
KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KGhpZ2hsaWdodFR5cGUsIHJvb3RS
ZWN0LCBvYmplY3QoKS0+bm9kZSgpKTsKKyAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KG9iamVjdCgpLT5ub2Rl
KCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKICAgICBpZiAoaW5mbGF0ZWRSZWN0LmludGVy
c2VjdHMocGFpbnRJbmZvLnJlY3QpKQotICAgICAgICBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQoaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RS
ZWN0LCBmYWxzZSwgdHJ1ZSwgb2JqZWN0KCktPm5vZGUoKSk7CisgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCktPm5vZGUoKSwgaGln
aGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSk7CiB9CisKICNlbmRp
ZgogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNzEyKQorKysgV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4MiBAQAorMjAwOC0w
My0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzY0MAorICAgICAgICAgIGVsaW1pbmF0ZSBXZWJDb3JlRnJhbWVCcmlk
Z2UKKworICAgICAgICBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhlIHBhcnRzIG9mIHRoZSBicmlk
Z2UgdXNlZCBmb3IgY2FsbHMgKnRvKiBXZWJLaXQuCisgICAgICAgIE1vdmVkIHRoZSBjb2RlIGlu
dG8gV2ViVmlldywgV2ViRnJhbWVMb2FkZXJDbGllbnQsIGFuZCBXZWJDaHJvbWVDbGllbnQgZm9y
CisgICAgICAgIG5vdywgYnV0IHRoZXJlIG1pZ2h0IGJlIGFuIGV2ZW4gYmV0dGVyIGhvbWUgZm9y
IHNvbWUgb2YgaXQgbG9uZyB0ZXJtLgorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1h
bmFnZXIubW06IFR3ZWFrZWQgaW5jbHVkZXMuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFz
ZVRyYWNrZXJDbGllbnQubW06IERpdHRvLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU2VjdXJpdHlP
cmlnaW4ubW06IERpdHRvLgorICAgICAgICAqIFN0b3JhZ2UvV2ViU2VjdXJpdHlPcmlnaW5JbnRl
cm5hbC5oOiBEaXR0by4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oOiBBZGRlZCBuZXcgdmlydHVhbCBmdW5jdGlvbnMgdGhhdCByZXBsYWNlCisgICAgICAgIGJy
aWRnZSBtZXRob2RzLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQpOiBN
b3ZlZCBjb2RlIGhlcmUgZnJvbSB0aGUgYnJpZGdlLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50
OjpzZXRTZWxlY3RlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21I
aWdobGlnaHRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmtleWJvYXJk
VUlNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmZpcnN0UmVzcG9uZGVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1ha2VGaXJzdFJlc3BvbmRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d2lsbFBvcFVwTWVudSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50OjpqYXZhQXBwbGV0KTogRGl0dG8uCisgICAgICAgICgtW1dlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyIGluaXRXaXRoQ2hvb3NlcjpdKTogQWRkZWQuIFVzZWQgdG8g
d3JhcCB0aGUKKyAgICAgICAgRmlsZUNob29zZXIgc28gaXQgY2FuIGdldCBhIHJlc3VsdCBmcm9t
IHRoZSBVSSBkZWxlZ2F0ZS4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIg
ZGVhbGxvY10pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIg
ZmluYWxpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
IGNhbmNlbF0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIg
Y2hvb3NlRmlsZW5hbWU6XSk6IEFkZGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCBhbG1vc3QgZXZlcnl0aGluZy4gV2hhdCdzIGxlZnQKKyAg
ICAgICAgaXMgcmVsYXRlZCB0byBjcmVhdGluZyB0aGUgYnJpZGdlIGFuZCBjb25uZWN0ZWQgaXQg
dG8gV2ViQ29yZSwgd2hpY2ggd2lsbAorICAgICAgICBnbyBsYXRlciB3aGVuIHdlIGVsaW1pbmF0
ZSB0aGUgV2ViS2l0IHRvIFdlYkNvcmUgcGFydCBvZiB0aGUgYnJpZGdlLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtXZWJGcmFtZUJyaWRn
ZSBpbml0TWFpbkZyYW1lV2l0aFBhZ2U6ZnJhbWVOYW1lOmZyYW1lVmlldzpdKTogQ2hhbmdlZCB0
bworICAgICAgICB0YWtlIGEgY29uc3QgU3RyaW5nJiBpbnN0ZWFkIG9mIGEgTlNTdHJpbmcgKi4K
KyAgICAgICAgKC1bV2ViRnJhbWVCcmlkZ2UgaW5pdFN1YmZyYW1lV2l0aE93bmVyRWxlbWVudDpm
cmFtZU5hbWU6ZnJhbWVWaWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWVCcmlkZ2Ug
Y2xvc2VdKTogTW92ZWQgdGhlIGNvZGUgdG8gdHJhY2sgdGhlIGJyaWRnZSBjb3VudCBoZXJlCisg
ICAgICAgIGluc3RlYWQgb2YgdGhlIGRlYWxsb2MgYW5kIGZpbmFsaXplIG1ldGhvZHMuCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZCk6IFJlbW92ZWQg
c29tZSBkZWFkIGNvZGUuCisgICAgICAgIEl0IHdhcyBjYWxsaW5nIGEgbWV0aG9kIG9uIFdlYkhp
c3RvcnlJdGVtIHRoYXQgZG9lcyBub3QgZXhpc3QuIEFkZGVkIGEgRklYTUUuCisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOiBNb3ZlZCBjb2RlIGZyb20gdGhlIGJy
aWRnZSBoZXJlLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRU
eXBlKTogRGl0dG8uCisgICAgICAgIChwYXJhbWV0ZXJWYWx1ZSk6IEFkZGVkLgorICAgICAgICAo
cGx1Z2luVmlldyk6IE1vdmVkIGNvZGUgZnJvbSB0aGUgYnJpZGdlIGhlcmUuCisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKTogRGl0dG8uCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoY29yZSk6IFJld3JvdGUgdGhpcyB0byB1c2Ug
YSBzd2l0Y2ggc28gdGhhdCB0aGUgZW51bXMgaW4gV2ViQ29yZSBhbmQKKyAgICAgICAgV2ViS2l0
IFNQSSBkb24ndCBoYXZlIHRvIG1hdGNoIGV4YWN0bHkuCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZUludGVybmFsLmg6IFJlbW92ZWQgZGVjbGFyYXRpb24gb2YgYW4gdW51c2VkIGZ1bmN0aW9u
LgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbTogTW92ZWQgV2ViSFRNTFZpZXdQ
cml2YXRlIGluIGhlcmUuIFRoZXJlJ3Mgbm8KKyAgICAgICAgcmVhc29uIHRvIGhhdmUgaXQgaW4g
YSBoZWFkZXIgZmlsZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5o
OiBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZgorICAgICAgICBXZWJIVE1MVmlld1ByaXZhdGUgb3V0
IG9mIHRoaXMgZmlsZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXdQcml2YXRlLmg6
IFR3ZWFrZWQgZm9ybWF0dGluZyBhIGJpdCBhbmQgcmVtb3ZlZCB1bm5lZWRlZAorICAgICAgICBk
ZWNsYXJhdGlvbnMuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5o
OiBSZW1vdmVkIGNvbW1lbnQgYWJvdXQgc3RheWluZyBpbiBzeW5jIHdpdGgKKyAgICAgICAgV2Vi
Q29yZTsgaXQncyBub3QgcmVhbGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgYmVsb25ncyBpbiBh
biBTUEkgaGVhZGVyLCBhbmQKKyAgICAgICAgYWxzbywgSSBmaXhlZCBpdCBzbyB3ZSBkb24ndCBo
YXZlIHRvIHN0YXkgaW4gc3luYy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogQWRkZWQgY29kZSB0byBzdG9wIG9ic2VydmluZyBV
SSBtb2RlLgorICAgICAgICAoLVtXZWJWaWV3IF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVBy
ZWZlcmVuY2VzOl0pOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIHRoZSBicmlkZ2Uu
CisgICAgICAgICgtW1dlYlZpZXcgX2tleWJvYXJkVUlNb2RlXSk6IEFkZGVkLiBNb3ZlZCBoZXJl
IGZyb20gdGhlIGJyaWRnZS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOiBB
ZGRlZCBfa2V5Ym9hcmRVSU1vZGUgbWV0aG9kLgorCiAyMDA4LTAzLTAzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAzMDcx
MikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgZGF0YWJhc2VOYW1lKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25z
Q2hhbmdlZCgpOworCisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKFdlYkNvcmU6OldpZGdl
dCosIGJvb2wpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tSGlnaGxp
Z2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiB0eXBl
LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdlYkNv
cmU6OkF0b21pY1N0cmluZyYgdHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3hSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgICAgICBi
b29sIGJlaGluZFRleHQsIGJvb2wgZW50aXJlTGluZSk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OktleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CisgICAgdmlydHVhbCBOU1Jlc3BvbmRl
ciAqZmlyc3RSZXNwb25kZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVzcG9uZGVy
KE5TUmVzcG9uZGVyICopOworICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoUGFzc1JlZlB0
cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUG9wVXBNZW51
KE5TTWVudSAqKTsKKyAgICB2aXJ0dWFsIGpvYmplY3QgamF2YUFwcGxldChOU1ZpZXcgKik7CisK
IHByaXZhdGU6CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogfTsKSW5kZXg6IFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDcxMikKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxNyArMzMsMTcgQEAKICNpbXBvcnQgIldlYkVsZW1lbnREaWN0aW9uYXJ5Lmgi
CiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVZpZXcuaCIK
LSNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCi0jaW1wb3J0ICJXZWJIVE1MVmlld1ByaXZhdGUuaCIK
KyNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkphdmFQbHVnSW4u
aCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViTlNVUkxS
ZXF1ZXN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpblByaXZhdGUuaCIKKyNp
bXBvcnQgIldlYlBsdWdpbi5oIgogI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZh
dGUuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgog
I2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmls
ZUNob29zZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KQEAgLTUy
LDE1ICs1MiwzMSBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJl
cXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dp
bmRvd0ZlYXR1cmVzLmg+CiAjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgogCi1AaW50ZXJmYWNl
IE5TVmlldyAoQXBwS2l0U2VjcmV0c1dlYkJyaWRnZUtub3dzQWJvdXQpCitAaW50ZXJmYWNlIE5T
VmlldyAoTlNWaWV3RGV0YWlscykKIC0gKE5TVmlldyAqKV9maW5kTGFzdFZpZXdJbktleVZpZXdM
b29wOwogQGVuZAogCitAaW50ZXJmYWNlIE5TVmlldyAoSmF2YVBsdWdpbkRldGFpbHMpCistIChq
b2JqZWN0KXBvbGxGb3JBcHBsZXRJbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7CitAZW5kCisK
Ky8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIFNQSS4KK0BpbnRlcmZhY2UgTlNWaWV3IChP
bGRXZWJLaXRQbHVnSW5EZXRhaWxzKQorLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2Vs
ZWN0ZWQ7CitAZW5kCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitAaW50ZXJmYWNlIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIDogTlNPYmplY3QgPFdlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyPiB7CisgICAgRmlsZUNob29zZXIqIF9jaG9vc2VyOworfQorLSAoaWQpaW5pdFdpdGhD
aG9vc2VyOihQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiljaG9vc2VyOworQGVuZAorCiBXZWJDaHJv
bWVDbGllbnQ6OldlYkNocm9tZUNsaWVudChXZWJWaWV3ICp3ZWJWaWV3KSAKICAgICA6IG1fd2Vi
Vmlldyh3ZWJWaWV3KQogewpAQCAtNDI1LDQgKzQ0MSwxMzcgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdQogICAgICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcs
IEBzZWxlY3Rvcih3ZWJWaWV3OmZyYW1lOmV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5
T3JpZ2luOmRhdGFiYXNlOiksIGtpdChmcmFtZSksIHdlYk9yaWdpbiwgKE5TU3RyaW5nICopZGF0
YWJhc2VOYW1lKTsKICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOwogfQotICAgIAorCit2b2lkIFdl
YkNocm9tZUNsaWVudDo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQoreworICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKnJlZ2lvbnMgPSBjb3JlKFttX3dlYlZpZXcgbWFpbkZyYW1lXSktPmRhc2hi
b2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CisgICAgW21fd2ViVmlldyBfYWRkU2Nyb2xsZXJEYXNo
Ym9hcmRSZWdpb25zOnJlZ2lvbnNdOworCisgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBA
c2VsZWN0b3Iod2ViVmlldzpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZDopLCByZWdpb25zKTsKK30K
Kwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFNlbGVjdGVkKFdpZGdldCogd2lkZ2V0LCBib29s
IGlzU2VsZWN0ZWQpCit7CisgICAgTlNWaWV3ICp2aWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7Cisg
ICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU2V0SXNT
ZWxlY3RlZDopXSkKKyAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU2V0SXNTZWxlY3RlZDppc1NlbGVj
dGVkXTsKKyAgICBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNl
dElzU2VsZWN0ZWQ6KV0pCisgICAgICAgIFt2aWV3IHNldElzU2VsZWN0ZWQ6aXNTZWxlY3RlZF07
Cit9CisKK0Zsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9k
ZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVS
ZWN0KQoreworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1traXQobm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICghW2RvY3VtZW50
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICByZXR1cm4g
TlNaZXJvUmVjdDsKKworICAgIFdlYkhUTUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmll
dyAqKWRvY3VtZW50VmlldzsKKyAgICBpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVy
ID0gW3dlYkhUTUxWaWV3IF9oaWdobGlnaHRlckZvclR5cGU6dHlwZV07CisgICAgaWYgKFsoTlNP
YmplY3QgKiloaWdobGlnaHRlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGhpZ2hsaWdo
dFJlY3RGb3JMaW5lOnJlcHJlc2VudGVkTm9kZTopXSkKKyAgICAgICAgcmV0dXJuIFtoaWdobGln
aHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTpsaW5lUmVjdCByZXByZXNlbnRlZE5vZGU6a2l0KG5v
ZGUpXTsKKyAgICByZXR1cm4gW2hpZ2hsaWdodGVyIGhpZ2hsaWdodFJlY3RGb3JMaW5lOmxpbmVS
ZWN0XTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5v
ZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKQoreworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1traXQobm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIGlmICgh
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcg
Kilkb2N1bWVudFZpZXc7CisgICAgaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiBoaWdobGlnaHRlciA9
IFt3ZWJIVE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5cGVdOworICAgIGlmIChbKE5TT2Jq
ZWN0ICopaGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwYWludEhpZ2hs
aWdodEZvckJveDpvbkxpbmU6YmVoaW5kVGV4dDplbnRpcmVMaW5lOnJlcHJlc2VudGVkTm9kZTop
XSkKKyAgICAgICAgW2hpZ2hsaWdodGVyIHBhaW50SGlnaGxpZ2h0Rm9yQm94OmJveFJlY3Qgb25M
aW5lOmxpbmVSZWN0IGJlaGluZFRleHQ6YmVoaW5kVGV4dCBlbnRpcmVMaW5lOmVudGlyZUxpbmUg
cmVwcmVzZW50ZWROb2RlOmtpdChub2RlKV07CisgICAgZWxzZQorICAgICAgICBbaGlnaGxpZ2h0
ZXIgcGFpbnRIaWdobGlnaHRGb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVoaW5kVGV4
dDpiZWhpbmRUZXh0IGVudGlyZUxpbmU6ZW50aXJlTGluZV07Cit9CisKK0tleWJvYXJkVUlNb2Rl
IFdlYkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUoKQoreworICAgIHJldHVybiBbbV93ZWJW
aWV3IF9rZXlib2FyZFVJTW9kZV07Cit9CisKK05TUmVzcG9uZGVyICpXZWJDaHJvbWVDbGllbnQ6
OmZpcnN0UmVzcG9uZGVyKCkKK3sKKyAgICByZXR1cm4gW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXdGaXJzdFJlc3BvbmRlcjptX3dlYlZpZXddOworfQorCit2b2lkIFdl
YkNocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKE5TUmVzcG9uZGVyICpyZXNwb25kZXIp
Cit7CisgICAgW21fd2ViVmlldyBfcHVzaFBlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c107Cisg
ICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IG1h
a2VGaXJzdFJlc3BvbmRlcjpyZXNwb25kZXJdOworICAgIFttX3dlYlZpZXcgX3BvcFBlcmZvcm1p
bmdQcm9ncmFtbWF0aWNGb2N1c107Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5PcGVu
UGFuZWwoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKK3sKKyAgICBXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lciAqbGlzdGVuZXIgPSBbW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
IGFsbG9jXSBpbml0V2l0aENob29zZXI6Y2hvb3Nlcl07CisgICAgQ2FsbFVJRGVsZWdhdGUobV93
ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJl
c3VsdExpc3RlbmVyOiksIGxpc3RlbmVyKTsKKyAgICBbbGlzdGVuZXIgcmVsZWFzZV07Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp3aWxsUG9wVXBNZW51KE5TTWVudSAqbWVudSkKK3sKKyAg
ICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OndpbGxQb3B1cE1l
bnU6KSwgbWVudSk7Cit9CisKK2pvYmplY3QgV2ViQ2hyb21lQ2xpZW50OjpqYXZhQXBwbGV0KE5T
VmlldyAqdmlldykKK3sKKyAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5HZXRBcHBsZXQpXSkKKyAgICAgICAgcmV0dXJuIFsoaWQpdmlldyB3ZWJQbHVn
SW5HZXRBcHBsZXRdOworCisgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocG9sbEZvckFwcGxldEluV2luZG93OildKSB7CisgICAgICAgIC8vIFRoZSBKYXZhIFZNIG5l
ZWRzIHRoZSBjb250YWluaW5nIHdpbmRvdyBvZiB0aGUgdmlldyB0bworICAgICAgICAvLyBpbml0
aWFsaXplLiBUaGUgdmlldyBtYXkgbm90IHlldCBiZSBpbiB0aGUgd2luZG93J3MgdmlldyAKKyAg
ICAgICAgLy8gaGllcmFyY2h5LCBzbyB3ZSBoYXZlIHRvIHBhc3MgdGhlIHdpbmRvdyB3aGVuIHJl
cXVlc3RpbmcKKyAgICAgICAgLy8gdGhlIGFwcGxldC4KKyAgICAgICAgcmV0dXJuIFsoaWQpdmll
dyBwb2xsRm9yQXBwbGV0SW5XaW5kb3c6W21fd2ViVmlldyB3aW5kb3ddXTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyCisKKy0gKGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pY2hv
b3NlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIF9jaG9vc2VyID0gY2hvb3Nlci5yZWxlYXNlUmVmKCk7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2Nob29z
ZXIpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQoreworICAg
IEFTU0VSVCghX2Nob29zZXIpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy0gKHZvaWQp
Y2FuY2VsCit7CisgICAgQVNTRVJUKF9jaG9vc2VyKTsKKyAgICBpZiAoIV9jaG9vc2VyKQorICAg
ICAgICByZXR1cm47CisgICAgX2Nob29zZXItPmRlcmVmKCk7CisgICAgX2Nob29zZXIgPSAwOwor
fQorCistICh2b2lkKWNob29zZUZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lCit7CisgICAg
QVNTRVJUKF9jaG9vc2VyKTsKKyAgICBpZiAoIV9jaG9vc2VyKQorICAgICAgICByZXR1cm47Cisg
ICAgX2Nob29zZXItPmNob29zZUZpbGUoZmlsZW5hbWUpOworICAgIF9jaG9vc2VyLT5kZXJlZigp
OworICAgIF9jaG9vc2VyID0gMDsKK30KKworQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNTUgKzI5LDE5IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVGcmFtZUJyaWRnZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgSFRN
TEZyYW1lT3duZXJFbGVtZW50OwogICAgIGNsYXNzIFBhZ2U7CiB9CiAKIEBjbGFzcyBXZWJGcmFt
ZTsKIEBjbGFzcyBXZWJGcmFtZVZpZXc7CiAKLUBwcm90b2NvbCBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lcjsKLQotQGludGVyZmFjZSBXZWJGcmFtZUJyaWRnZSA6IFdlYkNvcmVGcmFtZUJyaWRn
ZSA8V2ViQ29yZUZyYW1lQnJpZGdlPgoteworQGludGVyZmFjZSBXZWJGcmFtZUJyaWRnZSA6IFdl
YkNvcmVGcmFtZUJyaWRnZSB7CiBAcHVibGljCiAgICAgV2ViRnJhbWUgKl9mcmFtZTsKLQotQHBy
aXZhdGUKLSAgICBXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSBfa2V5Ym9hcmRVSU1vZGU7Ci0gICAg
Qk9PTCBfa2V5Ym9hcmRVSU1vZGVBY2Nlc3NlZDsKLSAgICBCT09MIF9kb2luZ0NsaWVudFJlZGly
ZWN0OwotICAgIEJPT0wgX2hhdmVVbmRvUmVkb09wZXJhdGlvbnM7Ci0gICAgCi0gICAgTlNEaWN0
aW9uYXJ5ICpsYXN0RGFzaGJvYXJkUmVnaW9uczsKIH0KLQotLSAoaWQpaW5pdE1haW5GcmFtZVdp
dGhQYWdlOihXZWJDb3JlOjpQYWdlKilwYWdlIGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZy
YW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3OworLSAoaWQpaW5pdE1haW5GcmFtZVdp
dGhQYWdlOihXZWJDb3JlOjpQYWdlKilwYWdlIGZyYW1lTmFtZTooY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3OworLSAoaWQpaW5p
dFN1YmZyYW1lV2l0aE93bmVyRWxlbWVudDooV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50
Kilvd25lckVsZW1lbnQgZnJhbWVOYW1lOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJh
bWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXc7CiAtICh2b2lkKWNsb3NlOwotCiAtIChX
ZWJGcmFtZSAqKXdlYkZyYW1lOwotCi0vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGFsbCBt
b3ZlIG9mZiB0aGUgYnJpZGdlOyB0aGV5J3JlIHVzZWQgb24gdGhlIFdlYktpdCBzaWRlIG9ubHku
Ci0KLS0gKE5TVmlldyAqKXZpZXdGb3JQbHVnaW5XaXRoRnJhbWU6KE5TUmVjdClmcmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlTmFtZXM6KE5TQXJyYXkgKilhdHRyaWJ1dGVOYW1lcwotICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczooTlNBcnJheSAqKWF0dHJpYnV0ZVZhbHVlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQot
ICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6KEJPT0wpbG9hZE1hbnVhbGx5Owot
LSAoTlNWaWV3ICopdmlld0ZvckphdmFBcHBsZXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6KE5TQXJyYXkgKilhdHRyaWJ1dGVO
YW1lcwotICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkgKilh
dHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJMOihO
U1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01FbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudDsKLQotLSAoV2ViQ29yZTo6RnJhbWUqKWNyZWF0ZUNoaWxkRnJh
bWVOYW1lZDooTlNTdHJpbmcgKilmcmFtZU5hbWUgd2l0aFVSTDooTlNVUkwgKilVUkwgcmVmZXJy
ZXI6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpcmVmZXJyZXIKLSAgICBvd25lckVsZW1lbnQ6KFdl
YkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCAqKW93bmVyRWxlbWVudCBhbGxvd3NTY3JvbGxp
bmc6KEJPT0wpYWxsb3dzU2Nyb2xsaW5nIG1hcmdpbldpZHRoOihpbnQpd2lkdGggbWFyZ2luSGVp
Z2h0OihpbnQpaGVpZ2h0OwotCi0tICh2b2lkKXJlZGlyZWN0RGF0YVRvUGx1Z2luOihOU1ZpZXcg
KilwbHVnaW5WaWV3OwotCi0tIChXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSlkZXRlcm1pbmVP
YmplY3RGcm9tTUlNRVR5cGU6KE5TU3RyaW5nKilNSU1FVHlwZSBVUkw6KE5TVVJMKilVUkw7Ci0K
LS0gKHZvaWQpd2luZG93T2JqZWN0Q2xlYXJlZDsKLQogQGVuZApJbmRleDogV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDcxMikKKysrIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExMCArMjgsMTkgQEAKIAogI2ltcG9ydCAiV2Vi
RnJhbWVCcmlkZ2UuaCIKIAotI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCi0jaW1wb3J0
ICJXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJXZWJCYXNlUGx1Z2luUGFj
a2FnZS5oIgotI2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJE
ZWZhdWx0VUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlLmgiCi0jaW1w
b3J0ICJXZWJGb3JtRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYkZyYW1lTG9hZERlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUxvYWRlckNs
aWVudC5oIgotI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhU
TUxSZXByZXNlbnRhdGlvblByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwu
aCIKLSNpbXBvcnQgIldlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhpc3Rv
cnlJdGVtUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSmF2YVBsdWdJbi5oIgotI2ltcG9ydCAiV2Vi
SmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmgiCi0jaW1wb3J0ICJXZWJLaXRFcnJvcnNQcml2YXRl
LmgiCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4
dHJhcy5oIgotI2ltcG9ydCAiV2ViS2l0UGx1Z2luQ29udGFpbmVyVmlldy5oIgogI2ltcG9ydCAi
V2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYktpdFN5c3RlbUJpdHMuaCIK
LSNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5ncy5oIgotI2ltcG9ydCAiV2ViTlNPYmplY3RF
eHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTFJl
cXVlc3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TVmlld0V4dHJhcy5oIgotI2ltcG9ydCAiV2Vi
TmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZS5oIgotI2ltcG9ydCAiV2ViTnVsbFBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYlBs
dWdpbi5oIgotI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUGx1
Z2luRGF0YWJhc2UuaCIKLSNpbXBvcnQgIldlYlBsdWdpblBhY2thZ2UuaCIKLSNpbXBvcnQgIldl
YlBsdWdpblZpZXdGYWN0b3J5UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmgiCi0jaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlNjcmlw
dERlYnVnU2VydmVyUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIK
LSNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTENv
bm5lY3Rpb24uaD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXF1ZXN0Lmg+Ci0jaW1wb3J0
IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvb2JqZWN0Lmg+Ci0jaW1wb3J0IDxKYXZhVk0vam5pLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0NhY2hlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm91
bmRhdGlvbkV4dHJhcy5oPgorI2ltcG9ydCAiV2ViVmlldy5oIgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZUxvYWRlckNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvU3VicmVzb3VyY2VMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNF
eHRyYXMuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2ltcG9ydCA8d3Rm
L1JlZlB0ci5oPgotI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0KLS8vIEZv
ciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIFNQSS4gCi1AaW50ZXJmYWNlIE5TVmlldyAoT2xkV2Vi
UGx1Z2luKQotLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWY7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgTlNWaWV3IChKYXZhUGx1Z2luU2VjcmV0cykKLS0gKGpvYmplY3QpcG9sbEZvckFwcGxldElu
V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKLU5TU3RyaW5nICpXZWJQbHVnaW5CYXNlVVJMS2V5ID0gICAgIEAiV2ViUGx1Z2luQmFz
ZVVSTCI7Ci1OU1N0cmluZyAqV2ViUGx1Z2luQXR0cmlidXRlc0tleSA9ICBAIldlYlBsdWdpbkF0
dHJpYnV0ZXMiOwotTlNTdHJpbmcgKldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAgQCJXZWJQbHVn
aW5Db250YWluZXIiOwotCi0jZGVmaW5lIEtleWJvYXJkVUlNb2RlRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIEAiY29tLmFwcGxlLktleWJvYXJkVUlNb2RlRGlkQ2hhbmdlIgotI2RlZmluZSBBcHBsZUtl
eWJvYXJkVUlNb2RlIENGU1RSKCJBcHBsZUtleWJvYXJkVUlNb2RlIikKLSNkZWZpbmUgVW5pdmVy
c2FsQWNjZXNzRG9tYWluIENGU1RSKCJjb20uYXBwbGUudW5pdmVyc2FsYWNjZXNzIikKLQogQGlt
cGxlbWVudGF0aW9uIFdlYkZyYW1lQnJpZGdlCiAKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
LSsgKHZvaWQpaW5pdGlhbGl6ZQotewotICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJl
YWQoc2VsZik7Ci19Ci0jZW5kaWYKLQotLSAoV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAo
IW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIGtpdChtX2Zy
YW1lLT5wYWdlKCkpOwotfQotCi0tICh2b2lkKWZpbmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOihQ
YWdlKilwYWdlIGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVW
aWV3ICopZnJhbWVWaWV3IG93bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25l
ckVsZW1lbnQKKy0gKHZvaWQpZmluaXNoSW5pdGlhbGl6aW5nV2l0aFBhZ2U6KFBhZ2UqKXBhZ2Ug
ZnJhbWVOYW1lOihjb25zdCBTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilm
cmFtZVZpZXcgb3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVu
dAogewogICAgICsrV2ViQnJpZGdlQ291bnQ7CiAKQEAgLTE0Myw1OTkgKzUyLDM3IEBAIE5TU3Ry
aW5nICpXZWJQbHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAgICBtX2ZyYW1lLT5zZXRCcmlk
Z2Uoc2VsZik7CiAgICAgbV9mcmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOwogICAgIG1fZnJh
bWUtPmluaXQoKTsKLSAgICAKKwogICAgIFtzZWxmIHNldFRleHRTaXplTXVsdGlwbGllcjpbd2Vi
VmlldyB0ZXh0U2l6ZU11bHRpcGxpZXJdXTsKIH0KIAotLSAoaWQpaW5pdE1haW5GcmFtZVdpdGhQ
YWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZyYW1lVmlldzooV2Vi
RnJhbWVWaWV3ICopZnJhbWVWaWV3CistIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2Uq
KXBhZ2UgZnJhbWVOYW1lOihjb25zdCBTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZp
ZXcgKilmcmFtZVZpZXcKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIFtzZWxmIGZp
bmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOnBhZ2UgZnJhbWVOYW1lOm5hbWUgZnJhbWVWaWV3OmZy
YW1lVmlldyBvd25lckVsZW1lbnQ6MF07CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKGlkKWlu
aXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJF
bGVtZW50IGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3
ICopZnJhbWVWaWV3CistIChpZClpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihIVE1MRnJh
bWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFN0cmluZyYpbmFt
ZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldwogewogICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CiAgICAgW3NlbGYgZmluaXNoSW5pdGlhbGl6aW5nV2l0aFBhZ2U6b3duZXJFbGVt
ZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCkgZnJhbWVOYW1lOm5hbWUgZnJhbWVWaWV3
OmZyYW1lVmlldyBvd25lckVsZW1lbnQ6b3duZXJFbGVtZW50XTsKICAgICByZXR1cm4gc2VsZjsK
IH0KIAotLSAodm9pZClmaW5pCi17Ci0gICAgaWYgKF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7
Ci0gICAgICAgIFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSAKLSAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpLZXlib2FyZFVJTW9kZURp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKLSAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyOnNlbGYg
bmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAg
fQotCi0gICAgQVNTRVJUKF9mcmFtZSA9PSBuaWwpOwotICAgIC0tV2ViQnJpZGdlQ291bnQ7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtsYXN0RGFzaGJvYXJkUmVnaW9ucyByZWxlYXNl
XTsKLSAgICBbX2ZyYW1lIHJlbGVhc2VdOwotICAgIAotICAgIFtzZWxmIGZpbmldOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIEFTU0VSVF9NQUlO
X1RIUkVBRCgpOwotICAgIFtzZWxmIGZpbmldOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0K
LS0gKFdlYlByZWZlcmVuY2VzICopX3ByZWZlcmVuY2VzCi17Ci0gICAgcmV0dXJuIFtbc2VsZiB3
ZWJWaWV3XSBwcmVmZXJlbmNlc107Ci19Ci0KLS0gKHZvaWQpX3JldHJpZXZlS2V5Ym9hcmRVSU1v
ZGVGcm9tUHJlZmVyZW5jZXM6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
Q0ZQcmVmZXJlbmNlc0FwcFN5bmNocm9uaXplKFVuaXZlcnNhbEFjY2Vzc0RvbWFpbik7Ci0KLSAg
ICBCb29sZWFuIGtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0OwotICAgIGludCBtb2RlID0gQ0ZQ
cmVmZXJlbmNlc0dldEFwcEludGVnZXJWYWx1ZShBcHBsZUtleWJvYXJkVUlNb2RlLCBVbml2ZXJz
YWxBY2Nlc3NEb21haW4sICZrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCk7Ci0gICAgCi0gICAg
Ly8gVGhlIGtleWJvYXJkIGFjY2VzcyBtb2RlIGlzIHJlcG9ydGVkIGJ5IHR3byBiaXRzOgotICAg
IC8vIEJpdCAwIGlzIHNldCBpZiBmZWF0dXJlIGlzIG9uCi0gICAgLy8gQml0IDEgaXMgc2V0IGlm
IGZ1bGwga2V5Ym9hcmQgYWNjZXNzIHdvcmtzIGZvciBhbnkgY29udHJvbCwgbm90IGp1c3QgdGV4
dCBib3hlcyBhbmQgbGlzdHMKLSAgICAvLyBXZSByZXF1aXJlIGJvdGggYml0cyB0byBiZSBvbi4K
LSAgICAvLyBJIGRvIG5vdCBrbm93IHRoYXQgd2Ugd291bGQgZXZlciBnZXQgb25lIGJpdCBvbiBh
bmQgdGhlIG90aGVyIG9mZiBzaW5jZQotICAgIC8vIGNoZWNraW5nIHRoZSBjaGVja2JveCBpbiBz
eXN0ZW0gcHJlZmVyZW5jZXMgd2hpY2ggaXMgbWFya2VkIGFzICJUdXJuIG9uIGZ1bGwga2V5Ym9h
cmQgYWNjZXNzIgotICAgIC8vIHR1cm5zIG9uIGJvdGggYml0cy4KLSAgICBfa2V5Ym9hcmRVSU1v
ZGUgPSAobW9kZSAmIDB4MikgPyBLZXlib2FyZEFjY2Vzc0Z1bGwgOiBLZXlib2FyZEFjY2Vzc0Rl
ZmF1bHQ7Ci0gICAgCi0gICAgLy8gY2hlY2sgZm9yIHRhYmJpbmcgdG8gbGlua3MKLSAgICBpZiAo
W1tzZWxmIF9wcmVmZXJlbmNlc10gdGFic1RvTGlua3NdKQotICAgICAgICBfa2V5Ym9hcmRVSU1v
ZGUgPSAoS2V5Ym9hcmRVSU1vZGUpKF9rZXlib2FyZFVJTW9kZSB8IEtleWJvYXJkQWNjZXNzVGFi
c1RvTGlua3MpOwotfQotCi0tIChLZXlib2FyZFVJTW9kZSlrZXlib2FyZFVJTW9kZQotewotICAg
IGlmICghX2tleWJvYXJkVUlNb2RlQWNjZXNzZWQpIHsKLSAgICAgICAgX2tleWJvYXJkVUlNb2Rl
QWNjZXNzZWQgPSBZRVM7Ci0gICAgICAgIFtzZWxmIF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJv
bVByZWZlcmVuY2VzOm5pbF07Ci0gICAgICAgIAotICAgICAgICBbW05TRGlzdHJpYnV0ZWROb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCi0gICAgICAgICAgICBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJl
bmNlczopIAotICAgICAgICAgICAgbmFtZTpLZXlib2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKLQotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIAotICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKLSAgICAgICAgICAg
ICAgICAgICBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKLSAgICB9Ci0gICAgcmV0dXJuIF9rZXlib2FyZFVJTW9kZTsKLX0KLQogLSAoV2ViRnJhbWUg
Kil3ZWJGcmFtZQogewogICAgIHJldHVybiBfZnJhbWU7CiB9CiAKLS0gKFdlYkNvcmVGcmFtZUJy
aWRnZSAqKW1haW5GcmFtZQotewotICAgIEFTU0VSVChfZnJhbWUgIT0gbmlsKTsKLSAgICByZXR1
cm4gW1tbc2VsZiB3ZWJWaWV3XSBtYWluRnJhbWVdIF9icmlkZ2VdOwotfQotCi0tIChOU1Jlc3Bv
bmRlciAqKWZpcnN0UmVzcG9uZGVyCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3
IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Rmlyc3RSZXNwb25kZXI6d2ViVmlld107Ci19
Ci0KLS0gKHZvaWQpbWFrZUZpcnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRlciAqKXZpZXcKLXsKLSAg
ICBBU1NFUlQoX2ZyYW1lICE9IG5pbCk7Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIHdl
YlZpZXddOwotICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSk7
Ci0gICAgQVNTRVJUKFsoTlNWaWV3ICopdmlldyB3aW5kb3ddKTsKLSAgICBBU1NFUlQoWyhOU1Zp
ZXcgKil2aWV3IHdpbmRvd10gPT0gW3dlYlZpZXcgd2luZG93XSk7Ci0gICAgW3dlYlZpZXcgX3B1
c2hQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdOwotICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3XTsKLSAg
ICBbd2ViVmlldyBfcG9wUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXTsKLX0KLQotLSAoTlNX
aW5kb3cgKil3aW5kb3cKLXsKLSAgICBBU1NFUlQoX2ZyYW1lICE9IG5pbCk7Ci0gICAgcmV0dXJu
IFtbX2ZyYW1lIGZyYW1lVmlld10gd2luZG93XTsKLX0KLQotLSAodm9pZClydW5PcGVuUGFuZWxG
b3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3RlbmVyOihpZDxXZWJDb3JlT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXI+KXJlc3VsdExpc3RlbmVyCi17Ci0gICAgV2ViVmlldyAqd3YgPSBbc2VsZiB3ZWJW
aWV3XTsKLSAgICBbW3d2IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ond2IHJ1bk9wZW5Q
YW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6KGlkPFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lcl07Ci19Ci0KLS0gKFdlYkRhdGFTb3VyY2UgKilkYXRh
U291cmNlCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UgPSBbX2ZyYW1lIF9kYXRhU291cmNlXTsKLQotICAgIEFTU0VSVChkYXRhU291
cmNlICE9IG5pbCk7Ci0KLSAgICByZXR1cm4gZGF0YVNvdXJjZTsKLX0KLQogLSAodm9pZCljbG9z
ZQogewogICAgIFtzdXBlciBjbG9zZV07CisgICAgaWYgKCFfZnJhbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICAtLVdlYkJyaWRnZUNvdW50OwogICAgIFtfZnJhbWUgcmVsZWFzZV07CiAgICAgX2Zy
YW1lID0gbmlsOwogfQogCi0tIChGcmFtZSopY3JlYXRlQ2hpbGRGcmFtZU5hbWVkOihOU1N0cmlu
ZyAqKWZyYW1lTmFtZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0
aFVSTDooTlNVUkwgKilVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWZlcnJlcjooY29uc3QgU3RyaW5nJilyZWZlcnJlcgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzU2Nyb2xsaW5nOihCT09MKWFs
bG93c1Njcm9sbGluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5X
aWR0aDooaW50KXdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5I
ZWlnaHQ6KGludCloZWlnaHQKLXsKLSAgICBBU1NFUlQoX2ZyYW1lKTsKLSAgICAKLSAgICBXZWJG
cmFtZVZpZXcgKmNoaWxkVmlldyA9IFtbV2ViRnJhbWVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwwLDAsMCldOwotICAgIFtjaGlsZFZpZXcgc2V0QWxsb3dzU2Nyb2xsaW5n
OmFsbG93c1Njcm9sbGluZ107Ci0gICAgW2NoaWxkVmlldyBfc2V0TWFyZ2luV2lkdGg6d2lkdGhd
OwotICAgIFtjaGlsZFZpZXcgX3NldE1hcmdpbkhlaWdodDpoZWlnaHRdOwotCi0gICAgV2ViRnJh
bWVCcmlkZ2UgKm5ld0JyaWRnZSA9IFtbV2ViRnJhbWVCcmlkZ2UgYWxsb2NdIGluaXRTdWJmcmFt
ZVdpdGhPd25lckVsZW1lbnQ6b3duZXJFbGVtZW50IGZyYW1lTmFtZTpmcmFtZU5hbWUgZnJhbWVW
aWV3OmNoaWxkVmlld107Ci0gICAgW2NoaWxkVmlldyByZWxlYXNlXTsKLQotICAgIGlmICghbmV3
QnJpZGdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFtfZnJhbWUgX2FkZENoaWxkOltuZXdC
cmlkZ2Ugd2ViRnJhbWVdXTsKLSAgICBbbmV3QnJpZGdlIHJlbGVhc2VdOwotCi0gICAgUmVmUHRy
PEZyYW1lPiBuZXdGcmFtZSA9IFtuZXdCcmlkZ2UgX2ZyYW1lXTsKLSAgICAKLSAgICBbX2ZyYW1l
IF9sb2FkVVJMOlVSTCByZWZlcnJlcjpyZWZlcnJlciBpbnRvQ2hpbGQ6a2l0KG5ld0ZyYW1lLmdl
dCgpKV07Ci0KLSAgICAvLyBUaGUgZnJhbWUncyBvbmxvYWQgaGFuZGxlciBtYXkgaGF2ZSByZW1v
dmVkIGl0IGZyb20gdGhlIGRvY3VtZW50LgotICAgIGlmICghbmV3RnJhbWUtPnRyZWUoKS0+cGFy
ZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG5ld0ZyYW1lLmdldCgpOwot
fQotCi0tIChOU1ZpZXcgKilwbHVnaW5WaWV3V2l0aFBhY2thZ2U6KFdlYlBsdWdpblBhY2thZ2Ug
KilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6KE5TQXJy
YXkgKilhdHRyaWJ1dGVOYW1lcwotICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOihO
U0FycmF5ICopYXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VV
Ukw6KE5TVVJMICopYmFzZVVSTAotICAgICAgICAgICAgICAgICAgICAgICBET01FbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5OihC
T09MKWxvYWRNYW51YWxseQotewotICAgIFdlYkhUTUxWaWV3ICpkb2NWaWV3ID0gKFdlYkhUTUxW
aWV3ICopW1tfZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIEFTU0VSVChbZG9j
VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKLSAgICAgICAgCi0gICAg
V2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlciA9IFtkb2NWaWV3IF9wbHVnaW5D
b250cm9sbGVyXTsKLSAgICAKLSAgICAvLyBTdG9yZSBhdHRyaWJ1dGVzIGluIGEgZGljdGlvbmFy
eSBzbyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gV2ViUGx1Z2lucy4KLSAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6YXR0cmlidXRlVmFsdWVzIGZvcktleXM6YXR0cmlidXRlTmFtZXNdOwotICAgIAot
ICAgIFtwbHVnaW5QYWNrYWdlIGxvYWRdOwotICAgIENsYXNzIHZpZXdGYWN0b3J5ID0gW3BsdWdp
blBhY2thZ2Ugdmlld0ZhY3RvcnldOwotICAgIAotICAgIE5TVmlldyAqdmlldyA9IG5pbDsKLSAg
ICBOU0RpY3Rpb25hcnkgKmFyZ3VtZW50cyA9IG5pbDsKLSAgICAKLSAgICBpZiAoW3ZpZXdGYWN0
b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6
KV0pIHsKLSAgICAgICAgYXJndW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdHNBbmRLZXlzOgotICAgICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z0luQmFzZVVSTEtleSwK
LSAgICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdJbkF0dHJpYnV0ZXNLZXksCi0gICAgICAg
ICAgICBwbHVnaW5Db250cm9sbGVyLCBXZWJQbHVnSW5Db250YWluZXJLZXksCi0gICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsb2FkTWFudWFsbHkgPyBXZWJQbHVnSW5Nb2RlRnVs
bCA6IFdlYlBsdWdJbk1vZGVFbWJlZF0sIFdlYlBsdWdJbk1vZGVLZXksCi0gICAgICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IWxvYWRNYW51YWxseV0sIFdlYlBsdWdJblNob3VsZExv
YWRNYWluUmVzb3VyY2VLZXksCi0gICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVnSW5Db250YWlu
aW5nRWxlbWVudEtleSwKLSAgICAgICAgICAgIG5pbF07Ci0gICAgICAgIExPRyhQbHVnaW5zLCAi
YXJndW1lbnRzOlxuJUAiLCBhcmd1bWVudHMpOwotICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0p
IHsKLSAgICAgICAgYXJndW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgotICAgICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z2luQmFzZVVSTEtleSwKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdpbkF0dHJpYnV0ZXNLZXksCi0gICAgICAgICAg
ICBwbHVnaW5Db250cm9sbGVyLCBXZWJQbHVnaW5Db250YWluZXJLZXksCi0gICAgICAgICAgICBl
bGVtZW50LCBXZWJQbHVnSW5Db250YWluaW5nRWxlbWVudEtleSwKLSAgICAgICAgICAgIG5pbF07
Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiYXJndW1lbnRzOlxuJUAiLCBhcmd1bWVudHMpOwotICAg
IH0KLQotICAgIHZpZXcgPSBbV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5WaWV3V2l0aEFyZ3Vt
ZW50czphcmd1bWVudHMgZnJvbVBsdWdpblBhY2thZ2U6cGx1Z2luUGFja2FnZV07Ci0gICAgW2F0
dHJpYnV0ZXMgcmVsZWFzZV07Ci0gICAgcmV0dXJuIHZpZXc7Ci19Ci0KLS0gKE5TU3RyaW5nICop
dmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5IGtleXM6KE5TQXJyYXkgKilrZXlzIHZhbHVlczoo
TlNBcnJheSAqKXZhbHVlcwotewotICAgIHVuc2lnbmVkIGNvdW50ID0gW2tleXMgY291bnRdOwot
ICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAg
IGlmIChbW2tleXMgb2JqZWN0QXRJbmRleDppXSBfd2Via2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1
YWxUb1N0cmluZzprZXldKQotICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZXMgb2JqZWN0QXRJbmRl
eDppXTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChOU1ZpZXcgKil2aWV3Rm9yUGx1Z2luV2l0
aEZyYW1lOihOU1JlY3QpZnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6
KE5TVVJMICopVVJMCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOihOU0FycmF5
ICopYXR0cmlidXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5T
QXJyYXkgKilhdHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5
cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1l
bnQ6KERPTUVsZW1lbnQgKillbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVh
bGx5OihCT09MKWxvYWRNYW51YWxseQotewotICAgIEFTU0VSVChbYXR0cmlidXRlTmFtZXMgY291
bnRdID09IFthdHRyaWJ1dGVWYWx1ZXMgY291bnRdKTsKLQotICAgIFdlYkJhc2VQbHVnaW5QYWNr
YWdlICpwbHVnaW5QYWNrYWdlID0gbmlsOwotICAgIE5TVmlldyAqdmlldyA9IG5pbDsKLSAgICBp
bnQgZXJyb3JDb2RlID0gMDsKLQotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3
XTsKLSAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViVmlldzpwbHVnSW5WaWV3V2l0aEFy
Z3VtZW50czopOwotCi0gICAgaWYgKFtbd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2Vs
ZWN0b3I6c2VsZWN0b3JdKSB7Ci0gICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJpYnV0
ZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czphdHRyaWJ1
dGVWYWx1ZXMgZm9yS2V5czphdHRyaWJ1dGVOYW1lc107Ci0gICAgICAgIE5TRGljdGlvbmFyeSAq
YXJndW1lbnRzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzLCBXZWJQbHVnSW5BdHRyaWJ1dGVzS2V5LAotICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bG9hZE1hbnVhbGx5ID8gV2ViUGx1Z0luTW9k
ZUZ1bGwgOiBXZWJQbHVnSW5Nb2RlRW1iZWRdLCBXZWJQbHVnSW5Nb2RlS2V5LAotICAgICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiFsb2FkTWFudWFsbHldLCBXZWJQbHVnSW5TaG91
bGRMb2FkTWFpblJlc291cmNlS2V5LAotICAgICAgICAgICAgZWxlbWVudCwgV2ViUGx1Z0luQ29u
dGFpbmluZ0VsZW1lbnRLZXksCi0gICAgICAgICAgICBVUkwsIFdlYlBsdWdJbkJhc2VVUkxLZXks
IC8vIFVSTCBtaWdodCBiZSBuaWwsIHNvIGFkZCBpdCBsYXN0Ci0gICAgICAgICAgICBuaWxdOwot
Ci0gICAgICAgIHZpZXcgPSBDYWxsVUlEZWxlZ2F0ZSh3ZWJWaWV3LCBzZWxlY3RvciwgYXJndW1l
bnRzKTsKLQotICAgICAgICBbYXR0cmlidXRlcyByZWxlYXNlXTsKLSAgICAgICAgW2FyZ3VtZW50
cyByZWxlYXNlXTsKLQotICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHJldHVybiB2aWV3
OwotICAgIH0KLQotICAgIGlmIChbTUlNRVR5cGUgbGVuZ3RoXSAhPSAwKQotICAgICAgICBwbHVn
aW5QYWNrYWdlID0gW1tzZWxmIHdlYlZpZXddIF9wbHVnaW5Gb3JNSU1FVHlwZTpNSU1FVHlwZV07
Ci0gICAgZWxzZQotICAgICAgICBNSU1FVHlwZSA9IG5pbDsKLSAgICAKLSAgICBOU1N0cmluZyAq
ZXh0ZW5zaW9uID0gW1tVUkwgcGF0aF0gcGF0aEV4dGVuc2lvbl07Ci0gICAgaWYgKCFwbHVnaW5Q
YWNrYWdlICYmIFtleHRlbnNpb24gbGVuZ3RoXSAhPSAwKSB7Ci0gICAgICAgIHBsdWdpblBhY2th
Z2UgPSBbW3NlbGYgd2ViVmlld10gX3BsdWdpbkZvckV4dGVuc2lvbjpleHRlbnNpb25dOwotICAg
ICAgICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKm5ld01JTUVU
eXBlID0gW3BsdWdpblBhY2thZ2UgTUlNRVR5cGVGb3JFeHRlbnNpb246ZXh0ZW5zaW9uXTsKLSAg
ICAgICAgICAgIGlmIChbbmV3TUlNRVR5cGUgbGVuZ3RoXSAhPSAwKQotICAgICAgICAgICAgICAg
IE1JTUVUeXBlID0gbmV3TUlNRVR5cGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBOU1VSTCAq
YmFzZVVSTCA9IFtzZWxmIGJhc2VVUkxdOwotICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0gICAg
ICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNs
YXNzXV0pIHsKLSAgICAgICAgICAgIHZpZXcgPSBbc2VsZiBwbHVnaW5WaWV3V2l0aFBhY2thZ2U6
KFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOmF0dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOmF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBET01FbGVtZW50OmVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6bG9hZE1hbnVhbGx5XTsKLSAgICAg
ICAgICAgIAotICAgICAgICB9Ci0jaWZuZGVmIF9fTFA2NF9fCi0gICAgICAgIGVsc2UgaWYgKFtw
bHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFz
c11dKSB7Ci0gICAgICAgICAgICBXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyAqZW1iZWRk
ZWRWaWV3ID0gW1tbV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6ZnJhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlICop
cGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOlVSTAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJMOmJhc2VV
UkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNSU1FVHlwZTpNSU1FVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVLZXlzOmF0dHJpYnV0ZU5h
bWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6bG9h
ZE1hbnVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6ZWxlbWVudF0gYXV0b3JlbGVhc2VdOwotICAgICAg
ICAgICAgdmlldyA9IGVtYmVkZGVkVmlldzsKLSAgICAgICAgfSAKLSNlbmRpZgotICAgIH0gZWxz
ZQotICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckNhbm5vdEZpbmRQbHVnSW47Ci0KLSAg
ICBpZiAoIWVycm9yQ29kZSAmJiAhdmlldykKLSAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJy
b3JDYW5ub3RMb2FkUGx1Z0luOwotCi0gICAgaWYgKGVycm9yQ29kZSkgewotICAgICAgICBOU1N0
cmluZyAqcGx1Z2luUGFnZSA9IFtzZWxmIHZhbHVlRm9yS2V5OkAicGx1Z2luc3BhZ2UiIGtleXM6
YXR0cmlidXRlTmFtZXMgdmFsdWVzOmF0dHJpYnV0ZVZhbHVlc107Ci0gICAgICAgIE5TVVJMICpw
bHVnaW5QYWdlVVJMID0gcGx1Z2luUGFnZSAhPSBuaWwgPyBbc2VsZiBVUkxXaXRoQXR0cmlidXRl
U3RyaW5nOnBsdWdpblBhZ2VdIDogbmlsOwotICAgICAgICBOU0Vycm9yICplcnJvciA9IFtbTlNF
cnJvciBhbGxvY10gX2luaXRXaXRoUGx1Z2luRXJyb3JDb2RlOmVycm9yQ29kZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VVJM
OlVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwbHVnaW5QYWdlVVJMOnBsdWdpblBhZ2VVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luTmFtZTpbcGx1Z2luUGFja2FnZSBu
YW1lXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlXTsKLSAgICAgICAgV2ViTnVsbFBsdWdpblZpZXcgKm51
bGxWaWV3ID0gW1tbV2ViTnVsbFBsdWdpblZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6ZnJhbWUg
ZXJyb3I6ZXJyb3IgRE9NRWxlbWVudDplbGVtZW50XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIHZp
ZXcgPSBudWxsVmlldzsKLSAgICAgICAgW2Vycm9yIHJlbGVhc2VdOwotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlQodmlldyk7Ci0gICAgcmV0dXJuIHZpZXc7Ci19Ci0KLS0gKHZvaWQpcmVkaXJlY3RE
YXRhVG9QbHVnaW46KE5TVmlldyAqKXBsdWdpblZpZXcKLXsKLSAgICBXZWJIVE1MUmVwcmVzZW50
YXRpb24gKnJlcHJlc2VudGF0aW9uID0gKFdlYkhUTUxSZXByZXNlbnRhdGlvbiAqKVtbX2ZyYW1l
IF9kYXRhU291cmNlXSByZXByZXNlbnRhdGlvbl07Ci0KLSNpZm5kZWYgX19MUDY0X18KLSAgICBp
ZiAoW3BsdWdpblZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZp
ZXcgY2xhc3NdXSkKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uIF9yZWRpcmVjdERhdGFUb01hbnVh
bExvYWRlcjooV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgKilwbHVnaW5WaWV3IGZvclBs
dWdpblZpZXc6cGx1Z2luVmlld107Ci0gICAgZWxzZSB7Ci0jZWxzZQotICAgIHsKLSNlbmRpZgot
ICAgICAgICBXZWJIVE1MVmlldyAqZG9jVmlldyA9IChXZWJIVE1MVmlldyAqKVtbX2ZyYW1lIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICAgICAgQVNTRVJUKFtkb2NWaWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwotICAgICAgICAKLSAgICAgICAgV2ViUGx1Z2lu
Q29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlciA9IFtkb2NWaWV3IF9wbHVnaW5Db250cm9sbGVy
XTsKLSAgICAgICAgW3JlcHJlc2VudGF0aW9uIF9yZWRpcmVjdERhdGFUb01hbnVhbExvYWRlcjpw
bHVnaW5Db250cm9sbGVyIGZvclBsdWdpblZpZXc6cGx1Z2luVmlld107Ci0gICAgfQotCi19Ci0K
LS0gKE5TVmlldyAqKXZpZXdGb3JKYXZhQXBwbGV0V2l0aEZyYW1lOihOU1JlY3QpdGhlRnJhbWUK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOihOU0FycmF5ICopYXR0cmli
dXRlTmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzOihOU0FycmF5
ICopYXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVS
TDooTlNVUkwgKiliYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxlbWVu
dDooRE9NRWxlbWVudCAqKWVsZW1lbnQKLXsKLSAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBAImFw
cGxpY2F0aW9uL3gtamF2YS1hcHBsZXQiOwotICAgIFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVn
aW5QYWNrYWdlOwotICAgIE5TVmlldyAqdmlldyA9IG5pbDsKLSAgICAKLSAgICBwbHVnaW5QYWNr
YWdlID0gW1tzZWxmIHdlYlZpZXddIF9wbHVnaW5Gb3JNSU1FVHlwZTpNSU1FVHlwZV07Ci0KLSAg
ICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5k
T2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKSB7Ci0gICAgICAgICAgICAvLyBGb3Ig
c29tZSByZWFzb24sIHRoZSBKYXZhIHBsdWctaW4gcmVxdWlyZXMgdGhhdCB3ZSBwYXNzIHRoZSBk
aW1lbnNpb24gb2YgdGhlIHBsdWctaW4gYXMgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIE5TTXV0
YWJsZUFycmF5ICpuYW1lcyA9IFthdHRyaWJ1dGVOYW1lcyBtdXRhYmxlQ29weV07Ci0gICAgICAg
ICAgICBOU011dGFibGVBcnJheSAqdmFsdWVzID0gW2F0dHJpYnV0ZVZhbHVlcyBtdXRhYmxlQ29w
eV07Ci0gICAgICAgICAgICBpZiAoW3NlbGYgdmFsdWVGb3JLZXk6QCJ3aWR0aCIga2V5czphdHRy
aWJ1dGVOYW1lcyB2YWx1ZXM6YXR0cmlidXRlVmFsdWVzXSA9PSBuaWwpIHsKLSAgICAgICAgICAg
ICAgICBbbmFtZXMgYWRkT2JqZWN0OkAid2lkdGgiXTsKLSAgICAgICAgICAgICAgICBbdmFsdWVz
IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgKGludCl0aGVGcmFt
ZS5zaXplLndpZHRoXV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoW3NlbGYgdmFs
dWVGb3JLZXk6QCJoZWlnaHQiIGtleXM6YXR0cmlidXRlTmFtZXMgdmFsdWVzOmF0dHJpYnV0ZVZh
bHVlc10gPT0gbmlsKSB7Ci0gICAgICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDpAImhlaWdo
dCJdOwotICAgICAgICAgICAgICAgIFt2YWx1ZXMgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJWQiLCAoaW50KXRoZUZyYW1lLnNpemUuaGVpZ2h0XV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2aWV3ID0gW3NlbGYgcGx1Z2luVmlld1dpdGhQYWNrYWdlOihXZWJQ
bHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVOYW1lczpuYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZVZhbHVlczp2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VVUkw6YmFzZVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRE9NRWxlbWVudDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9hZE1hbnVhbGx5Ok5PXTsKLSAgICAgICAgICAgIFtuYW1lcyByZWxlYXNlXTsKLSAgICAgICAg
ICAgIFt2YWx1ZXMgcmVsZWFzZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgfSAKLSNpZm5kZWYg
X19MUDY0X18KLSAgICAgICAgZWxzZSBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpb
V2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIHZpZXcgPSBb
W1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTp0aGVG
cmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilwbHVnaW5Q
YWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVSTAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1JTUVUeXBlOk1JTUVUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUtleXM6YXR0cmlidXRlTmFtZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRNYW51YWxseTpOTwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
T01FbGVtZW50OmVsZW1lbnRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBpZiAoIXZpZXcpIHsKLSAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBbW05TRXJyb3IgYWxs
b2NdIF9pbml0V2l0aFBsdWdpbkVycm9yQ29kZTpXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZW50VVJMOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lOltwbHVnaW5QYWNrYWdlIG5h
bWVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTUlNRVR5cGU6TUlNRVR5cGVdOwotICAgICAgICB2aWV3ID0gW1tbV2ViTnVsbFBsdWdp
blZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6dGhlRnJhbWUgZXJyb3I6ZXJyb3IgRE9NRWxlbWVu
dDplbGVtZW50XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIFtlcnJvciByZWxlYXNlXTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICByZXR1cm4gdmlldzsKLX0KLQotLSAoT2JqZWN0
Q29udGVudFR5cGUpZGV0ZXJtaW5lT2JqZWN0RnJvbU1JTUVUeXBlOihOU1N0cmluZyopTUlNRVR5
cGUgVVJMOihOU1VSTCopVVJMCi17Ci0gICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgZW5zdXJl
cyBUaWdlciBNYWlsJ3MgV2ViS2l0IHBsdWctaW4gd2lsbCBsb2FkIGR1cmluZyBsYXlvdXQKLSAg
ICAvLyBhbmQgbm90IGF0dGFjaCB0aW1lLiAoNTUyMDU0MSkKLSAgICBzdGF0aWMgQk9PTCBpc1Rp
Z2VyTWFpbCA9IFdLQXBwVmVyc2lvbkNoZWNrTGVzc1RoYW4oQCJjb20uYXBwbGUubWFpbCIsIC0x
LCAzLjApOwotICAgIGlmIChpc1RpZ2VyTWFpbCAmJiBbTUlNRVR5cGUgaXNFcXVhbFRvU3RyaW5n
OkAiYXBwbGljYXRpb24veC1hcHBsZS1tc2ctYXR0YWNobWVudCJdKQotICAgICAgICByZXR1cm4g
T2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOwotICAgIAotICAgIGlmIChbTUlNRVR5cGUgbGVu
Z3RoXSA9PSAwKSB7Ci0gICAgICAgIC8vIFRyeSB0byBndWVzcyB0aGUgTUlNRSB0eXBlIGJhc2Vk
IG9mZiB0aGUgZXh0ZW5zaW9uLgotICAgICAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gW1tVUkwg
cGF0aF0gcGF0aEV4dGVuc2lvbl07Ci0gICAgICAgIGlmIChbZXh0ZW5zaW9uIGxlbmd0aF0gPiAw
KSB7Ci0gICAgICAgICAgICBNSU1FVHlwZSA9IFdLR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0
ZW5zaW9uKTsKLSAgICAgICAgICAgIGlmIChbTUlNRVR5cGUgbGVuZ3RoXSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgbm8gTUlNRSB0eXBlIGlzIHNwZWNpZmllZCwgdXNlIGEgcGx1Zy1p
biBpZiB3ZSBoYXZlIG9uZSB0aGF0IGNhbiBoYW5kbGUgdGhlIGV4dGVuc2lvbi4KLSAgICAgICAg
ICAgICAgICBpZiAoV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBhY2thZ2UgPSBbW3NlbGYgd2ViVmll
d10gX3BsdWdpbkZvckV4dGVuc2lvbjpleHRlbnNpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChbcGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIAot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsK
LSNpZm5kZWYgX19MUDY0X18KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoW3BhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQ
bHVnaW5QYWNrYWdlIGNsYXNzXV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9i
amVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKFtNSU1FVHlwZSBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBPYmplY3RDb250
ZW50RnJhbWU7IC8vIEdvIGFoZWFkIGFuZCBob3BlIHRoYXQgd2UgY2FuIGRpc3BsYXkgdGhlIGNv
bnRlbnQuCi0KLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlKE1JTUVUeXBlKSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRJbWFnZTsKLQotICAg
IGlmIChXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGFja2FnZSA9IFtbc2VsZiB3ZWJWaWV3XSBfcGx1
Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdKSB7Ci0gICAgICAgIGlmIChbcGFja2FnZSBpc0tpbmRP
ZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIAotICAgICAgICAgICAgcmV0dXJuIE9i
amVjdENvbnRlbnRPdGhlclBsdWdpbjsKLSNpZm5kZWYgX19MUDY0X18KLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoW3BhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQ
bHVnaW5QYWNrYWdlIGNsYXNzXV0pOwotICAgICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRO
ZXRzY2FwZVBsdWdpbjsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAgaWYgKFtXZWJG
cmFtZVZpZXcgX3ZpZXdDbGFzc0Zvck1JTUVUeXBlOk1JTUVUeXBlXSkKLSAgICAgICAgcmV0dXJu
IE9iamVjdENvbnRlbnRGcmFtZTsKLSAgICAKLSAgICByZXR1cm4gT2JqZWN0Q29udGVudE5vbmU7
Ci19Ci0KLS0gKGpvYmplY3QpZ2V0QXBwbGV0SW5WaWV3OihOU1ZpZXcgKil2aWV3Ci17Ci0gICAg
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luR2V0QXBwbGV0
KV0pCi0gICAgICAgIHJldHVybiBbdmlldyB3ZWJQbHVnSW5HZXRBcHBsZXRdOwotICAgIHJldHVy
biBbc2VsZiBwb2xsRm9yQXBwbGV0SW5WaWV3OnZpZXddOwotfQotCi0vLyBOT1RFOiBwb2xsRm9y
QXBwbGV0SW5WaWV3OiB3aWxsIGJsb2NrIHVudGlsIHRoZSBibG9jayBpcyByZWFkeSB0byB1c2Us
IG9yCi0vLyB1bnRpbCBhIHRpbWVvdXQgaXMgZXhjZWVkZWQuICBJdCB3aWxsIHJldHVybiBuaWwg
aWYgdGhlIHRpbWVvdXQgaXMKLS8vIGV4Y2VlZGVkLgotLy8gRGVwcmVjYXRlZCwgdXNlIGdldEFw
cGxldEluVmlldzouCi0tIChqb2JqZWN0KXBvbGxGb3JBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZp
ZXcKLXsKLSAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihwb2xsRm9y
QXBwbGV0SW5XaW5kb3c6KV0pCi0gICAgICAgIC8vIFRoZSBKYXZhIFZNIG5lZWRzIHRoZSBjb250
YWluaW5nIHdpbmRvdyBvZiB0aGUgdmlldyB0bwotICAgICAgICAvLyBpbml0aWFsaXplLiBUaGUg
dmlldyBtYXkgbm90IHlldCBiZSBpbiB0aGUgd2luZG93J3MgdmlldyAKLSAgICAgICAgLy8gaGll
cmFyY2h5LCBzbyB3ZSBoYXZlIHRvIHBhc3MgdGhlIHdpbmRvdyB3aGVuIHJlcXVlc3RpbmcKLSAg
ICAgICAgLy8gdGhlIGFwcGxldC4KLSAgICAgICAgcmV0dXJuIFt2aWV3IHBvbGxGb3JBcHBsZXRJ
bldpbmRvdzpbW3NlbGYgd2ViVmlld10gd2luZG93XV07Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS0g
KHZvaWQpcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzCi17Ci0gICAgTlNWaWV3IDxXZWJEb2N1bWVu
dFZpZXc+ICp2aWV3ID0gW1tfZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIGlm
IChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICBbKFdl
YkhUTUxWaWV3ICopdmlldyBfdXBkYXRlRm9udFBhbmVsXTsKLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHBvc3ROb3RpZmljYXRpb25OYW1lOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24gb2JqZWN0OltzZWxmIHdlYlZpZXddXTsKLX0KLQotLSAoTlNVbmRvTWFu
YWdlciAqKXVuZG9NYW5hZ2VyCi17Ci0gICAgcmV0dXJuIFtbc2VsZiB3ZWJWaWV3XSB1bmRvTWFu
YWdlcl07Ci19Ci0KLS0gKHZvaWQpaXNzdWVQYXN0ZUNvbW1hbmQKLXsKLSAgICBOU1ZpZXcqIGRv
Y3VtZW50VmlldyA9IFtbX2ZyYW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBpZiAo
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAg
ICBbKFdlYkhUTUxWaWV3Kilkb2N1bWVudFZpZXcgcGFzdGU6bmlsXTsKLX0KLQotLSAodm9pZClz
ZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQgZm9yVmlldzooTlNWaWV3ICopdmlldwotewot
ICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblNldElz
U2VsZWN0ZWQ6KV0pCi0gICAgICAgIFt2aWV3IHdlYlBsdWdJblNldElzU2VsZWN0ZWQ6aXNTZWxl
Y3RlZF07Ci0gICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihz
ZXRJc1NlbGVjdGVkOildKQotICAgICAgICBbdmlldyBzZXRJc1NlbGVjdGVkOmlzU2VsZWN0ZWRd
OwotfQotCi0tICh2b2lkKXdpbmRvd09iamVjdENsZWFyZWQKLXsKLSAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gZ2V0V2ViVmlldyhfZnJhbWUpOwotICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25zKHdlYlZpZXcpOwotICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRp
ZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jKQotICAgICAgICBDYWxsRnJhbWVMb2FkRGVs
ZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywg
d2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6
KSwgbV9mcmFtZS0+d2luZG93U2NyaXB0T2JqZWN0KCksIF9mcmFtZSk7Ci0gICAgZWxzZSBpZiAo
aW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jKQotICAgICAg
ICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmpl
Y3RBdmFpbGFibGVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzp3aW5kb3dTY3JpcHRP
YmplY3RBdmFpbGFibGU6KSwgbV9mcmFtZS0+d2luZG93U2NyaXB0T2JqZWN0KCkpOwotCi0gICAg
aWYgKFt3ZWJWaWV3IHNjcmlwdERlYnVnRGVsZWdhdGVdIHx8IFtXZWJTY3JpcHREZWJ1Z1NlcnZl
ciBsaXN0ZW5lckNvdW50XSkgewotICAgICAgICBbX2ZyYW1lIF9kZXRhY2hTY3JpcHREZWJ1Z2dl
cl07Ci0gICAgICAgIFtfZnJhbWUgX2F0dGFjaFNjcmlwdERlYnVnZ2VyXTsKLSAgICB9Ci19Ci0K
LS0gKEJPT0wpX2NvbXBhcmVEYXNoYm9hcmRSZWdpb25zOihOU0RpY3Rpb25hcnkgKilyZWdpb25z
Ci17Ci0gICAgcmV0dXJuIFtsYXN0RGFzaGJvYXJkUmVnaW9ucyBpc0VxdWFsVG9EaWN0aW9uYXJ5
OnJlZ2lvbnNdOwotfQotCi0tICh2b2lkKWRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOihOU011dGFi
bGVEaWN0aW9uYXJ5ICopcmVnaW9ucwotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3
ZWJWaWV3XTsKLSAgICBbd2ViVmlldyBfYWRkU2Nyb2xsZXJEYXNoYm9hcmRSZWdpb25zOnJlZ2lv
bnNdOwotCi0gICAgaWYgKCFbc2VsZiBfY29tcGFyZURhc2hib2FyZFJlZ2lvbnM6cmVnaW9uc10p
IHsKLSAgICAgICAgQ2FsbFVJRGVsZWdhdGUod2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGFz
aGJvYXJkUmVnaW9uc0NoYW5nZWQ6KSwgcmVnaW9ucyk7Ci0KLSAgICAgICAgW2xhc3REYXNoYm9h
cmRSZWdpb25zIHJlbGVhc2VdOwotICAgICAgICBsYXN0RGFzaGJvYXJkUmVnaW9ucyA9IFtyZWdp
b25zIHJldGFpbl07Ci0gICAgfQotfQotCi0tICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAq
KW1lbnUKLXsKLSAgICBDYWxsVUlEZWxlZ2F0ZShbc2VsZiB3ZWJWaWV3XSwgQHNlbGVjdG9yKHdl
YlZpZXc6d2lsbFBvcHVwTWVudTopLCBtZW51KTsKLX0KLQotLSAoTlNSZWN0KWN1c3RvbUhpZ2hs
aWdodFJlY3Q6KE5TU3RyaW5nKil0eXBlIGZvckxpbmU6KE5TUmVjdClsaW5lUmVjdCByZXByZXNl
bnRlZE5vZGU6KFdlYkNvcmU6Ok5vZGUgKilub2RlCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBu
aWwpOwotICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tfZnJhbWUgZnJhbWVWaWV3XSBkb2N1
bWVudFZpZXddOwotICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1M
VmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkhUTUxW
aWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKLSAgICBpZDxX
ZWJIVE1MSGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVyID0gW3dlYkhUTUxWaWV3IF9oaWdobGlnaHRl
ckZvclR5cGU6dHlwZV07Ci0gICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGhpZ2hsaWdodFJlY3RGb3JMaW5lOnJlcHJlc2VudGVkTm9k
ZTopXSkKLSAgICAgICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTps
aW5lUmVjdCByZXByZXNlbnRlZE5vZGU6a2l0KG5vZGUpXTsKLSAgICByZXR1cm4gW2hpZ2hsaWdo
dGVyIGhpZ2hsaWdodFJlY3RGb3JMaW5lOmxpbmVSZWN0XTsKLX0KLQotLSAodm9pZClwYWludEN1
c3RvbUhpZ2hsaWdodDooTlNTdHJpbmcqKXR5cGUgZm9yQm94OihOU1JlY3QpYm94UmVjdCBvbkxp
bmU6KE5TUmVjdClsaW5lUmVjdCBiZWhpbmRUZXh0OihCT09MKXRleHQgZW50aXJlTGluZTooQk9P
TClsaW5lIHJlcHJlc2VudGVkTm9kZTooV2ViQ29yZTo6Tm9kZSAqKW5vZGUKLXsKLSAgICBBU1NF
UlQoX2ZyYW1lICE9IG5pbCk7Ci0gICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW19mcmFtZSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkhU
TUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKLSAgICBp
ZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVyID0gW3dlYkhUTUxWaWV3IF9oaWdobGln
aHRlckZvclR5cGU6dHlwZV07Ci0gICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBhaW50SGlnaGxpZ2h0Rm9yQm94Om9uTGluZTpiZWhp
bmRUZXh0OmVudGlyZUxpbmU6cmVwcmVzZW50ZWROb2RlOildKQotICAgICAgICBbaGlnaGxpZ2h0
ZXIgcGFpbnRIaWdobGlnaHRGb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVoaW5kVGV4
dDp0ZXh0IGVudGlyZUxpbmU6bGluZSByZXByZXNlbnRlZE5vZGU6a2l0KG5vZGUpXTsKLSAgICBl
bHNlCi0gICAgICAgIFtoaWdobGlnaHRlciBwYWludEhpZ2hsaWdodEZvckJveDpib3hSZWN0IG9u
TGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OnRleHQgZW50aXJlTGluZTpsaW5lXTsKLX0KLQogQGVu
ZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCShyZXZpc2lvbiAzMDcxMikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAK
ICNpbXBvcnQgIldlYkNhY2hlZFBhZ2VQbGF0Zm9ybURhdGEuaCIKICNpbXBvcnQgIldlYkNocm9t
ZUNsaWVudC5oIgogI2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCi0jaW1wb3J0ICJX
ZWJQb2xpY3lEZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYkRvY3VtZW50SW50ZXJuYWwu
aCIKICNpbXBvcnQgIldlYkRvY3VtZW50TG9hZGVyTWFjLmgiCiAjaW1wb3J0ICJXZWJEb3dubG9h
ZEludGVybmFsLmgiCkBAIC00OSw4ICs0OCw4IEBACiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFs
LmgiCiAjaW1wb3J0ICJXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVW
aWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvbi5oIgotI2ltcG9y
dCAiV2ViSFRNTFZpZXcuaCIKKyNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUu
aCIKKyNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhpc3RvcnlJ
dGVtSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhpc3RvcnlJdGVtUHJpdmF0ZS5oIgogI2ltcG9y
dCAiV2ViSGlzdG9yeVByaXZhdGUuaCIKQEAgLTU5LDggKzU4LDE1IEBACiAjaW1wb3J0ICJXZWJL
aXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgogI2ltcG9ydCAi
V2ViTlNVUkxFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3
LmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaCIKKyNpbXBvcnQgIldlYk51
bGxQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5o
IgorI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViUGx1Z2luUGFj
a2FnZS5oIgorI2ltcG9ydCAiV2ViUGx1Z2luVmlld0ZhY3RvcnlQcml2YXRlLmgiCiAjaW1wb3J0
ICJXZWJQb2xpY3lEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2ViUG9saWN5RGVsZWdhdGVQcml2YXRl
LmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2Fk
RGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0ZS5oIgpAQCAtNjgsNiArNzQs
NyBAQAogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVBy
aXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNo
ZWRQYWdlLmg+CkBAIC03NiwxNSArODMsMTYgQEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRM
b2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0Zvcm1TdGF0ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbkRhdGFi
YXNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJMRXh0cmFzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3Ry
aW5nLmg+CkBAIC05Miw5ICsxMDAsOSBAQAogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRs
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGcmFtZUJyaWRnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlT2JqQ0V4dHJhcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViS2l0L0RPTUhUTUxGb3JtRWxlbWVudC5oPgpAQCAtMTA0LDEzICsxMTIsMTQg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC8vIFNQSSBmb3IgTlNVUkxEb3dubG9hZAog
Ly8gTmVlZGVkIGZvciA8cmRhcjovL3Byb2JsZW0vNTEyMTg1MD4gCi1AaW50ZXJmYWNlIE5TVVJM
RG93bmxvYWQgKE5TVVJMRG93bmxvYWRQcml2YXRlKQorQGludGVyZmFjZSBOU1VSTERvd25sb2Fk
IChXZWJOU1VSTERvd25sb2FkRGV0YWlscykKIC0gKHZvaWQpX3NldE9yaWdpbmF0aW5nVVJMOihO
U1VSTCAqKW9yaWdpbmF0aW5nVVJMOwogQGVuZAogCi1AaW50ZXJmYWNlIFdlYkhpc3RvcnlJdGVt
IChXZWJIaXN0b3J5SXRlbVByaXZhdGUpCi0tIChCT09MKV93YXNVc2VyR2VzdHVyZTsKLUBlbmQK
Ky8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFdlYktpdCBwbHVnLWlu
cy4KK05TU3RyaW5nICpXZWJQbHVnaW5CYXNlVVJMS2V5ID0gQCJXZWJQbHVnaW5CYXNlVVJMIjsK
K05TU3RyaW5nICpXZWJQbHVnaW5BdHRyaWJ1dGVzS2V5ID0gQCJXZWJQbHVnaW5BdHRyaWJ1dGVz
IjsKK05TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJLZXkgPSBAIldlYlBsdWdpbkNvbnRhaW5l
ciI7CiAKIEBpbnRlcmZhY2UgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lciA6IE5TT2JqZWN0IDxXZWJQ
b2xpY3lEZWNpc2lvbkxpc3RlbmVyLCBXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyPgogewpAQCAt
MjMyLDkgKzI0MSw5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE9yaWdpbmFsVVIK
ICAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0ICpoaXN0b3J5ID0gW3dlYlZpZXcgYmFja0Zvcndh
cmRMaXN0XTsKICAgICAgICAgaW50IGJhY2tMaXN0Q291bnQgPSBbaGlzdG9yeSBiYWNrTGlzdENv
dW50XTsKICAgICAgICAgZm9yIChpbnQgYmFja0luZGV4ID0gMDsgYmFja0luZGV4IDw9IGJhY2tM
aXN0Q291bnQgJiYgIW9yaWdpbmFsVVJMOyBiYWNrSW5kZXgrKykgewotICAgICAgICAgICAgV2Vi
SGlzdG9yeUl0ZW0gKmN1cnJlbnRJdGVtID0gW2hpc3RvcnkgaXRlbUF0SW5kZXg6LWJhY2tJbmRl
eF07Ci0gICAgICAgICAgICBpZiAoIVtjdXJyZW50SXRlbSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93YXNVc2VyR2VzdHVyZSldIHx8IFtjdXJyZW50SXRlbSBfd2FzVXNlckdlc3R1cmVd
KQotICAgICAgICAgICAgICAgIG9yaWdpbmFsVVJMID0gW2N1cnJlbnRJdGVtIFVSTF07CisgICAg
ICAgICAgICAvLyBGSVhNRTogQXQgb25lIHBvaW50IHdlIGhhZCBjb2RlIGhlcmUgdG8gY2hlY2sg
YSAid2FzIHVzZXIgZ2VzdHVyZSIgZmxhZy4KKyAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8g
cmVzdG9yZSB0aGF0IGxvZ2ljPworICAgICAgICAgICAgb3JpZ2luYWxVUkwgPSBbW2hpc3Rvcnkg
aXRlbUF0SW5kZXg6LWJhY2tJbmRleF0gVVJMXTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTEw
MSwzMyArMTExMCwxMDEgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQ2FjaGVQYWdl
KAogfQogCiBQYXNzUmVmUHRyPEZyYW1lPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJh
bWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1h
cmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQorICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIs
IGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQp
CiB7Ci0gICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5i
cmlkZ2U7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIAotICAgIHJldHVy
biBbYnJpZGdlIGNyZWF0ZUNoaWxkRnJhbWVOYW1lZDpuYW1lCi0gICAgICAgICAgICAgICAgICAg
d2l0aFVSTDp1cmwKLSAgICAgICAgICAgICAgICAgICByZWZlcnJlcjpyZWZlcnJlciAKLSAgICAg
ICAgICAgICAgICAgICBvd25lckVsZW1lbnQ6b3duZXJFbGVtZW50Ci0gICAgICAgICAgICAgICAg
ICAgYWxsb3dzU2Nyb2xsaW5nOmFsbG93c1Njcm9sbGluZwotICAgICAgICAgICAgICAgICAgIG1h
cmdpbldpZHRoOm1hcmdpbldpZHRoCi0gICAgICAgICAgICAgICAgICAgbWFyZ2luSGVpZ2h0Om1h
cmdpbkhlaWdodF07CisgICAgQVNTRVJUKG1fd2ViRnJhbWUpOworICAgIAorICAgIFdlYkZyYW1l
VmlldyAqY2hpbGRWaWV3ID0gW1tXZWJGcmFtZVZpZXcgYWxsb2NdIGluaXRdOworICAgIFtjaGls
ZFZpZXcgc2V0QWxsb3dzU2Nyb2xsaW5nOmFsbG93c1Njcm9sbGluZ107CisgICAgW2NoaWxkVmll
dyBfc2V0TWFyZ2luV2lkdGg6bWFyZ2luV2lkdGhdOworICAgIFtjaGlsZFZpZXcgX3NldE1hcmdp
bkhlaWdodDptYXJnaW5IZWlnaHRdOworCisgICAgV2ViRnJhbWVCcmlkZ2UgKm5ld0JyaWRnZSA9
IFtbV2ViRnJhbWVCcmlkZ2UgYWxsb2NdIGluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6b3du
ZXJFbGVtZW50IGZyYW1lTmFtZTpuYW1lIGZyYW1lVmlldzpjaGlsZFZpZXddOworICAgIFtjaGls
ZFZpZXcgcmVsZWFzZV07CisKKyAgICBpZiAoIW5ld0JyaWRnZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBbbV93ZWJGcmFtZS5nZXQoKSBfYWRkQ2hpbGQ6W25ld0JyaWRnZSB3ZWJGcmFtZV1d
OworICAgIFtuZXdCcmlkZ2UgcmVsZWFzZV07CisKKyAgICBSZWZQdHI8RnJhbWU+IG5ld0ZyYW1l
ID0gW25ld0JyaWRnZSBfZnJhbWVdOworICAgIAorICAgIFttX3dlYkZyYW1lLmdldCgpIF9sb2Fk
VVJMOnVybCByZWZlcnJlcjpyZWZlcnJlciBpbnRvQ2hpbGQ6a2l0KG5ld0ZyYW1lLmdldCgpKV07
CisKKyAgICAvLyBUaGUgZnJhbWUncyBvbmxvYWQgaGFuZGxlciBtYXkgaGF2ZSByZW1vdmVkIGl0
IGZyb20gdGhlIGRvY3VtZW50LgorICAgIGlmICghbmV3RnJhbWUtPnRyZWUoKS0+cGFyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5ld0ZyYW1lLmdldCgpOwogCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwogICAgIHJldHVybiAwOwogfQogCiBPYmplY3RD
b250ZW50VHlwZSBXZWJGcmFtZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIFdlYkZyYW1lQnJpZGdl
KiBicmlkZ2UgPSBtX3dlYkZyYW1lLT5fcHJpdmF0ZS0+YnJpZGdlOwogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW2JyaWRnZSBkZXRlcm1pbmVPYmplY3RGcm9t
TUlNRVR5cGU6bWltZVR5cGUgVVJMOnVybF07CisKKyAgICAvLyBUaGlzIGlzIGEgcXVpcmsgdGhh
dCBlbnN1cmVzIFRpZ2VyIE1haWwncyBXZWJLaXQgcGx1Zy1pbiB3aWxsIGxvYWQgZHVyaW5nIGxh
eW91dAorICAgIC8vIGFuZCBub3QgYXR0YWNoIHRpbWUuICg1NTIwNTQxKQorICAgIHN0YXRpYyBC
T09MIGlzVGlnZXJNYWlsID0gV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5t
YWlsIiwgLTEsIDMuMCk7CisgICAgaWYgKGlzVGlnZXJNYWlsICYmIG1pbWVUeXBlID09ICJhcHBs
aWNhdGlvbi94LWFwcGxlLW1zZy1hdHRhY2htZW50IikKKyAgICAgICAgcmV0dXJuIE9iamVjdENv
bnRlbnROZXRzY2FwZVBsdWdpbjsKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGU7CisKKyAg
ICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIGd1ZXNzIHRoZSBNSU1F
IHR5cGUgYmFzZWQgb2ZmIHRoZSBleHRlbnNpb24uCisgICAgICAgIE5TVVJMICpVUkwgPSB1cmw7
CisgICAgICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBbW1VSTCBwYXRoXSBwYXRoRXh0ZW5zaW9u
XTsKKyAgICAgICAgaWYgKFtleHRlbnNpb24gbGVuZ3RoXSA+IDApIHsKKyAgICAgICAgICAgIHR5
cGUgPSBXS0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisgICAgICAgICAgICBp
ZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBubyBNSU1FIHR5cGUg
aXMgc3BlY2lmaWVkLCB1c2UgYSBwbHVnLWluIGlmIHdlIGhhdmUgb25lIHRoYXQgY2FuIGhhbmRs
ZSB0aGUgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIGlmIChXZWJCYXNlUGx1Z2luUGFja2Fn
ZSAqcGFja2FnZSA9IFtnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpIF9wbHVnaW5Gb3JFeHRl
bnNpb246ZXh0ZW5zaW9uXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoW3BhY2thZ2UgaXNL
aW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKSAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47CisjaWZuZGVmIF9fTFA2NF9f
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKFtwYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFz
c11dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2Nh
cGVQbHVnaW47CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsgLy8gR28gYWhlYWQgYW5k
IGhvcGUgdGhhdCB3ZSBjYW4gZGlzcGxheSB0aGUgY29udGVudC4KKworICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCisgICAgICAgIHJldHVy
biBPYmplY3RDb250ZW50SW1hZ2U7CisKKyAgICBpZiAoV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBh
Y2thZ2UgPSBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSBfcGx1Z2luRm9yTUlNRVR5cGU6
dHlwZV0pIHsKKyNpZm5kZWYgX19MUDY0X18KKyAgICAgICAgaWYgKFtwYWNrYWdlIGlzS2luZE9m
Q2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbGFzc11dKQorICAgICAgICAgICAgcmV0
dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKyNlbmRpZgorICAgICAgICBBU1NFUlQo
W3BhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKTsKKyAgICAg
ICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsKKyAgICB9CisKKyAgICBpZiAoW1dl
YkZyYW1lVmlldyBfdmlld0NsYXNzRm9yTUlNRVR5cGU6dHlwZV0pCisgICAgICAgIHJldHVybiBP
YmplY3RDb250ZW50RnJhbWU7CisgICAgCisgICAgcmV0dXJuIE9iamVjdENvbnRlbnROb25lOwor
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwogICAgIHJldHVybiBPYmplY3RDb250
ZW50Tm9uZTsKIH0KIAotc3RhdGljIE5TQXJyYXkqIG5zQXJyYXkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHZlY3RvcikKK3N0YXRpYyBOU011dGFibGVBcnJheSoga2l0KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2ZWN0b3IpCiB7CiAgICAgdW5zaWduZWQgbGVuID0gdmVjdG9yLnNpemUoKTsKICAgICBO
U011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
bGVuXTsKQEAgLTExMzYsMTkgKzEyMTMsMTU2IEBAIHN0YXRpYyBOU0FycmF5KiBuc0FycmF5KGNv
bnN0IFZlY3RvcjxTdHIKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVdpZGdldCogV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCitzdGF0aWMgU3RyaW5nIHBhcmFtZXRlclZhbHVlKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBXZWJGcmFtZUJyaWRnZSogYnJpZGdlID0gbV93ZWJGcmFt
ZS0+X3ByaXZhdGUtPmJyaWRnZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgp
OworICAgIEFTU0VSVChzaXplID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHBhcmFtTmFtZXNbaV0sIG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWVzW2ld
OworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBOU1ZpZXcgKnBsdWdp
blZpZXcoV2ViRnJhbWUgKmZyYW1lLCBXZWJQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlLAor
ICAgIE5TQXJyYXkgKmF0dHJpYnV0ZU5hbWVzLCBOU0FycmF5ICphdHRyaWJ1dGVWYWx1ZXMsIE5T
VVJMICpiYXNlVVJMLAorICAgIERPTUVsZW1lbnQgKmVsZW1lbnQsIEJPT0wgbG9hZE1hbnVhbGx5
KQoreworICAgIFdlYkhUTUxWaWV3ICpkb2NWaWV3ID0gKFdlYkhUTUxWaWV3ICopW1tmcmFtZSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgQVNTRVJUKFtkb2NWaWV3IGlzS2luZE9mQ2xh
c3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOworICAgICAgICAKKyAgICBXZWJQbHVnaW5Db250cm9s
bGVyICpwbHVnaW5Db250cm9sbGVyID0gW2RvY1ZpZXcgX3BsdWdpbkNvbnRyb2xsZXJdOworICAg
IAorICAgIC8vIFN0b3JlIGF0dHJpYnV0ZXMgaW4gYSBkaWN0aW9uYXJ5IHNvIHRoZXkgY2FuIGJl
IHBhc3NlZCB0byBXZWJQbHVnaW5zLgorICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJpYnV0
ZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czphdHRyaWJ1
dGVWYWx1ZXMgZm9yS2V5czphdHRyaWJ1dGVOYW1lc107CisgICAgCisgICAgW3BsdWdpblBhY2th
Z2UgbG9hZF07CisgICAgQ2xhc3Mgdmlld0ZhY3RvcnkgPSBbcGx1Z2luUGFja2FnZSB2aWV3RmFj
dG9yeV07CisgICAgCisgICAgTlNWaWV3ICp2aWV3ID0gbmlsOworICAgIE5TRGljdGlvbmFyeSAq
YXJndW1lbnRzID0gbmlsOworICAgIAorICAgIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czopXSkgeworICAgICAgICBh
cmd1bWVudHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Cisg
ICAgICAgICAgICBiYXNlVVJMLCBXZWJQbHVnSW5CYXNlVVJMS2V5LAorICAgICAgICAgICAgYXR0
cmlidXRlcywgV2ViUGx1Z0luQXR0cmlidXRlc0tleSwKKyAgICAgICAgICAgIHBsdWdpbkNvbnRy
b2xsZXIsIFdlYlBsdWdJbkNvbnRhaW5lcktleSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoSW50OmxvYWRNYW51YWxseSA/IFdlYlBsdWdJbk1vZGVGdWxsIDogV2ViUGx1Z0luTW9k
ZUVtYmVkXSwgV2ViUGx1Z0luTW9kZUtleSwKKyAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDohbG9hZE1hbnVhbGx5XSwgV2ViUGx1Z0luU2hvdWxkTG9hZE1haW5SZXNvdXJjZUtl
eSwKKyAgICAgICAgICAgIGVsZW1lbnQsIFdlYlBsdWdJbkNvbnRhaW5pbmdFbGVtZW50S2V5LAor
ICAgICAgICAgICAgbmlsXTsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJhcmd1bWVudHM6XG4lQCIs
IGFyZ3VtZW50cyk7CisgICAgfSBlbHNlIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czopXSkgeworICAgICAgICBhcmd1
bWVudHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAg
ICAgICAgICBiYXNlVVJMLCBXZWJQbHVnaW5CYXNlVVJMS2V5LAorICAgICAgICAgICAgYXR0cmli
dXRlcywgV2ViUGx1Z2luQXR0cmlidXRlc0tleSwKKyAgICAgICAgICAgIHBsdWdpbkNvbnRyb2xs
ZXIsIFdlYlBsdWdpbkNvbnRhaW5lcktleSwKKyAgICAgICAgICAgIGVsZW1lbnQsIFdlYlBsdWdJ
bkNvbnRhaW5pbmdFbGVtZW50S2V5LAorICAgICAgICAgICAgbmlsXTsKKyAgICAgICAgTE9HKFBs
dWdpbnMsICJhcmd1bWVudHM6XG4lQCIsIGFyZ3VtZW50cyk7CisgICAgfQorCisgICAgdmlldyA9
IFtXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50cyBm
cm9tUGx1Z2luUGFja2FnZTpwbHVnaW5QYWNrYWdlXTsKKyAgICBbYXR0cmlidXRlcyByZWxlYXNl
XTsKKyAgICByZXR1cm4gdmlldzsKK30KIAorV2lkZ2V0KiBXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKK3sKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
cmV0dXJuIG5ldyBXaWRnZXQoW2JyaWRnZSB2aWV3Rm9yUGx1Z2luV2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1cmwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpuc0Fy
cmF5KHBhcmFtVmFsdWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTptaW1lVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRE9NRWxlbWVudDpbRE9NRWxlbWVudCBfd3JhcEVsZW1lbnQ6ZWxlbWVudF0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6bG9hZE1h
bnVhbGx5XSk7CisKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMu
c2l6ZSgpKTsKKworICAgIGludCBlcnJvckNvZGUgPSAwOworCisgICAgV2ViVmlldyAqd2ViVmll
dyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgU0VMIHNlbGVjdG9yID0gQHNl
bGVjdG9yKHdlYlZpZXc6cGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KTsKKyAgICBOU1VSTCAqVVJM
ID0gdXJsOworCisgICAgaWYgKFtbd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0
b3I6c2VsZWN0b3JdKSB7CisgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJpYnV0ZXMg
PSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpraXQocGFyYW1O
YW1lcykgZm9yS2V5czpraXQocGFyYW1WYWx1ZXMpXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICph
cmd1bWVudHMgPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoK
KyAgICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdJbkF0dHJpYnV0ZXNLZXksCisgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsb2FkTWFudWFsbHkgPyBXZWJQbHVnSW5Nb2Rl
RnVsbCA6IFdlYlBsdWdJbk1vZGVFbWJlZF0sIFdlYlBsdWdJbk1vZGVLZXksCisgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IWxvYWRNYW51YWxseV0sIFdlYlBsdWdJblNob3Vs
ZExvYWRNYWluUmVzb3VyY2VLZXksCisgICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVnSW5Db250
YWluaW5nRWxlbWVudEtleSwKKyAgICAgICAgICAgIFVSTCwgV2ViUGx1Z0luQmFzZVVSTEtleSwg
Ly8gVVJMIG1pZ2h0IGJlIG5pbCwgc28gYWRkIGl0IGxhc3QKKyAgICAgICAgICAgIG5pbF07CisK
KyAgICAgICAgTlNWaWV3ICp2aWV3ID0gQ2FsbFVJRGVsZWdhdGUod2ViVmlldywgc2VsZWN0b3Is
IGFyZ3VtZW50cyk7CisKKyAgICAgICAgW2F0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgICAgIFth
cmd1bWVudHMgcmVsZWFzZV07CisKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICByZXR1
cm4gbmV3IFdpZGdldCh2aWV3KTsKKyAgICB9CisKKyAgICBOU1N0cmluZyAqTUlNRVR5cGU7Cisg
ICAgV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBsdWdpblBhY2thZ2U7CisgICAgaWYgKG1pbWVUeXBl
LmlzRW1wdHkoKSkgeworICAgICAgICBNSU1FVHlwZSA9IG5pbDsKKyAgICAgICAgcGx1Z2luUGFj
a2FnZSA9IG5pbDsKKyAgICB9IGVsc2UgeworICAgICAgICBNSU1FVHlwZSA9IG1pbWVUeXBlOwor
ICAgICAgICBwbHVnaW5QYWNrYWdlID0gW3dlYlZpZXcgX3BsdWdpbkZvck1JTUVUeXBlOm1pbWVU
eXBlXTsKKyAgICB9CisgICAgCisgICAgTlNTdHJpbmcgKmV4dGVuc2lvbiA9IFtbVVJMIHBhdGhd
IHBhdGhFeHRlbnNpb25dOworICAgIGlmICghcGx1Z2luUGFja2FnZSAmJiBbZXh0ZW5zaW9uIGxl
bmd0aF0gIT0gMCkgeworICAgICAgICBwbHVnaW5QYWNrYWdlID0gW3dlYlZpZXcgX3BsdWdpbkZv
ckV4dGVuc2lvbjpleHRlbnNpb25dOworICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgeworICAg
ICAgICAgICAgTlNTdHJpbmcgKm5ld01JTUVUeXBlID0gW3BsdWdpblBhY2thZ2UgTUlNRVR5cGVG
b3JFeHRlbnNpb246ZXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIGlmIChbbmV3TUlNRVR5cGUgbGVu
Z3RoXSAhPSAwKQorICAgICAgICAgICAgICAgIE1JTUVUeXBlID0gbmV3TUlNRVR5cGU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7CisKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5kb2N1bWVudCgpOworICAgIE5TVVJM
ICpiYXNlVVJMID0gZG9jdW1lbnQtPmJhc2VVUkwoKTsKKyAgICBpZiAocGx1Z2luUGFja2FnZSkg
eworICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFj
a2FnZSBjbGFzc11dKQorICAgICAgICAgICAgdmlldyA9IHBsdWdpblZpZXcobV93ZWJGcmFtZS5n
ZXQoKSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlLCBraXQocGFyYW1OYW1lcyks
IGtpdChwYXJhbVZhbHVlcyksIGJhc2VVUkwsIGtpdChlbGVtZW50KSwgbG9hZE1hbnVhbGx5KTsK
KyAgICAgICAgICAgIAorI2lmbmRlZiBfX0xQNjRfXworICAgICAgICBlbHNlIGlmIChbcGx1Z2lu
UGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkg
eworICAgICAgICAgICAgV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgKmVtYmVkZGVkVmll
dyA9IFtbW1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3IGFsbG9jXQorICAgICAgICAgICAg
ICAgIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpCisgICAgICAgICAgICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQbHVnaW5Q
YWNrYWdlICopcGx1Z2luUGFja2FnZQorICAgICAgICAgICAgICAgIFVSTDpVUkwKKyAgICAgICAg
ICAgICAgICBiYXNlVVJMOmJhc2VVUkwKKyAgICAgICAgICAgICAgICBNSU1FVHlwZTpNSU1FVHlw
ZQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUtleXM6a2l0KHBhcmFtTmFtZXMpCisgICAgICAg
ICAgICAgICAgYXR0cmlidXRlVmFsdWVzOmtpdChwYXJhbVZhbHVlcykKKyAgICAgICAgICAgICAg
ICBsb2FkTWFudWFsbHk6bG9hZE1hbnVhbGx5CisgICAgICAgICAgICAgICAgRE9NRWxlbWVudDpr
aXQoZWxlbWVudCldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgIHZpZXcgPSBlbWJlZGRlZFZp
ZXc7CisgICAgICAgIH0gCisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgZXJyb3JDb2RlID0g
V2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luOworCisgICAgaWYgKCFlcnJvckNvZGUgJiYgIXZp
ZXcpCisgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbjsKKwor
ICAgIGlmIChlcnJvckNvZGUpIHsKKyAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBbW05TRXJyb3Ig
YWxsb2NdIF9pbml0V2l0aFBsdWdpbkVycm9yQ29kZTplcnJvckNvZGUKKyAgICAgICAgICAgIGNv
bnRlbnRVUkw6VVJMCisgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOmRvY3VtZW50LT5jb21wbGV0
ZVVSTChwYXJzZVVSTChwYXJhbWV0ZXJWYWx1ZShwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgInBs
dWdpbnNwYWdlIikpKQorICAgICAgICAgICAgcGx1Z2luTmFtZTpbcGx1Z2luUGFja2FnZSBuYW1l
XQorICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5cGVdOworICAgICAgICBXZWJOdWxsUGx1Z2lu
VmlldyAqbnVsbFZpZXcgPSBbW1tXZWJOdWxsUGx1Z2luVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
ICAgIGVycm9yOmVycm9yIERPTUVsZW1lbnQ6a2l0KGVsZW1lbnQpXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIHZpZXcgPSBudWxsVmlldzsKKyAgICAgICAgW2Vycm9yIHJlbGVhc2VdOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQodmlldyk7CisgICAgcmV0dXJuIG5ldyBXaWRnZXQodmlldyk7CisK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAgcmV0dXJuIDA7CkBAIC0xMTU3
LDI1ICsxMzcxLDkxIEBAIFdpZGdldCogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWcK
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCog
cGx1Z2luV2lkZ2V0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBb
bV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZSByZWRpcmVjdERhdGFUb1BsdWdpbjpwbHVnaW5X
aWRnZXQtPmdldFZpZXcoKV07CisKKyAgICBXZWJIVE1MUmVwcmVzZW50YXRpb24gKnJlcHJlc2Vu
dGF0aW9uID0gKFdlYkhUTUxSZXByZXNlbnRhdGlvbiAqKVtbbV93ZWJGcmFtZS5nZXQoKSBfZGF0
YVNvdXJjZV0gcmVwcmVzZW50YXRpb25dOworCisgICAgTlNWaWV3ICpwbHVnaW5WaWV3ID0gcGx1
Z2luV2lkZ2V0LT5nZXRWaWV3KCk7CisKKyNpZm5kZWYgX19MUDY0X18KKyAgICBpZiAoW3BsdWdp
blZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgY2xhc3Nd
XSkKKyAgICAgICAgW3JlcHJlc2VudGF0aW9uIF9yZWRpcmVjdERhdGFUb01hbnVhbExvYWRlcjoo
V2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcgKilwbHVnaW5WaWV3IGZvclBsdWdpblZpZXc6
cGx1Z2luVmlld107CisgICAgZWxzZSB7CisjZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgICBX
ZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gKFdlYkhUTUxWaWV3ICopW1ttX3dlYkZyYW1lLmdl
dCgpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgQVNTRVJUKFtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7CisgICAgICAgIFtyZXByZXNl
bnRhdGlvbiBfcmVkaXJlY3REYXRhVG9NYW51YWxMb2FkZXI6W2RvY3VtZW50VmlldyBfcGx1Z2lu
Q29udHJvbGxlcl0gZm9yUGx1Z2luVmlldzpwbHVnaW5WaWV3XTsKKyAgICB9CisKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiBXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQorICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMpCiB7Ci0gICAgV2lkZ2V0KiByZXN1bHQgPSBuZXcgV2lkZ2V0OwotICAgIAogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBXZWJGcmFtZUJyaWRnZSogYnJpZGdlID0g
bV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZTsKLSAgICByZXN1bHQtPnNldFZpZXcoW2JyaWRn
ZSB2aWV3Rm9ySmF2YUFwcGxldFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVO
YW1lczpuc0FycmF5KHBhcmFtTmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlVmFsdWVzOm5zQXJyYXkocGFyYW1WYWx1ZXMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxl
bWVudDpbRE9NRWxlbWVudCBfd3JhcEVsZW1lbnQ6ZWxlbWVudF1dKTsgICAgCisKKyAgICBOU1Zp
ZXcgKnZpZXcgPSBuaWw7CisKKyAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBAImFwcGxpY2F0aW9u
L3gtamF2YS1hcHBsZXQiOworICAgIAorICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3
KG1fd2ViRnJhbWUuZ2V0KCkpOworCisgICAgV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBsdWdpblBh
Y2thZ2UgPSBbd2ViVmlldyBfcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdOworCisgICAgaWYg
KHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xh
c3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgeworICAgICAgICAgICAgLy8gRm9yIHNvbWUg
cmVhc29uLCB0aGUgSmF2YSBwbHVnLWluIHJlcXVpcmVzIHRoYXQgd2UgcGFzcyB0aGUgZGltZW5z
aW9uIG9mIHRoZSBwbHVnLWluIGFzIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBOU011dGFibGVB
cnJheSAqbmFtZXMgPSBraXQocGFyYW1OYW1lcyk7CisgICAgICAgICAgICBOU011dGFibGVBcnJh
eSAqdmFsdWVzID0ga2l0KHBhcmFtVmFsdWVzKTsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJW
YWx1ZShwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgIndpZHRoIikuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OkAid2lkdGgiXTsKKyAgICAgICAgICAgICAgICBb
dmFsdWVzIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgc2l6ZS53
aWR0aCgpXV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUo
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJoZWlnaHQiKS5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIFtuYW1lcyBhZGRPYmplY3Q6QCJoZWlnaHQiXTsKKyAgICAgICAgICAgICAgICBbdmFs
dWVzIGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgc2l6ZS53aWR0
aCgpXV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2aWV3ID0gcGx1Z2luVmlldyhtX3dl
YkZyYW1lLmdldCgpLCAoV2ViUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UsIG5hbWVzLCB2
YWx1ZXMsIGJhc2VVUkwsIGtpdChlbGVtZW50KSwgTk8pOworICAgICAgICAgICAgW25hbWVzIHJl
bGVhc2VdOworICAgICAgICAgICAgW3ZhbHVlcyByZWxlYXNlXTsKKyAgICAgICAgICAgIAorICAg
ICAgICB9IAorI2lmbmRlZiBfX0xQNjRfXworICAgICAgICBlbHNlIGlmIChbcGx1Z2luUGFja2Fn
ZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkgeworICAg
ICAgICAgICAgdmlldyA9IFtbW1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KQorICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2Fn
ZSAqKXBsdWdpblBhY2thZ2UKKyAgICAgICAgICAgICAgICBVUkw6bmlsCisgICAgICAgICAgICAg
ICAgYmFzZVVSTDpiYXNlVVJMCisgICAgICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5cGUKKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVLZXlzOmtpdChwYXJhbU5hbWVzKQorICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZVZhbHVlczpraXQocGFyYW1WYWx1ZXMpCisgICAgICAgICAgICAgICAgbG9h
ZE1hbnVhbGx5Ok5PCisgICAgICAgICAgICAgICAgRE9NRWxlbWVudDpraXQoZWxlbWVudCldIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIXZpZXcpIHsKKyAg
ICAgICAgTlNFcnJvciAqZXJyb3IgPSBbW05TRXJyb3IgYWxsb2NdIF9pbml0V2l0aFBsdWdpbkVy
cm9yQ29kZTpXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZQorICAgICAgICAgICAgY29udGVudFVS
TDpuaWwKKyAgICAgICAgICAgIHBsdWdpblBhZ2VVUkw6bmlsCisgICAgICAgICAgICBwbHVnaW5O
YW1lOltwbHVnaW5QYWNrYWdlIG5hbWVdCisgICAgICAgICAgICBNSU1FVHlwZTpNSU1FVHlwZV07
CisgICAgICAgIHZpZXcgPSBbW1tXZWJOdWxsUGx1Z2luVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
ICAgIGVycm9yOmVycm9yIERPTUVsZW1lbnQ6a2l0KGVsZW1lbnQpXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIFtlcnJvciByZWxlYXNlXTsKKyAgICB9CisKKyAgICBBU1NFUlQodmlldyk7CisgICAg
cmV0dXJuIG5ldyBXaWRnZXQodmlldyk7CisKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG5ldyBXaWRnZXQ7CiB9CiAK
IFN0cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdApA
QCAtMTE4OCw3ICsxNDY4LDIxIEBAIFN0cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6b3ZlcnJp
ZGVNZWQKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYXJlZCgp
CiB7Ci0gICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2Ugd2luZG93T2JqZWN0Q2xlYXJl
ZF07CisgICAgRnJhbWUgKmZyYW1lID0gY29yZShtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKKyAgICBXZWJGcmFt
ZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZp
ZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKKyAgICBpZiAo
aW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykgeworICAg
ICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRv
d09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJX
aW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKKyAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3JpcHRP
YmplY3QoKSwgbV93ZWJGcmFtZS5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChpbXBsZW1lbnRhdGlv
bnMtPndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZUZ1bmMpIHsKKyAgICAgICAgQ2FsbEZyYW1l
TG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxl
RnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6d2luZG93U2NyaXB0T2JqZWN0QXZhaWxh
YmxlOiksCisgICAgICAgICAgICBmcmFtZS0+d2luZG93U2NyaXB0T2JqZWN0KCkpOworICAgIH0K
KworICAgIGlmIChbd2ViVmlldyBzY3JpcHREZWJ1Z0RlbGVnYXRlXSB8fCBbV2ViU2NyaXB0RGVi
dWdTZXJ2ZXIgbGlzdGVuZXJDb3VudF0pIHsKKyAgICAgICAgW21fd2ViRnJhbWUuZ2V0KCkgX2Rl
dGFjaFNjcmlwdERlYnVnZ2VyXTsKKyAgICAgICAgW21fd2ViRnJhbWUuZ2V0KCkgX2F0dGFjaFNj
cmlwdERlYnVnZ2VyXTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJl
Z2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbikKSW5kZXg6IFdlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogLSAoaWQgPFdlYkhUTUxIaWdo
bGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcqKXR5cGU7CiAtIChXZWJGcmFt
ZSAqKV9mcmFtZTsKLS0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcjsKIC0gKHZvaWQpX2xvb2tVcElu
RGljdGlvbmFyeUZyb21NZW51OihpZClzZW5kZXI7CiAtICh2b2lkKV9ob3ZlckZlZWRiYWNrU3Vz
cGVuZGVkQ2hhbmdlZDsKIC0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDooV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCAqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihCT09MKXNob3VsZFNh
dmU7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMzA3MTIpCisrKyBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSwxMCBA
QCBtYWNybyh5YW5rQW5kU2VsZWN0KSBcCiAjZGVmaW5lIFdlYktpdE9yaWdpbmFsVG9wUHJpbnRp
bmdNYXJnaW5LZXkgQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiIKICNkZWZpbmUgV2ViS2l0T3Jp
Z2luYWxCb3R0b21QcmludGluZ01hcmdpbktleSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2lu
IgogCisjZGVmaW5lIEtleWJvYXJkVUlNb2RlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIEAiY29tLmFw
cGxlLktleWJvYXJkVUlNb2RlRGlkQ2hhbmdlIgorI2RlZmluZSBBcHBsZUtleWJvYXJkVUlNb2Rl
IENGU1RSKCJBcHBsZUtleWJvYXJkVUlNb2RlIikKKyNkZWZpbmUgVW5pdmVyc2FsQWNjZXNzRG9t
YWluIENGU1RSKCJjb20uYXBwbGUudW5pdmVyc2FsYWNjZXNzIikKKwogc3RhdGljIEJPT0wgc19k
aWRTZXRDYWNoZU1vZGVsOwogc3RhdGljIFdlYkNhY2hlTW9kZWwgc19jYWNoZU1vZGVsID0gV2Vi
Q2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCkBAIC0yOTQsOCArMjk4LDcgQEAgc3RhdGljIGlu
dCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0gMAogLSAoaWQpaW5pdFdpdGhUYXJnZXQ6KGlk
KXRhcmdldCBkZWZhdWx0VGFyZ2V0OihpZClkZWZhdWx0VGFyZ2V0IGNhdGNoRXhjZXB0aW9uczoo
Qk9PTCljYXRjaEV4Y2VwdGlvbnM7CiBAZW5kCiAKLUBpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUg
OiBOU09iamVjdAoteworQGludGVyZmFjZSBXZWJWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKIEBw
dWJsaWMKICAgICBQYWdlKiBwYWdlOwogICAgIApAQCAtMzY1LDYgKzM2OCw5IEBAIHN0YXRpYyBp
bnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9IDAKICAgICBXZWJQbHVnaW5EYXRhYmFzZSAq
cGx1Z2luRGF0YWJhc2U7CiAgICAgCiAgICAgSGFzaE1hcDx1bnNpZ25lZCBsb25nLCBSZXRhaW5Q
dHI8aWQ+ID4qIGlkZW50aWZpZXJNYXA7CisKKyAgICBCT09MIF9rZXlib2FyZFVJTW9kZUFjY2Vz
c2VkOworICAgIEtleWJvYXJkVUlNb2RlIF9rZXlib2FyZFVJTW9kZTsKIH0KIEBlbmQKIApAQCAt
NzQ0LDYgKzc1MCwxMyBAQCBzdGF0aWMgYm9vbCBkZWJ1Z1dpZGdldCA9IHRydWU7CiAgICAgLy8g
S2VlcCB0aGUgZ2xvYmFsIHBsdWctaW4gZGF0YWJhc2UgYWN0aXZlIHVudGlsIHRoZSBhcHAgdGVy
bWluYXRlcyB0byBhdm9pZCBoYXZpbmcgdG8gcmVsb2FkIHBsdWctaW4gYnVuZGxlcy4KICAgICBp
ZiAoIXBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgJiYgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5n
KQogICAgICAgICBbV2ViUGx1Z2luRGF0YWJhc2UgY2xvc2VTaGFyZWREYXRhYmFzZV07CisKKyAg
ICBpZiAoX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7CisgICAgICAgIFtbTlNE
aXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKKyAgICAgICAgICAg
IHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpLZXlib2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSAKKyAgICAgICAgICAgIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJQcmVmZXJl
bmNlc0NoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgfQogfQogCiArIChOU1N0
cmluZyAqKV9NSU1FVHlwZUZvckZpbGU6KE5TU3RyaW5nICopcGF0aApAQCAtNDE2OCw2ICs0MTgx
LDQ0IEBAIHN0YXRpYyBOU1N0cmluZyAqY3JlYXRlTWFjT1NYVmVyc2lvblN0cmkKICAgICAgICAg
Q0ZSZWxlYXNlKHNlbGYpOwogfQogCistICh2b2lkKV9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJv
bVByZWZlcmVuY2VzOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIENGUHJl
ZmVyZW5jZXNBcHBTeW5jaHJvbml6ZShVbml2ZXJzYWxBY2Nlc3NEb21haW4pOworCisgICAgQm9v
bGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdDsKKyAgICBpbnQgbW9kZSA9IENGUHJlZmVy
ZW5jZXNHZXRBcHBJbnRlZ2VyVmFsdWUoQXBwbGVLZXlib2FyZFVJTW9kZSwgVW5pdmVyc2FsQWNj
ZXNzRG9tYWluLCAma2V5RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQpOworICAgIAorICAgIC8vIFRo
ZSBrZXlib2FyZCBhY2Nlc3MgbW9kZSBpcyByZXBvcnRlZCBieSB0d28gYml0czoKKyAgICAvLyBC
aXQgMCBpcyBzZXQgaWYgZmVhdHVyZSBpcyBvbgorICAgIC8vIEJpdCAxIGlzIHNldCBpZiBmdWxs
IGtleWJvYXJkIGFjY2VzcyB3b3JrcyBmb3IgYW55IGNvbnRyb2wsIG5vdCBqdXN0IHRleHQgYm94
ZXMgYW5kIGxpc3RzCisgICAgLy8gV2UgcmVxdWlyZSBib3RoIGJpdHMgdG8gYmUgb24uCisgICAg
Ly8gSSBkbyBub3Qga25vdyB0aGF0IHdlIHdvdWxkIGV2ZXIgZ2V0IG9uZSBiaXQgb24gYW5kIHRo
ZSBvdGhlciBvZmYgc2luY2UKKyAgICAvLyBjaGVja2luZyB0aGUgY2hlY2tib3ggaW4gc3lzdGVt
IHByZWZlcmVuY2VzIHdoaWNoIGlzIG1hcmtlZCBhcyAiVHVybiBvbiBmdWxsIGtleWJvYXJkIGFj
Y2VzcyIKKyAgICAvLyB0dXJucyBvbiBib3RoIGJpdHMuCisgICAgX3ByaXZhdGUtPl9rZXlib2Fy
ZFVJTW9kZSA9IChtb2RlICYgMHgyKSA/IEtleWJvYXJkQWNjZXNzRnVsbCA6IEtleWJvYXJkQWNj
ZXNzRGVmYXVsdDsKKyAgICAKKyAgICAvLyBjaGVjayBmb3IgdGFiYmluZyB0byBsaW5rcworICAg
IGlmIChbX3ByaXZhdGUtPnByZWZlcmVuY2VzIHRhYnNUb0xpbmtzXSkKKyAgICAgICAgX3ByaXZh
dGUtPl9rZXlib2FyZFVJTW9kZSA9IChLZXlib2FyZFVJTW9kZSkoX3ByaXZhdGUtPl9rZXlib2Fy
ZFVJTW9kZSB8IEtleWJvYXJkQWNjZXNzVGFic1RvTGlua3MpOworfQorCistIChLZXlib2FyZFVJ
TW9kZSlfa2V5Ym9hcmRVSU1vZGUKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5fa2V5Ym9hcmRVSU1v
ZGVBY2Nlc3NlZCkgeworICAgICAgICBfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlQWNjZXNzZWQg
PSBZRVM7CisgICAgICAgIFtzZWxmIF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVu
Y2VzOm5pbF07CisgICAgICAgIAorICAgICAgICBbW05TRGlzdHJpYnV0ZWROb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gCisgICAgICAgICAgICBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczopIAor
ICAgICAgICAgICAgbmFtZTpLZXlib2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6bmlsXTsKKworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IAorICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJp
ZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKKyAgICAgICAgICAgICAgICAgICBu
YW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICB9
CisgICAgcmV0dXJuIF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGU7Cit9CisKIEBlbmQKIAogLy8g
V2UgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBjYWxsIHRoZSBkZWxlZ2F0ZXMgYW5kIGJsb2NrIGV4
Y2VwdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d0ludGVybmFsLmgJKHJldmlzaW9uIDMwNzEyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTcgQEAKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotLy8gVGhpcyBoZWFkZXIgY29udGFpbnMgV2ViVmlldyBkZWNsYXJhdGlvbnMg
dGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgV2ViIEtpdCwgYnV0IGFyZSBuZWl0aGVy
IFNQSSBub3IgQVBJLgorLy8gVGhpcyBoZWFkZXIgY29udGFpbnMgV2ViVmlldyBkZWNsYXJhdGlv
bnMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiBXZWJLaXQsIGJ1dCBhcmUgbmVpdGhlciBT
UEkgbm9yIEFQSS4KIAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbXBvcnQgIldlYlZp
ZXdQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAKICNpZmRlZiBfX2Nw
bHVzcGx1cworI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaD4KKyNlbmRp
ZgorCisjaWZkZWYgX19jcGx1c3BsdXMKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBL
ZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIEtVUkw7CkBAIC02Myw2ICs2Nyw3IEBAIHR5cGVkZWYg
V2ViQ29yZTo6UGFnZSBXZWJDb3JlUGFnZTsKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0lu
dGVybmFsKQogI2lmZGVmIF9fY3BsdXNwbHVzCiAtIChXZWJDb3JlOjpTdHJpbmcpX3VzZXJBZ2Vu
dEZvclVSTDooY29uc3QgV2ViQ29yZTo6S1VSTCYpdXJsOworLSAoV2ViQ29yZTo6S2V5Ym9hcmRV
SU1vZGUpX2tleWJvYXJkVUlNb2RlOwogI2VuZGlmCiBAZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19515</attachid>
            <date>2008-03-04 03:25:48 -0800</date>
            <delta_ts>2008-03-04 07:19:20 -0800</delta_ts>
            <desc>patch for just issuePasteCommand</desc>
            <filename>PasteBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>7254</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIFdlYkNvcmVGcmFtZUJyaWRnZSBpc3N1ZVBhc3RlQ29tYW5kIG1ldGhvZAorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0ZSk6
IE1vdmVkIHRoZSBNYWMtc3BlY2lmaWMgcGFydCBvZiB0aGlzIHRvIEVkaXRvck1hYy4KKyAgICAg
ICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnBhc3RlKTogQWRkZWQuIENhbGxzIHBhc3RlOiBvbiB0aGUgZG9jdW1lbnQgdmlldyAobm9ybWFs
bHkgYQorICAgICAgICBXZWJIVE1MVmlldykuIFdlIHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgZXZl
bnR1YWxseS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6IFJlbW92ZWQgaXNzdWVQYXN0ZUNvbW1h
bmQuCisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06IERpdHRvLgorICAgICAgICAqIHBh
Z2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oOiBEaXR0by4KKwogMjAwOC0wMy0wMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMzUsMTMgKzM1LDExIEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJh
Z21lbnQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTk1MCwzMCAr
OTQ4LDI2IEBAIHZvaWQgRWRpdG9yOjpjb3B5KCkKICAgICBkaWRXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKKwogdm9pZCBFZGl0b3I6OnBhc3Rl
KCkKIHsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgRG9jTG9hZGVyKiBs
b2FkZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKTsKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgLy8gdXNpbmcgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGNvZGUgYmVsb3cgcmVx
dWlyZXMgbW92aW5nIGFsbCBvZgotICAgIC8vIFdFQkhUTUxWaWV3OiBfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkIG92ZXIgdG8gUGFzdGVib2FyZE1hYy4KLSAgICBsb2FkZXItPnNldEFs
bG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0gICAgbV9mcmFtZS0+aXNzdWVQYXN0ZUNvbW1hbmQo
KTsKLSAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpOwotI2Vsc2UKICAg
ICBpZiAodHJ5REhUTUxQYXN0ZSgpKQogICAgICAgICByZXR1cm47ICAgICAvLyBESFRNTCBkaWQg
dGhlIHdob2xlIG9wZXJhdGlvbgogICAgIGlmICghY2FuUGFzdGUoKSkKICAgICAgICAgcmV0dXJu
OworICAgIERvY0xvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVy
KCk7CiAgICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKHRydWUpOwogICAgIGlmICht
X2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9h
cmQoKSwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3Rl
Ym9hcmQoUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKSk7CiAgICAgbG9hZGVyLT5zZXRB
bGxvd1N0YWxlUmVzb3VyY2VzKGZhbHNlKTsKLSNlbmRpZgogfQogCisjZW5kaWYKKwogdm9pZCBF
ZGl0b3I6OnBhc3RlQXNQbGFpblRleHQoKQogewogICAgaWYgKCFjYW5QYXN0ZSgpKQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNSw0ICsxMDUsMjAgQEAg
dm9pZCBFZGl0b3I6OnNob3dDb2xvclBhbmVsKCkKICAgICBbW05TQXBwbGljYXRpb24gc2hhcmVk
QXBwbGljYXRpb25dIG9yZGVyRnJvbnRDb2xvclBhbmVsOm5pbF07CiB9CiAKKy8vIEZJWE1FOiBX
ZSB3YW50IHRvIHVzZSB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgY29kZSBpbnN0ZWFkLiBCdXQg
d2hlbiB3ZSBsYXN0CisvLyB0cmllZCB0byBkbyBzbyBpdCBzZWVtZWQgdGhhdCB3ZSBmaXJzdCBu
ZWVkIHRvIG1vdmUgbW9yZSBvZiB0aGUgbG9naWMgZnJvbQorLy8gLVtXZWJIVE1MVmlldy5jcHAg
X2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZF0gaW50byBQYXN0ZWJvYXJkTWFjLgorCit2
b2lkIEVkaXRvcjo6cGFzdGUoKQoreworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQor
ICAgICAgICByZXR1cm47CisgICAgRG9jTG9hZGVyKiBsb2FkZXIgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5kb2NMb2FkZXIoKTsKKyAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1
ZSk7CisgICAgW3ZpZXctPmdldERvY3VtZW50VmlldygpIHRyeVRvUGVyZm9ybTpAc2VsZWN0b3Io
cGFzdGU6KSB3aXRoOm5pbF07CisgICAgbG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKGZh
bHNlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDMwNzMx
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw3ICszODEs
NiBAQCBwdWJsaWM6CiBwdWJsaWM6CiAgICAgTlNEaWN0aW9uYXJ5KiBmb250QXR0cmlidXRlc0Zv
clNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAgICAgTlNXcml0aW5nRGlyZWN0aW9uIGJhc2VXcml0
aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKLSAgICB2b2lkIGlzc3VlUGFz
dGVDb21tYW5kKCk7CiAKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9u
IDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtOTcsOSArOTcsNyBAQAogI2ltcG9ydCA8YmluZGluZ3MvcnVudGltZV9yb290Lmg+CiAjaW1w
b3J0IDxiaW5kaW5ncy9ydW50aW1lLmg+CiAKLSN1bmRlZiBfd2ViY29yZV9USU1JTkcKLQotQGlu
dGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z0luKQorQGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1
Z2luKQogLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0OwogLSAoTlBPYmplY3QgKiljcmVhdGVQbHVn
aW5TY3JpcHRhYmxlT2JqZWN0OwogQGVuZApAQCAtNDk3LDExICs0OTUsNiBAQCBOU1dyaXRpbmdE
aXJlY3Rpb24gRnJhbWU6OmJhc2VXcml0aW5nRGlyCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBGcmFtZTo6aXNzdWVQYXN0ZUNvbW1hbmQoKQotewotICAgIFtkLT5tX2JyaWRnZSBpc3N1
ZVBhc3RlQ29tbWFuZF07Ci19Ci0KIGNvbnN0IHNob3J0IGVuYWJsZVJvbWFuS2V5Ym9hcmRzT25s
eSA9IC0yMzsKIHZvaWQgRnJhbWU6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnkoYm9vbCBlbmFi
bGUpCiB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9u
IDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIyLDggKzIyMiw2IEBAIGVudW0gV2ViU2Nyb2xsR3JhbnVsYXJpdHkgewog
Ly8gRGVwcmVjYXRlZCwgdXNlIGdldEFwcGxldEluVmlldzogaW5zdGVhZC4KIC0gKGpvYmplY3Qp
cG9sbEZvckFwcGxldEluVmlldzooTlNWaWV3ICopdmlldzsKIAotLSAodm9pZClpc3N1ZVBhc3Rl
Q29tbWFuZDsKLQogLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQgZm9yVmll
dzooTlNWaWV3ICopdmlldzsKIAogLSAodm9pZClkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZDooTlNN
dXRhYmxlRGljdGlvbmFyeSAqKXJlZ2lvbnM7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzA3MzEpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDA4
LTAzLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlbW92ZSBXZWJDb3JlRnJhbWVCcmlk
Z2UgaXNzdWVQYXN0ZUNvbWFuZCBtZXRob2QKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lQnJpZGdlLm1tOiBSZW1vdmVkIGlzc3VlUGFzdGVDb21tYW5kIG1ldGhvZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaDogUmVtb3ZlZCBkZWNsYXJhdGlvbiBv
ZiBwYXN0ZTogbWV0aG9kLgorCiAyMDA4LTAzLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY1NiwxMyArNjU2LDYgQEAgTlNTdHJpbmcgKldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAgQCJX
ZQogICAgIHJldHVybiBbW3NlbGYgd2ViVmlld10gdW5kb01hbmFnZXJdOwogfQogCi0tICh2b2lk
KWlzc3VlUGFzdGVDb21tYW5kCi17Ci0gICAgTlNWaWV3KiBkb2N1bWVudFZpZXcgPSBbW19mcmFt
ZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgWyhXZWJIVE1MVmlldyopZG9j
dW1lbnRWaWV3IHBhc3RlOm5pbF07Ci19Ci0KIC0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClp
c1NlbGVjdGVkIGZvclZpZXc6KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOildKQpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAzMDczMSkK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAtIChpZCA8
V2ViSFRNTEhpZ2hsaWdodGVyPilfaGlnaGxpZ2h0ZXJGb3JUeXBlOihOU1N0cmluZyopdHlwZTsK
IC0gKFdlYkZyYW1lICopX2ZyYW1lOwotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyOwogLSAodm9p
ZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcjsKIC0gKHZvaWQpX2hvdmVy
RmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkOwogLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2
ZW50OihXZWJDb3JlOjpLZXlib2FyZEV2ZW50ICopZXZlbnQgc2hvdWxkU2F2ZUNvbW1hbmQ6KEJP
T0wpc2hvdWxkU2F2ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19517</attachid>
            <date>2008-03-04 03:59:58 -0800</date>
            <delta_ts>2008-03-04 07:19:49 -0800</delta_ts>
            <desc>patch for just dashboardRegionsChanged</desc>
            <filename>DashboardBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>11181</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOl0KKworICAg
ICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQuCisgICAgICAgICogcGFnZS9DaHJvbWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpkYXNoYm9hcmRSZWdpb25zQ2hh
bmdlZCk6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6IEFkZGVkIHZpcnR1
YWwgZnVuY3Rpb24gZm9yIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkLgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuaDogUmVtb3ZlZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCBmdW5jdGlvbi4KKyAgICAg
ICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVw
ZGF0ZURhc2hib2FyZFJlZ2lvbnMpOiBDaGFuZ2VkIHRvIGNhbGwgZGFzaGJvYXJkUmVnaW9uc0No
YW5nZWQKKyAgICAgICAgb24gQ2hyb21lQ2xpZW50IGFuZCB0byBvbmx5IGNhbGwgaXQgd2hlbiB0
aGUgcmVnaW9ucyBhY3R1YWxseSBjaGFuZ2VkLgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFj
Lm1tOiBSZW1vdmVkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkIGZ1bmN0aW9uLgorICAgICAgICAq
IHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oOiBSZW1vdmVkIGRhc2hib2FyZFJlZ2lvbnND
aGFuZ2VkOiBtZXRob2QuCisKIDIwMDgtMDMtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFN1Z2dlc3RlZCBieSBEYXJpbiwgcnViYmVyLXN0YW1wZWQg
YnkgTWFyay4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiArNjkyLDcgQEAgX19aTks3V2Vi
Q29yZTlTZWxlY3Rpb24xN2lzQ29udGVudEVkaXRhYgogX19aTks3V2ViQ29yZTlTZWxlY3Rpb24y
M2lzQ29udGVudFJpY2hseUVkaXRhYmxlRXYKIF9fWk5LN1dlYkNvcmU5U2VsZWN0aW9uN3RvUmFu
Z2VFdgogX19aTks3V2ViQ29yZTlUaW1lckJhc2U4aXNBY3RpdmVFdgorX19aVFZON1dlYkNvcmUx
MkNocm9tZUNsaWVudEUKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMKIF9oYXND
YXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgKSW5kZXg6
IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDMsNiArMzQzLDE0IEBAIHZvaWQgQ2hyb21lOjpwcmludChGcmFtZSog
ZnJhbWUpCiAgICAgbV9jbGllbnQtPnByaW50KGZyYW1lKTsKIH0KIAorLy8gLS0tLS0tLS0KKwor
dm9pZCBDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkKK3sKK30KKworLy8g
LS0tLS0tLS0KKwogUGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIo
UGFnZSogcGFnZSwgYm9vbCBkZWZlclNlbGYpCiB7CiAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4q
IGdyb3VwID0gcGFnZS0+ZnJhbWVOYW1lc3BhY2UoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJl
dmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiwxOSArMjIsMzUgQEAKICNkZWZpbmUgQ2hyb21lQ2xpZW50X2gKIAogI2luY2x1
ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29yZUtleWJvYXJkVUlNb2RlLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5
cGVkZWYgY2xhc3MgX2pvYmplY3QqIGpvYmplY3Q7CisKKyNpZm5kZWYgX19PQkpDX18KK2NsYXNz
IE5TTWVudTsKK2NsYXNzIE5TUmVzcG9uZGVyOworY2xhc3MgTlNWaWV3OworI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBG
aWxlQ2hvb3NlcjsKICAgICBjbGFzcyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAg
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIE5vZGU7
CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgV2lkZ2V0Owog
ICAgIAorICAgIHN0cnVjdCBEYXNoYm9hcmRSZWdpb25WYWx1ZTsKICAgICBzdHJ1Y3QgRnJhbWVM
b2FkUmVxdWVzdDsKICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7Ci0gICAgCisKICAgICBjbGFz
cyBDaHJvbWVDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGNocm9t
ZURlc3Ryb3llZCgpID0gMDsKQEAgLTEwNCw2ICsxMjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRh
c2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1
YWwgfkNocm9tZUNsaWVudCgpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNpb24gMzA3MzEpCisr
KyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDggKzIwMSw2IEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBkb2N1bWVudFR5cGVTdHJpbmcoKSBjb25zdDsKIAotICAg
IHZvaWQgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKLQogICAgIHZvaWQgY2xlYXJTY3JpcHRQ
cm94eSgpOwogICAgIHZvaWQgY2xlYXJET01XaW5kb3coKTsKIApJbmRleDogV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJ
KHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBL
bm9sbCA8a25vbGxAa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMTk5OSBBbnR0aSBL
b2l2aXN0byA8a29pdmlzdG9Aa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5k
ZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAi
SFRNTEZyYW1lU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFy
dC5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgpAQCAtMTAyMCwxMyArMTAyMiwxOCBAQCBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xp
cFJlY3RGb3JMYXllCiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVEYXNoYm9hcmRSZWdpb25zKCkK
IHsKLSAgICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9j
LT5oYXNEYXNoYm9hcmRSZWdpb25zKCkpIHsKLSAgICAgICAgVmVjdG9yPERhc2hib2FyZFJlZ2lv
blZhbHVlPiBuZXdSZWdpb25zOwotICAgICAgICBkb2MtPnJlbmRlcmVyKCktPmNvbGxlY3REYXNo
Ym9hcmRSZWdpb25zKG5ld1JlZ2lvbnMpOwotICAgICAgICBkb2MtPnNldERhc2hib2FyZFJlZ2lv
bnMobmV3UmVnaW9ucyk7Ci0gICAgICAgIG1fZnJhbWUuZ2V0KCktPmRhc2hib2FyZFJlZ2lvbnND
aGFuZ2VkKCk7Ci0gICAgfQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudC0+aGFzRGFzaGJvYXJkUmVnaW9ucygpKQorICAgICAg
ICByZXR1cm47CisgICAgVmVjdG9yPERhc2hib2FyZFJlZ2lvblZhbHVlPiBuZXdSZWdpb25zOwor
ICAgIGRvY3VtZW50LT5yZW5kZXJlcigpLT5jb2xsZWN0RGFzaGJvYXJkUmVnaW9ucyhuZXdSZWdp
b25zKTsKKyAgICBpZiAobmV3UmVnaW9ucyA9PSBkb2N1bWVudC0+ZGFzaGJvYXJkUmVnaW9ucygp
KQorICAgICAgICByZXR1cm47CisgICAgZG9jdW1lbnQtPnNldERhc2hib2FyZFJlZ2lvbnMobmV3
UmVnaW9ucyk7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmRhc2hi
b2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVDb250cm9s
VGludHMoKQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNv
cmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2NCwxMiArNTY0LDYg
QEAgTlNNdXRhYmxlRGljdGlvbmFyeSogRnJhbWU6OmRhc2hib2FyZFJlZwogICAgIHJldHVybiB3
ZWJSZWdpb25zOwogfQogCi12b2lkIEZyYW1lOjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCi17
Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqd2ViUmVnaW9ucyA9IGRhc2hib2FyZFJlZ2lvbnNE
aWN0aW9uYXJ5KCk7Ci0gICAgW2QtPm1fYnJpZGdlIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOndl
YlJlZ2lvbnNdOwotfQotCiB2b2lkIEZyYW1lOjp3aWxsUG9wdXBNZW51KE5TTWVudSAqIG1lbnUp
CiB7CiAgICAgW2QtPm1fYnJpZGdlIHdpbGxQb3B1cE1lbnU6bWVudV07CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9w
YWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIy
Niw2IEBAIGVudW0gV2ViU2Nyb2xsR3JhbnVsYXJpdHkgewogCiAtICh2b2lkKXNldElzU2VsZWN0
ZWQ6KEJPT0wpaXNTZWxlY3RlZCBmb3JWaWV3OihOU1ZpZXcgKil2aWV3OwogCi0tICh2b2lkKWRh
c2hib2FyZFJlZ2lvbnNDaGFuZ2VkOihOU011dGFibGVEaWN0aW9uYXJ5ICopcmVnaW9uczsKIC0g
KHZvaWQpd2lsbFBvcHVwTWVudTooTlNNZW51ICopbWVudTsKIAogLSAoTlNSZWN0KWN1c3RvbUhp
Z2hsaWdodFJlY3Q6KE5TU3RyaW5nKil0eXBlIGZvckxpbmU6KE5TUmVjdClsaW5lUmVjdCByZXBy
ZXNlbnRlZE5vZGU6KFdlYkNvcmU6Ok5vZGUgKilub2RlOwpJbmRleDogV2ViS2l0L21hYy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNzM4
KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZW1vdmUgLVtXZWJDb3Jl
RnJhbWVCcmlkZ2UgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6XQorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpkYXNoYm9hcmRSZWdp
b25zQ2hhbmdlZCk6IE1vdmVkIGNvZGUgaGVyZSBmcm9tIHRoZSBicmlkZ2UuCisgICAgICAgIFRo
ZSBXZWJDb3JlIHNpZGUgbm93IGNhbGxzIHRoaXMgb25seSB3aGVuIHRoZXJlJ3MgYW4gYWN0dWFs
IGNoYW5nZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oOiBSZW1v
dmVkIGxhc3REYXNoYm9hcmRSZWdpb25zLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lQnJpZGdlLm1tOgorICAgICAgICAoLVtXZWJGcmFtZUJyaWRnZSBkZWFsbG9jXSk6IFJlbW92
ZWQgY29kZSB0byByZWxlYXNlIGxhc3REYXNoYm9hcmRSZWdpb25zLgorICAgICAgICBSZW1vdmVk
IF9jb21wYXJlRGFzaGJvYXJkUmVnaW9uczogYW5kIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOiBt
ZXRob2RzLgorCiAyMDA4LTAzLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsx
MDIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3Rh
KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBkYXRhYmFzZU5hbWUpOwog
CisgICAgdmlydHVhbCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CisKIHByaXZhdGU6
CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogfTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MjUsNCArNDI1LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUK
ICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpmcmFt
ZTpleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRhYmFzZTopLCBraXQo
ZnJhbWUpLCB3ZWJPcmlnaW4sIChOU1N0cmluZyAqKWRhdGFiYXNlTmFtZSk7CiAgICAgW3dlYk9y
aWdpbiByZWxlYXNlXTsKIH0KLSAgICAKKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2Fy
ZFJlZ2lvbnNDaGFuZ2VkKCkKK3sKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZWdpb25zID0g
Y29yZShbbV93ZWJWaWV3IG1haW5GcmFtZV0pLT5kYXNoYm9hcmRSZWdpb25zRGljdGlvbmFyeSgp
OworICAgIFttX3dlYlZpZXcgX2FkZFNjcm9sbGVyRGFzaGJvYXJkUmVnaW9uczpyZWdpb25zXTsK
KworICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGFzaGJv
YXJkUmVnaW9uc0NoYW5nZWQ6KSwgcmVnaW9ucyk7Cit9CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw4ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBCT09MIF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkOwogICAgIEJPT0wgX2RvaW5nQ2xpZW50
UmVkaXJlY3Q7CiAgICAgQk9PTCBfaGF2ZVVuZG9SZWRvT3BlcmF0aW9uczsKLSAgICAKLSAgICBO
U0RpY3Rpb25hcnkgKmxhc3REYXNoYm9hcmRSZWdpb25zOwogfQogCiAtIChpZClpbml0TWFpbkZy
YW1lV2l0aFBhZ2U6KFdlYkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihOU1N0cmluZyAqKW5h
bWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXc7CkluZGV4OiBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMwNzMxKQorKysg
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc2LDcgKzE3Niw2IEBAIE5TU3RyaW5nICpXZWJQ
bHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgW2xh
c3REYXNoYm9hcmRSZWdpb25zIHJlbGVhc2VdOwogICAgIFtfZnJhbWUgcmVsZWFzZV07CiAgICAg
CiAgICAgW3NlbGYgZmluaV07CkBAIC02ODYsMjQgKzY4NSw2IEBAIE5TU3RyaW5nICpXZWJQbHVn
aW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAgICB9CiB9CiAKLS0gKEJPT0wpX2NvbXBhcmVEYXNo
Ym9hcmRSZWdpb25zOihOU0RpY3Rpb25hcnkgKilyZWdpb25zCi17Ci0gICAgcmV0dXJuIFtsYXN0
RGFzaGJvYXJkUmVnaW9ucyBpc0VxdWFsVG9EaWN0aW9uYXJ5OnJlZ2lvbnNdOwotfQotCi0tICh2
b2lkKWRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOihOU011dGFibGVEaWN0aW9uYXJ5ICopcmVnaW9u
cwotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICBbd2ViVmll
dyBfYWRkU2Nyb2xsZXJEYXNoYm9hcmRSZWdpb25zOnJlZ2lvbnNdOwotCi0gICAgaWYgKCFbc2Vs
ZiBfY29tcGFyZURhc2hib2FyZFJlZ2lvbnM6cmVnaW9uc10pIHsKLSAgICAgICAgQ2FsbFVJRGVs
ZWdhdGUod2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6
KSwgcmVnaW9ucyk7Ci0KLSAgICAgICAgW2xhc3REYXNoYm9hcmRSZWdpb25zIHJlbGVhc2VdOwot
ICAgICAgICBsYXN0RGFzaGJvYXJkUmVnaW9ucyA9IFtyZWdpb25zIHJldGFpbl07Ci0gICAgfQot
fQotCiAtICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1lbnUKIHsKICAgICBDYWxsVUlE
ZWxlZ2F0ZShbc2VsZiB3ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6d2lsbFBvcHVwTWVudTop
LCBtZW51KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19518</attachid>
            <date>2008-03-04 04:11:31 -0800</date>
            <delta_ts>2008-03-04 07:20:05 -0800</delta_ts>
            <desc>patch moving code from the bridge to frame loader client on the WebKit side</desc>
            <filename>WebKitBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>43018</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAzMDczOCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIC0gbW92ZSBjb2RlIGZyb20gV2ViRnJhbWVCcmlkZ2UgaW50byBXZWJGcmFtZUxvYWRlckNs
aWVudAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaDogUmVtb3Zl
ZCB1bnVzZWQgZmllbGRzLCBjaGFuZ2VkIGZyYW1lIG5hbWUgcGFyYW1ldGVycworICAgICAgICB0
byB1c2UgV2ViQ29yZTo6U3RyaW5nIGluc3RlYWQgb2YgTlNTdHJpbmcsIGFkZCBpbml0U3ViZnJh
bWVXaXRoT3duZXJFbGVtZW50IGRlY2xhcmF0aW9uLAorICAgICAgICByZW1vdmVkIHZpZXdGb3JQ
bHVnaW5XaXRoRnJhbWUsIHZpZXdGb3JKYXZhQXBwbGV0V2l0aEZyYW1lLCBjcmVhdGVDaGlsZEZy
YW1lTmFtZWQsCisgICAgICAgIHJlZGlyZWN0RGF0YVRvUGx1Z2luLCBkZXRlcm1pbmVPYmplY3RG
cm9tTUlNRVR5cGUsIGFuZCB3aW5kb3dPYmplY3RDbGVhcmVkIG1ldGhvZHMuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkZyYW1lQnJp
ZGdlIGZpbmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOmZyYW1lTmFtZTpXZWJDb3JlOjpmcmFtZVZp
ZXc6b3duZXJFbGVtZW50Ol0pOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSBXZWJDb3JlOjpTdHJp
bmcuCisgICAgICAgICgtW1dlYkZyYW1lQnJpZGdlIGluaXRNYWluRnJhbWVXaXRoUGFnZTpmcmFt
ZU5hbWU6V2ViQ29yZTo6ZnJhbWVWaWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWVC
cmlkZ2UgaW5pdFN1YmZyYW1lV2l0aE93bmVyRWxlbWVudDpmcmFtZU5hbWU6V2ViQ29yZTo6ZnJh
bWVWaWV3Ol0pOiBEaXR0by4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE9yaWdpbmFs
VVJMRm9yRG93bmxvYWQpOiBSZW1vdmVkIHNvbWUgZGVhZCBjb2RlIEkgZm91bmQgaGVyZQorICAg
ICAgICBhbmQgYWRkZWQgYSBGSVhNRS4KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpj
cmVhdGVGcmFtZSk6IE1vdmVkIHRoZSBjb2RlIGZyb20gV2ViRnJhbWVCcmlkZ2UgaGVyZS4KKyAg
ICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvYmplY3RDb250ZW50VHlwZSk6IERpdHRvLgor
ICAgICAgICAocGFyYW1ldGVyVmFsdWUpOiBBZGRlZC4gIEhlbHBlciBmdW5jdGlvbiwgYmFzZWQg
b24gY29kZSBvcmlnaW5hbGx5IGluIFdlYkZyYW1lQnJpZGdlLgorICAgICAgICAocGx1Z2luVmll
dyk6IERpdHRvLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6
IE1vdmVkIHRoZSBjb2RlIGZyb20gV2ViRnJhbWVCcmlkZ2UgaGVyZS4KKwogMjAwOC0wMy0wMyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bS4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgJKHJl
dmlzaW9uIDMwNzMxKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZyYW1lQnJpZGdlLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiAgICAgY2xhc3Mg
UGFnZTsKIH0KIApAQCAtMzcsNDcgKzM4LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQHBy
b3RvY29sIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOwogCi1AaW50ZXJmYWNlIFdlYkZyYW1l
QnJpZGdlIDogV2ViQ29yZUZyYW1lQnJpZGdlIDxXZWJDb3JlRnJhbWVCcmlkZ2U+Ci17CitAaW50
ZXJmYWNlIFdlYkZyYW1lQnJpZGdlIDogV2ViQ29yZUZyYW1lQnJpZGdlIDxXZWJDb3JlRnJhbWVC
cmlkZ2U+IHsKIEBwdWJsaWMKICAgICBXZWJGcmFtZSAqX2ZyYW1lOwogCiBAcHJpdmF0ZQogICAg
IFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIF9rZXlib2FyZFVJTW9kZTsKICAgICBCT09MIF9rZXli
b2FyZFVJTW9kZUFjY2Vzc2VkOwotICAgIEJPT0wgX2RvaW5nQ2xpZW50UmVkaXJlY3Q7Ci0gICAg
Qk9PTCBfaGF2ZVVuZG9SZWRvT3BlcmF0aW9uczsKICAgICAKICAgICBOU0RpY3Rpb25hcnkgKmxh
c3REYXNoYm9hcmRSZWdpb25zOwogfQogCi0tIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFdl
YkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihOU1N0cmluZyAqKW5hbWUgZnJhbWVWaWV3OihX
ZWJGcmFtZVZpZXcgKilmcmFtZVZpZXc7CistIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFdl
YkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUg
ZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXc7CistIChpZClpbml0U3ViZnJhbWVX
aXRoT3duZXJFbGVtZW50OihXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKW93bmVyRWxl
bWVudCBmcmFtZU5hbWU6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdl
YkZyYW1lVmlldyAqKWZyYW1lVmlldzsKIC0gKHZvaWQpY2xvc2U7CiAKIC0gKFdlYkZyYW1lICop
d2ViRnJhbWU7CiAKLS8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYWxsIG1vdmUgb2ZmIHRo
ZSBicmlkZ2U7IHRoZXkncmUgdXNlZCBvbiB0aGUgV2ViS2l0IHNpZGUgb25seS4KLQotLSAoTlNW
aWV3ICopdmlld0ZvclBsdWdpbldpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVOYW1lczooTlNBcnJheSAqKWF0dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlVmFsdWVzOihOU0FycmF5ICopYXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBET01FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotICAgICAgICAg
ICAgICAgICAgICAgIGxvYWRNYW51YWxseTooQk9PTClsb2FkTWFudWFsbHk7Ci0tIChOU1ZpZXcg
Kil2aWV3Rm9ySmF2YUFwcGxldFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczooTlNBcnJheSAqKWF0dHJpYnV0ZU5hbWVzCi0gICAg
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczooTlNBcnJheSAqKWF0dHJpYnV0ZVZh
bHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6KE5TVVJMICopYmFz
ZVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6KERPTUVsZW1lbnQg
KillbGVtZW50OwotCi0tIChXZWJDb3JlOjpGcmFtZSopY3JlYXRlQ2hpbGRGcmFtZU5hbWVkOihO
U1N0cmluZyAqKWZyYW1lTmFtZSB3aXRoVVJMOihOU1VSTCAqKVVSTCByZWZlcnJlcjooY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJilyZWZlcnJlcgotICAgIG93bmVyRWxlbWVudDooV2ViQ29yZTo6SFRN
TEZyYW1lT3duZXJFbGVtZW50ICopb3duZXJFbGVtZW50IGFsbG93c1Njcm9sbGluZzooQk9PTClh
bGxvd3NTY3JvbGxpbmcgbWFyZ2luV2lkdGg6KGludCl3aWR0aCBtYXJnaW5IZWlnaHQ6KGludClo
ZWlnaHQ7Ci0KLS0gKHZvaWQpcmVkaXJlY3REYXRhVG9QbHVnaW46KE5TVmlldyAqKXBsdWdpblZp
ZXc7Ci0KLS0gKFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlKWRldGVybWluZU9iamVjdEZyb21N
SU1FVHlwZTooTlNTdHJpbmcqKU1JTUVUeXBlIFVSTDooTlNVUkwqKVVSTDsKLQotLSAodm9pZCl3
aW5kb3dPYmplY3RDbGVhcmVkOwotCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMwNzMxKQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTA2LDEwICsxMDYsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotTlNTdHJpbmcgKldlYlBsdWdpbkJhc2VVUkxLZXkgPSAgICAgQCJXZWJQbHVnaW5CYXNl
VVJMIjsKLU5TU3RyaW5nICpXZWJQbHVnaW5BdHRyaWJ1dGVzS2V5ID0gIEAiV2ViUGx1Z2luQXR0
cmlidXRlcyI7Ci1OU1N0cmluZyAqV2ViUGx1Z2luQ29udGFpbmVyS2V5ID0gICBAIldlYlBsdWdp
bkNvbnRhaW5lciI7Ci0KICNkZWZpbmUgS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRp
b24gQCJjb20uYXBwbGUuS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2UiCiAjZGVmaW5lIEFwcGxlS2V5
Ym9hcmRVSU1vZGUgQ0ZTVFIoIkFwcGxlS2V5Ym9hcmRVSU1vZGUiKQogI2RlZmluZSBVbml2ZXJz
YWxBY2Nlc3NEb21haW4gQ0ZTVFIoImNvbS5hcHBsZS51bml2ZXJzYWxhY2Nlc3MiKQpAQCAtMTMx
LDcgKzEyNyw3IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAg
ICByZXR1cm4ga2l0KG1fZnJhbWUtPnBhZ2UoKSk7CiB9CiAKLS0gKHZvaWQpZmluaXNoSW5pdGlh
bGl6aW5nV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihOU1N0cmluZyAqKW5hbWUgZnJh
bWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcgb3duZXJFbGVtZW50OihIVE1MRnJhbWVP
d25lckVsZW1lbnQqKW93bmVyRWxlbWVudAorLSAodm9pZClmaW5pc2hJbml0aWFsaXppbmdXaXRo
UGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBm
cmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldyBvd25lckVsZW1lbnQ6KEhUTUxGcmFt
ZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50CiB7CiAgICAgKytXZWJCcmlkZ2VDb3VudDsKIApA
QCAtMTQ3LDE0ICsxNDMsMTQgQEAgTlNTdHJpbmcgKldlYlBsdWdpbkNvbnRhaW5lcktleSA9ICAg
QCJXZQogICAgIFtzZWxmIHNldFRleHRTaXplTXVsdGlwbGllcjpbd2ViVmlldyB0ZXh0U2l6ZU11
bHRpcGxpZXJdXTsKIH0KIAotLSAoaWQpaW5pdE1haW5GcmFtZVdpdGhQYWdlOihQYWdlKilwYWdl
IGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJh
bWVWaWV3CistIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVOYW1l
Oihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilm
cmFtZVZpZXcKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIFtzZWxmIGZpbmlzaElu
aXRpYWxpemluZ1dpdGhQYWdlOnBhZ2UgZnJhbWVOYW1lOm5hbWUgZnJhbWVWaWV3OmZyYW1lVmll
dyBvd25lckVsZW1lbnQ6MF07CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKGlkKWluaXRTdWJm
cmFtZVdpdGhPd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50
IGZyYW1lTmFtZTooTlNTdHJpbmcgKiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJh
bWVWaWV3CistIChpZClpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25l
ckVsZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYp
bmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldwogewogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CiAgICAgW3NlbGYgZmluaXNoSW5pdGlhbGl6aW5nV2l0aFBhZ2U6b3duZXJF
bGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCkgZnJhbWVOYW1lOm5hbWUgZnJhbWVW
aWV3OmZyYW1lVmlldyBvd25lckVsZW1lbnQ6b3duZXJFbGVtZW50XTsKQEAgLTI5MiwzMzUgKzI4
OCw2IEBAIE5TU3RyaW5nICpXZWJQbHVnaW5Db250YWluZXJLZXkgPSAgIEAiV2UKICAgICBfZnJh
bWUgPSBuaWw7CiB9CiAKLS0gKEZyYW1lKiljcmVhdGVDaGlsZEZyYW1lTmFtZWQ6KE5TU3RyaW5n
ICopZnJhbWVOYW1lIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRo
VVJMOihOU1VSTCAqKVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
ZmVycmVyOihjb25zdCBTdHJpbmcmKXJlZmVycmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd3NTY3JvbGxpbmc6KEJPT0wpYWxs
b3dzU2Nyb2xsaW5nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbldp
ZHRoOihpbnQpd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkhl
aWdodDooaW50KWhlaWdodAotewotICAgIEFTU0VSVChfZnJhbWUpOwotICAgIAotICAgIFdlYkZy
YW1lVmlldyAqY2hpbGRWaWV3ID0gW1tXZWJGcmFtZVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLDAsMCwwKV07Ci0gICAgW2NoaWxkVmlldyBzZXRBbGxvd3NTY3JvbGxpbmc6
YWxsb3dzU2Nyb2xsaW5nXTsKLSAgICBbY2hpbGRWaWV3IF9zZXRNYXJnaW5XaWR0aDp3aWR0aF07
Ci0gICAgW2NoaWxkVmlldyBfc2V0TWFyZ2luSGVpZ2h0OmhlaWdodF07Ci0KLSAgICBXZWJGcmFt
ZUJyaWRnZSAqbmV3QnJpZGdlID0gW1tXZWJGcmFtZUJyaWRnZSBhbGxvY10gaW5pdFN1YmZyYW1l
V2l0aE93bmVyRWxlbWVudDpvd25lckVsZW1lbnQgZnJhbWVOYW1lOmZyYW1lTmFtZSBmcmFtZVZp
ZXc6Y2hpbGRWaWV3XTsKLSAgICBbY2hpbGRWaWV3IHJlbGVhc2VdOwotCi0gICAgaWYgKCFuZXdC
cmlkZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgW19mcmFtZSBfYWRkQ2hpbGQ6W25ld0Jy
aWRnZSB3ZWJGcmFtZV1dOwotICAgIFtuZXdCcmlkZ2UgcmVsZWFzZV07Ci0KLSAgICBSZWZQdHI8
RnJhbWU+IG5ld0ZyYW1lID0gW25ld0JyaWRnZSBfZnJhbWVdOwotICAgIAotICAgIFtfZnJhbWUg
X2xvYWRVUkw6VVJMIHJlZmVycmVyOnJlZmVycmVyIGludG9DaGlsZDpraXQobmV3RnJhbWUuZ2V0
KCkpXTsKLQotICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92
ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAgaWYgKCFuZXdGcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbmV3RnJhbWUuZ2V0KCk7Ci19
Ci0KLS0gKE5TVmlldyAqKXBsdWdpblZpZXdXaXRoUGFja2FnZTooV2ViUGx1Z2luUGFja2FnZSAq
KXBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lczooTlNBcnJh
eSAqKWF0dHJpYnV0ZU5hbWVzCi0gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5T
QXJyYXkgKilhdHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVS
TDooTlNVUkwgKiliYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6KERP
TUVsZW1lbnQgKillbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFsbHk6KEJP
T0wpbG9hZE1hbnVhbGx5Ci17Ci0gICAgV2ViSFRNTFZpZXcgKmRvY1ZpZXcgPSAoV2ViSFRNTFZp
ZXcgKilbW19mcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgQVNTRVJUKFtkb2NW
aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwotICAgICAgICAKLSAgICBX
ZWJQbHVnaW5Db250cm9sbGVyICpwbHVnaW5Db250cm9sbGVyID0gW2RvY1ZpZXcgX3BsdWdpbkNv
bnRyb2xsZXJdOwotICAgIAotICAgIC8vIFN0b3JlIGF0dHJpYnV0ZXMgaW4gYSBkaWN0aW9uYXJ5
IHNvIHRoZXkgY2FuIGJlIHBhc3NlZCB0byBXZWJQbHVnaW5zLgotICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKmF0dHJpYnV0ZXMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRo
T2JqZWN0czphdHRyaWJ1dGVWYWx1ZXMgZm9yS2V5czphdHRyaWJ1dGVOYW1lc107Ci0gICAgCi0g
ICAgW3BsdWdpblBhY2thZ2UgbG9hZF07Ci0gICAgQ2xhc3Mgdmlld0ZhY3RvcnkgPSBbcGx1Z2lu
UGFja2FnZSB2aWV3RmFjdG9yeV07Ci0gICAgCi0gICAgTlNWaWV3ICp2aWV3ID0gbmlsOwotICAg
IE5TRGljdGlvbmFyeSAqYXJndW1lbnRzID0gbmlsOwotICAgIAotICAgIGlmIChbdmlld0ZhY3Rv
cnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czop
XSkgewotICAgICAgICBhcmd1bWVudHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2Jq
ZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICBiYXNlVVJMLCBXZWJQbHVnSW5CYXNlVVJMS2V5LAot
ICAgICAgICAgICAgYXR0cmlidXRlcywgV2ViUGx1Z0luQXR0cmlidXRlc0tleSwKLSAgICAgICAg
ICAgIHBsdWdpbkNvbnRyb2xsZXIsIFdlYlBsdWdJbkNvbnRhaW5lcktleSwKLSAgICAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoSW50OmxvYWRNYW51YWxseSA/IFdlYlBsdWdJbk1vZGVGdWxs
IDogV2ViUGx1Z0luTW9kZUVtYmVkXSwgV2ViUGx1Z0luTW9kZUtleSwKLSAgICAgICAgICAgIFtO
U051bWJlciBudW1iZXJXaXRoQm9vbDohbG9hZE1hbnVhbGx5XSwgV2ViUGx1Z0luU2hvdWxkTG9h
ZE1haW5SZXNvdXJjZUtleSwKLSAgICAgICAgICAgIGVsZW1lbnQsIFdlYlBsdWdJbkNvbnRhaW5p
bmdFbGVtZW50S2V5LAotICAgICAgICAgICAgbmlsXTsKLSAgICAgICAgTE9HKFBsdWdpbnMsICJh
cmd1bWVudHM6XG4lQCIsIGFyZ3VtZW50cyk7Ci0gICAgfSBlbHNlIGlmIChbdmlld0ZhY3Rvcnkg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czopXSkg
ewotICAgICAgICBhcmd1bWVudHMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6Ci0gICAgICAgICAgICBiYXNlVVJMLCBXZWJQbHVnaW5CYXNlVVJMS2V5LAotICAg
ICAgICAgICAgYXR0cmlidXRlcywgV2ViUGx1Z2luQXR0cmlidXRlc0tleSwKLSAgICAgICAgICAg
IHBsdWdpbkNvbnRyb2xsZXIsIFdlYlBsdWdpbkNvbnRhaW5lcktleSwKLSAgICAgICAgICAgIGVs
ZW1lbnQsIFdlYlBsdWdJbkNvbnRhaW5pbmdFbGVtZW50S2V5LAotICAgICAgICAgICAgbmlsXTsK
LSAgICAgICAgTE9HKFBsdWdpbnMsICJhcmd1bWVudHM6XG4lQCIsIGFyZ3VtZW50cyk7Ci0gICAg
fQotCi0gICAgdmlldyA9IFtXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1l
bnRzOmFyZ3VtZW50cyBmcm9tUGx1Z2luUGFja2FnZTpwbHVnaW5QYWNrYWdlXTsKLSAgICBbYXR0
cmlidXRlcyByZWxlYXNlXTsKLSAgICByZXR1cm4gdmlldzsKLX0KLQotLSAoTlNTdHJpbmcgKil2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkga2V5czooTlNBcnJheSAqKWtleXMgdmFsdWVzOihO
U0FycmF5ICopdmFsdWVzCi17Ci0gICAgdW5zaWduZWQgY291bnQgPSBba2V5cyBjb3VudF07Ci0g
ICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
aWYgKFtba2V5cyBvYmplY3RBdEluZGV4OmldIF93ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVFcXVh
bFRvU3RyaW5nOmtleV0pCi0gICAgICAgICAgICByZXR1cm4gW3ZhbHVlcyBvYmplY3RBdEluZGV4
OmldOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TVmlldyAqKXZpZXdGb3JQbHVnaW5XaXRo
RnJhbWU6KE5TUmVjdClmcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDoo
TlNVUkwgKilVUkwKLSAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6KE5TQXJyYXkg
KilhdHRyaWJ1dGVOYW1lcwotICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczooTlNB
cnJheSAqKWF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlw
ZTooTlNTdHJpbmcgKilNSU1FVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgRE9NRWxlbWVu
dDooRE9NRWxlbWVudCAqKWVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICBsb2FkTWFudWFs
bHk6KEJPT0wpbG9hZE1hbnVhbGx5Ci17Ci0gICAgQVNTRVJUKFthdHRyaWJ1dGVOYW1lcyBjb3Vu
dF0gPT0gW2F0dHJpYnV0ZVZhbHVlcyBjb3VudF0pOwotCi0gICAgV2ViQmFzZVBsdWdpblBhY2th
Z2UgKnBsdWdpblBhY2thZ2UgPSBuaWw7Ci0gICAgTlNWaWV3ICp2aWV3ID0gbmlsOwotICAgIGlu
dCBlcnJvckNvZGUgPSAwOwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIHdlYlZpZXdd
OwotICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJWaWV3OnBsdWdJblZpZXdXaXRoQXJn
dW1lbnRzOik7Ci0KLSAgICBpZiAoW1t3ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxl
Y3RvcjpzZWxlY3Rvcl0pIHsKLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cmlidXRl
cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOmF0dHJpYnV0
ZVZhbHVlcyBmb3JLZXlzOmF0dHJpYnV0ZU5hbWVzXTsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICph
cmd1bWVudHMgPSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoK
LSAgICAgICAgICAgIGF0dHJpYnV0ZXMsIFdlYlBsdWdJbkF0dHJpYnV0ZXNLZXksCi0gICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpsb2FkTWFudWFsbHkgPyBXZWJQbHVnSW5Nb2Rl
RnVsbCA6IFdlYlBsdWdJbk1vZGVFbWJlZF0sIFdlYlBsdWdJbk1vZGVLZXksCi0gICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6IWxvYWRNYW51YWxseV0sIFdlYlBsdWdJblNob3Vs
ZExvYWRNYWluUmVzb3VyY2VLZXksCi0gICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVnSW5Db250
YWluaW5nRWxlbWVudEtleSwKLSAgICAgICAgICAgIFVSTCwgV2ViUGx1Z0luQmFzZVVSTEtleSwg
Ly8gVVJMIG1pZ2h0IGJlIG5pbCwgc28gYWRkIGl0IGxhc3QKLSAgICAgICAgICAgIG5pbF07Ci0K
LSAgICAgICAgdmlldyA9IENhbGxVSURlbGVnYXRlKHdlYlZpZXcsIHNlbGVjdG9yLCBhcmd1bWVu
dHMpOwotCi0gICAgICAgIFthdHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgICAgICBbYXJndW1lbnRz
IHJlbGVhc2VdOwotCi0gICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7
Ci0gICAgfQotCi0gICAgaWYgKFtNSU1FVHlwZSBsZW5ndGhdICE9IDApCi0gICAgICAgIHBsdWdp
blBhY2thZ2UgPSBbW3NlbGYgd2ViVmlld10gX3BsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXTsK
LSAgICBlbHNlCi0gICAgICAgIE1JTUVUeXBlID0gbmlsOwotICAgIAotICAgIE5TU3RyaW5nICpl
eHRlbnNpb24gPSBbW1VSTCBwYXRoXSBwYXRoRXh0ZW5zaW9uXTsKLSAgICBpZiAoIXBsdWdpblBh
Y2thZ2UgJiYgW2V4dGVuc2lvbiBsZW5ndGhdICE9IDApIHsKLSAgICAgICAgcGx1Z2luUGFja2Fn
ZSA9IFtbc2VsZiB3ZWJWaWV3XSBfcGx1Z2luRm9yRXh0ZW5zaW9uOmV4dGVuc2lvbl07Ci0gICAg
ICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyAqbmV3TUlNRVR5
cGUgPSBbcGx1Z2luUGFja2FnZSBNSU1FVHlwZUZvckV4dGVuc2lvbjpleHRlbnNpb25dOwotICAg
ICAgICAgICAgaWYgKFtuZXdNSU1FVHlwZSBsZW5ndGhdICE9IDApCi0gICAgICAgICAgICAgICAg
TUlNRVR5cGUgPSBuZXdNSU1FVHlwZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE5TVVJMICpi
YXNlVVJMID0gW3NlbGYgYmFzZVVSTF07Ci0gICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAg
ICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xh
c3NdXSkgewotICAgICAgICAgICAgdmlldyA9IFtzZWxmIHBsdWdpblZpZXdXaXRoUGFja2FnZToo
V2ViUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlTmFtZXM6YXR0cmlidXRlTmFtZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6YXR0cmlidXRlVmFsdWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJMOmJhc2VVUkwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6ZWxlbWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvYWRNYW51YWxseTpsb2FkTWFudWFsbHldOwotICAgICAg
ICAgICAgCi0gICAgICAgIH0KLSNpZm5kZWYgX19MUDY0X18KLSAgICAgICAgZWxzZSBpZiAoW3Bs
dWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNz
XV0pIHsKLSAgICAgICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3ICplbWJlZGRl
ZFZpZXcgPSBbW1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpmcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgKilw
bHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6VVJMCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVUkw6YmFzZVVS
TAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUtleXM6YXR0cmlidXRlTmFt
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZVZhbHVlczphdHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRNYW51YWxseTpsb2Fk
TWFudWFsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRE9NRWxlbWVudDplbGVtZW50XSBhdXRvcmVsZWFzZV07Ci0gICAgICAg
ICAgICB2aWV3ID0gZW1iZWRkZWRWaWV3OwotICAgICAgICB9IAotI2VuZGlmCi0gICAgfSBlbHNl
Ci0gICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbjsKLQotICAg
IGlmICghZXJyb3JDb2RlICYmICF2aWV3KQotICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJv
ckNhbm5vdExvYWRQbHVnSW47Ci0KLSAgICBpZiAoZXJyb3JDb2RlKSB7Ci0gICAgICAgIE5TU3Ry
aW5nICpwbHVnaW5QYWdlID0gW3NlbGYgdmFsdWVGb3JLZXk6QCJwbHVnaW5zcGFnZSIga2V5czph
dHRyaWJ1dGVOYW1lcyB2YWx1ZXM6YXR0cmlidXRlVmFsdWVzXTsKLSAgICAgICAgTlNVUkwgKnBs
dWdpblBhZ2VVUkwgPSBwbHVnaW5QYWdlICE9IG5pbCA/IFtzZWxmIFVSTFdpdGhBdHRyaWJ1dGVT
dHJpbmc6cGx1Z2luUGFnZV0gOiBuaWw7Ci0gICAgICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vy
cm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6ZXJyb3JDb2RlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRVUkw6
VVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBsdWdpblBhZ2VVUkw6cGx1Z2luUGFnZVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5OYW1lOltwbHVnaW5QYWNrYWdlIG5h
bWVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTUlNRVR5cGU6TUlNRVR5cGVdOwotICAgICAgICBXZWJOdWxsUGx1Z2luVmlldyAqbnVs
bFZpZXcgPSBbW1tXZWJOdWxsUGx1Z2luVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpmcmFtZSBl
cnJvcjplcnJvciBET01FbGVtZW50OmVsZW1lbnRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgdmll
dyA9IG51bGxWaWV3OwotICAgICAgICBbZXJyb3IgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAg
IEFTU0VSVCh2aWV3KTsKLSAgICByZXR1cm4gdmlldzsKLX0KLQotLSAodm9pZClyZWRpcmVjdERh
dGFUb1BsdWdpbjooTlNWaWV3ICopcGx1Z2luVmlldwotewotICAgIFdlYkhUTUxSZXByZXNlbnRh
dGlvbiAqcmVwcmVzZW50YXRpb24gPSAoV2ViSFRNTFJlcHJlc2VudGF0aW9uICopW1tfZnJhbWUg
X2RhdGFTb3VyY2VdIHJlcHJlc2VudGF0aW9uXTsKLQotI2lmbmRlZiBfX0xQNjRfXwotICAgIGlm
IChbcGx1Z2luVmlldyBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmll
dyBjbGFzc11dKQotICAgICAgICBbcmVwcmVzZW50YXRpb24gX3JlZGlyZWN0RGF0YVRvTWFudWFs
TG9hZGVyOihXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyAqKXBsdWdpblZpZXcgZm9yUGx1
Z2luVmlldzpwbHVnaW5WaWV3XTsKLSAgICBlbHNlIHsKLSNlbHNlCi0gICAgewotI2VuZGlmCi0g
ICAgICAgIFdlYkhUTUxWaWV3ICpkb2NWaWV3ID0gKFdlYkhUTUxWaWV3ICopW1tfZnJhbWUgZnJh
bWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgICAgICBBU1NFUlQoW2RvY1ZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7Ci0gICAgICAgIAotICAgICAgICBXZWJQbHVnaW5D
b250cm9sbGVyICpwbHVnaW5Db250cm9sbGVyID0gW2RvY1ZpZXcgX3BsdWdpbkNvbnRyb2xsZXJd
OwotICAgICAgICBbcmVwcmVzZW50YXRpb24gX3JlZGlyZWN0RGF0YVRvTWFudWFsTG9hZGVyOnBs
dWdpbkNvbnRyb2xsZXIgZm9yUGx1Z2luVmlldzpwbHVnaW5WaWV3XTsKLSAgICB9Ci0KLX0KLQot
LSAoTlNWaWV3ICopdmlld0ZvckphdmFBcHBsZXRXaXRoRnJhbWU6KE5TUmVjdCl0aGVGcmFtZQot
ICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXM6KE5TQXJyYXkgKilhdHRyaWJ1
dGVOYW1lcwotICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6KE5TQXJyYXkg
KilhdHRyaWJ1dGVWYWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVVJM
OihOU1VSTCAqKWJhc2VVUkwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01FbGVtZW50
OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IEAiYXBw
bGljYXRpb24veC1qYXZhLWFwcGxldCI7Ci0gICAgV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBsdWdp
blBhY2thZ2U7Ci0gICAgTlNWaWV3ICp2aWV3ID0gbmlsOwotICAgIAotICAgIHBsdWdpblBhY2th
Z2UgPSBbW3NlbGYgd2ViVmlld10gX3BsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXTsKLQotICAg
IGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0gICAgICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRP
ZkNsYXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIC8vIEZvciBz
b21lIHJlYXNvbiwgdGhlIEphdmEgcGx1Zy1pbiByZXF1aXJlcyB0aGF0IHdlIHBhc3MgdGhlIGRp
bWVuc2lvbiBvZiB0aGUgcGx1Zy1pbiBhcyBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgTlNNdXRh
YmxlQXJyYXkgKm5hbWVzID0gW2F0dHJpYnV0ZU5hbWVzIG11dGFibGVDb3B5XTsKLSAgICAgICAg
ICAgIE5TTXV0YWJsZUFycmF5ICp2YWx1ZXMgPSBbYXR0cmlidXRlVmFsdWVzIG11dGFibGVDb3B5
XTsKLSAgICAgICAgICAgIGlmIChbc2VsZiB2YWx1ZUZvcktleTpAIndpZHRoIiBrZXlzOmF0dHJp
YnV0ZU5hbWVzIHZhbHVlczphdHRyaWJ1dGVWYWx1ZXNdID09IG5pbCkgewotICAgICAgICAgICAg
ICAgIFtuYW1lcyBhZGRPYmplY3Q6QCJ3aWR0aCJdOwotICAgICAgICAgICAgICAgIFt2YWx1ZXMg
YWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAoaW50KXRoZUZyYW1l
LnNpemUud2lkdGhdXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChbc2VsZiB2YWx1
ZUZvcktleTpAImhlaWdodCIga2V5czphdHRyaWJ1dGVOYW1lcyB2YWx1ZXM6YXR0cmlidXRlVmFs
dWVzXSA9PSBuaWwpIHsKLSAgICAgICAgICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OkAiaGVpZ2h0
Il07Ci0gICAgICAgICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlZCIsIChpbnQpdGhlRnJhbWUuc2l6ZS5oZWlnaHRdXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZpZXcgPSBbc2VsZiBwbHVnaW5WaWV3V2l0aFBhY2thZ2U6KFdlYlBs
dWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZU5hbWVzOm5hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlVmFsdWVzOnZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBET01FbGVtZW50OmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2FkTWFudWFsbHk6Tk9dOwotICAgICAgICAgICAgW25hbWVzIHJlbGVhc2VdOwotICAgICAgICAg
ICAgW3ZhbHVlcyByZWxlYXNlXTsKLSAgICAgICAgICAgIAotICAgICAgICB9IAotI2lmbmRlZiBf
X0xQNjRfXwotICAgICAgICBlbHNlIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkgewotICAgICAgICAgICAgdmlldyA9IFtb
W1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnRoZUZy
YW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAqKXBsdWdpblBh
Y2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTDpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUlNRVR5cGU6TUlNRVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlS2V5czphdHRyaWJ1dGVOYW1lcwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlVmFsdWVzOmF0dHJpYnV0ZVZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5Ok5PCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERP
TUVsZW1lbnQ6ZWxlbWVudF0gYXV0b3JlbGVhc2VdOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQot
ICAgIGlmICghdmlldykgewotICAgICAgICBOU0Vycm9yICplcnJvciA9IFtbTlNFcnJvciBhbGxv
Y10gX2luaXRXaXRoUGx1Z2luRXJyb3JDb2RlOldlYktpdEVycm9ySmF2YVVuYXZhaWxhYmxlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnRVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpblBhZ2VVUkw6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6W3BsdWdpblBhY2thZ2UgbmFt
ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTpNSU1FVHlwZV07Ci0gICAgICAgIHZpZXcgPSBbW1tXZWJOdWxsUGx1Z2lu
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTp0aGVGcmFtZSBlcnJvcjplcnJvciBET01FbGVtZW50
OmVsZW1lbnRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgW2Vycm9yIHJlbGVhc2VdOwotICAgIH0K
LQotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHJldHVybiB2aWV3OwotfQotCi0tIChPYmplY3RD
b250ZW50VHlwZSlkZXRlcm1pbmVPYmplY3RGcm9tTUlNRVR5cGU6KE5TU3RyaW5nKilNSU1FVHlw
ZSBVUkw6KE5TVVJMKilVUkwKLXsKLSAgICAvLyBUaGlzIGlzIGEgcXVpcmsgdGhhdCBlbnN1cmVz
IFRpZ2VyIE1haWwncyBXZWJLaXQgcGx1Zy1pbiB3aWxsIGxvYWQgZHVyaW5nIGxheW91dAotICAg
IC8vIGFuZCBub3QgYXR0YWNoIHRpbWUuICg1NTIwNTQxKQotICAgIHN0YXRpYyBCT09MIGlzVGln
ZXJNYWlsID0gV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhhbihAImNvbS5hcHBsZS5tYWlsIiwgLTEs
IDMuMCk7Ci0gICAgaWYgKGlzVGlnZXJNYWlsICYmIFtNSU1FVHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJhcHBsaWNhdGlvbi94LWFwcGxlLW1zZy1hdHRhY2htZW50Il0pCi0gICAgICAgIHJldHVybiBP
YmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0gICAgCi0gICAgaWYgKFtNSU1FVHlwZSBsZW5n
dGhdID09IDApIHsKLSAgICAgICAgLy8gVHJ5IHRvIGd1ZXNzIHRoZSBNSU1FIHR5cGUgYmFzZWQg
b2ZmIHRoZSBleHRlbnNpb24uCi0gICAgICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBbW1VSTCBw
YXRoXSBwYXRoRXh0ZW5zaW9uXTsKLSAgICAgICAgaWYgKFtleHRlbnNpb24gbGVuZ3RoXSA+IDAp
IHsKLSAgICAgICAgICAgIE1JTUVUeXBlID0gV0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRl
bnNpb24pOwotICAgICAgICAgICAgaWYgKFtNSU1FVHlwZSBsZW5ndGhdID09IDApIHsKLSAgICAg
ICAgICAgICAgICAvLyBJZiBubyBNSU1FIHR5cGUgaXMgc3BlY2lmaWVkLCB1c2UgYSBwbHVnLWlu
IGlmIHdlIGhhdmUgb25lIHRoYXQgY2FuIGhhbmRsZSB0aGUgZXh0ZW5zaW9uLgotICAgICAgICAg
ICAgICAgIGlmIChXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGFja2FnZSA9IFtbc2VsZiB3ZWJWaWV3
XSBfcGx1Z2luRm9yRXh0ZW5zaW9uOmV4dGVuc2lvbl0pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKFtwYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwot
I2lmbmRlZiBfX0xQNjRfXwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChbcGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2UgY2xhc3NdXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoW01JTUVUeXBlIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRl
bnRGcmFtZTsgLy8gR28gYWhlYWQgYW5kIGhvcGUgdGhhdCB3ZSBjYW4gZGlzcGxheSB0aGUgY29u
dGVudC4KLQotICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGUoTUlNRVR5cGUpKQotICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEltYWdlOwotCi0gICAg
aWYgKFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwYWNrYWdlID0gW1tzZWxmIHdlYlZpZXddIF9wbHVn
aW5Gb3JNSU1FVHlwZTpNSU1FVHlwZV0pIHsKLSAgICAgICAgaWYgKFtwYWNrYWdlIGlzS2luZE9m
Q2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgCi0gICAgICAgICAgICByZXR1cm4gT2Jq
ZWN0Q29udGVudE90aGVyUGx1Z2luOwotI2lmbmRlZiBfX0xQNjRfXwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChbcGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2UgY2xhc3NdXSk7Ci0gICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5l
dHNjYXBlUGx1Z2luOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoW1dlYkZy
YW1lVmlldyBfdmlld0NsYXNzRm9yTUlNRVR5cGU6TUlNRVR5cGVdKQotICAgICAgICByZXR1cm4g
T2JqZWN0Q29udGVudEZyYW1lOwotICAgIAotICAgIHJldHVybiBPYmplY3RDb250ZW50Tm9uZTsK
LX0KLQogLSAoam9iamVjdClnZXRBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXcKIHsKICAgICBp
ZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5HZXRBcHBsZXQp
XSkKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQkocmV2aXNpb24gMzA3MzEpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW1wb3J0ICJXZWJDYWNoZWRQYWdlUGxhdGZvcm1EYXRhLmgiCiAjaW1wb3J0ICJXZWJDaHJv
bWVDbGllbnQuaCIKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAi
V2ViUG9saWN5RGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJEb2N1bWVudEludGVybmFs
LmgiCiAjaW1wb3J0ICJXZWJEb2N1bWVudExvYWRlck1hYy5oIgogI2ltcG9ydCAiV2ViRG93bmxv
YWRJbnRlcm5hbC5oIgpAQCAtNDksOCArNDgsOCBAQAogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViRnJhbWVMb2FkRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkZyYW1l
Vmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb24uaCIKLSNpbXBv
cnQgIldlYkhUTUxWaWV3LmgiCisjaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRl
LmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5
SXRlbUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbVByaXZhdGUuaCIKICNpbXBv
cnQgIldlYkhpc3RvcnlQcml2YXRlLmgiCkBAIC01OSw4ICs1OCwxNSBAQAogI2ltcG9ydCAiV2Vi
S2l0TG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKICNpbXBvcnQg
IldlYk5TVVJMRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmll
dy5oIgorI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgiCisjaW1wb3J0ICJXZWJO
dWxsUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIu
aCIKKyNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldlYlBsdWdpblBh
Y2thZ2UuaCIKKyNpbXBvcnQgIldlYlBsdWdpblZpZXdGYWN0b3J5UHJpdmF0ZS5oIgogI2ltcG9y
dCAiV2ViUG9saWN5RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYlBvbGljeURlbGVnYXRlUHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9h
ZERlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUuaCIKQEAgLTY4LDYgKzc0
LDcgQEAKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYktpdFN5
c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbk1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2Fj
aGVkUGFnZS5oPgpAQCAtNzYsMTUgKzgzLDE2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50
TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Gb3JtU3RhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hpc3RvcnlJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ljb25EYXRh
YmFzZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0
cmluZy5oPgpAQCAtOTIsOSArMTAwLDkgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5k
bGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVCcmlkZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZU9iakNFeHRyYXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYktpdC9ET01IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNCwxMyArMTEyLDE0
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAvLyBTUEkgZm9yIE5TVVJMRG93bmxvYWQK
IC8vIE5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxMjE4NTA+IAotQGludGVyZmFjZSBOU1VS
TERvd25sb2FkIChOU1VSTERvd25sb2FkUHJpdmF0ZSkKK0BpbnRlcmZhY2UgTlNVUkxEb3dubG9h
ZCAoV2ViTlNVUkxEb3dubG9hZERldGFpbHMpCiAtICh2b2lkKV9zZXRPcmlnaW5hdGluZ1VSTDoo
TlNVUkwgKilvcmlnaW5hdGluZ1VSTDsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJIaXN0b3J5SXRl
bSAoV2ViSGlzdG9yeUl0ZW1Qcml2YXRlKQotLSAoQk9PTClfd2FzVXNlckdlc3R1cmU7Ci1AZW5k
CisvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBXZWJLaXQgcGx1Zy1p
bnMuCitOU1N0cmluZyAqV2ViUGx1Z2luQmFzZVVSTEtleSA9IEAiV2ViUGx1Z2luQmFzZVVSTCI7
CitOU1N0cmluZyAqV2ViUGx1Z2luQXR0cmlidXRlc0tleSA9IEAiV2ViUGx1Z2luQXR0cmlidXRl
cyI7CitOU1N0cmluZyAqV2ViUGx1Z2luQ29udGFpbmVyS2V5ID0gQCJXZWJQbHVnaW5Db250YWlu
ZXIiOwogCiBAaW50ZXJmYWNlIFdlYkZyYW1lUG9saWN5TGlzdGVuZXIgOiBOU09iamVjdCA8V2Vi
UG9saWN5RGVjaXNpb25MaXN0ZW5lciwgV2ViRm9ybVN1Ym1pc3Npb25MaXN0ZW5lcj4KIHsKQEAg
LTIzMiw5ICsyNDEsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRPcmlnaW5hbFVS
CiAgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdCAqaGlzdG9yeSA9IFt3ZWJWaWV3IGJhY2tGb3J3
YXJkTGlzdF07CiAgICAgICAgIGludCBiYWNrTGlzdENvdW50ID0gW2hpc3RvcnkgYmFja0xpc3RD
b3VudF07CiAgICAgICAgIGZvciAoaW50IGJhY2tJbmRleCA9IDA7IGJhY2tJbmRleCA8PSBiYWNr
TGlzdENvdW50ICYmICFvcmlnaW5hbFVSTDsgYmFja0luZGV4KyspIHsKLSAgICAgICAgICAgIFdl
Ykhpc3RvcnlJdGVtICpjdXJyZW50SXRlbSA9IFtoaXN0b3J5IGl0ZW1BdEluZGV4Oi1iYWNrSW5k
ZXhdOwotICAgICAgICAgICAgaWYgKCFbY3VycmVudEl0ZW0gcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2FzVXNlckdlc3R1cmUpXSB8fCBbY3VycmVudEl0ZW0gX3dhc1VzZXJHZXN0dXJl
XSkKLSAgICAgICAgICAgICAgICBvcmlnaW5hbFVSTCA9IFtjdXJyZW50SXRlbSBVUkxdOworICAg
ICAgICAgICAgLy8gRklYTUU6IEF0IG9uZSBwb2ludCB3ZSBoYWQgY29kZSBoZXJlIHRvIGNoZWNr
IGEgIndhcyB1c2VyIGdlc3R1cmUiIGZsYWcuCisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRv
IHJlc3RvcmUgdGhhdCBsb2dpYz8KKyAgICAgICAgICAgIG9yaWdpbmFsVVJMID0gW1toaXN0b3J5
IGl0ZW1BdEluZGV4Oi1iYWNrSW5kZXhdIFVSTF07CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEx
MDEsMzMgKzExMTAsMTAxIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFn
ZSgKIH0KIAogUGFzc1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZy
YW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBt
YXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkKKyAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVy
LCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0
KQogewotICAgIFdlYkZyYW1lQnJpZGdlKiBicmlkZ2UgPSBtX3dlYkZyYW1lLT5fcHJpdmF0ZS0+
YnJpZGdlOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKLSAgICByZXR1
cm4gW2JyaWRnZSBjcmVhdGVDaGlsZEZyYW1lTmFtZWQ6bmFtZQotICAgICAgICAgICAgICAgICAg
IHdpdGhVUkw6dXJsCi0gICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6cmVmZXJyZXIgCi0gICAg
ICAgICAgICAgICAgICAgb3duZXJFbGVtZW50Om93bmVyRWxlbWVudAotICAgICAgICAgICAgICAg
ICAgIGFsbG93c1Njcm9sbGluZzphbGxvd3NTY3JvbGxpbmcKLSAgICAgICAgICAgICAgICAgICBt
YXJnaW5XaWR0aDptYXJnaW5XaWR0aAotICAgICAgICAgICAgICAgICAgIG1hcmdpbkhlaWdodDpt
YXJnaW5IZWlnaHRdOworICAgIEFTU0VSVChtX3dlYkZyYW1lKTsKKyAgICAKKyAgICBXZWJGcmFt
ZVZpZXcgKmNoaWxkVmlldyA9IFtbV2ViRnJhbWVWaWV3IGFsbG9jXSBpbml0XTsKKyAgICBbY2hp
bGRWaWV3IHNldEFsbG93c1Njcm9sbGluZzphbGxvd3NTY3JvbGxpbmddOworICAgIFtjaGlsZFZp
ZXcgX3NldE1hcmdpbldpZHRoOm1hcmdpbldpZHRoXTsKKyAgICBbY2hpbGRWaWV3IF9zZXRNYXJn
aW5IZWlnaHQ6bWFyZ2luSGVpZ2h0XTsKKworICAgIFdlYkZyYW1lQnJpZGdlICpuZXdCcmlkZ2Ug
PSBbW1dlYkZyYW1lQnJpZGdlIGFsbG9jXSBpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50Om93
bmVyRWxlbWVudCBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6Y2hpbGRWaWV3XTsKKyAgICBbY2hp
bGRWaWV3IHJlbGVhc2VdOworCisgICAgaWYgKCFuZXdCcmlkZ2UpCisgICAgICAgIHJldHVybiAw
OworCisgICAgW21fd2ViRnJhbWUuZ2V0KCkgX2FkZENoaWxkOltuZXdCcmlkZ2Ugd2ViRnJhbWVd
XTsKKyAgICBbbmV3QnJpZGdlIHJlbGVhc2VdOworCisgICAgUmVmUHRyPEZyYW1lPiBuZXdGcmFt
ZSA9IFtuZXdCcmlkZ2UgX2ZyYW1lXTsKKyAgICAKKyAgICBbbV93ZWJGcmFtZS5nZXQoKSBfbG9h
ZFVSTDp1cmwgcmVmZXJyZXI6cmVmZXJyZXIgaW50b0NoaWxkOmtpdChuZXdGcmFtZS5nZXQoKSld
OworCisgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3ZlZCBp
dCBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICBpZiAoIW5ld0ZyYW1lLT50cmVlKCktPnBhcmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBuZXdGcmFtZS5nZXQoKTsKIAogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKICAgICByZXR1cm4gMDsKIH0KIAogT2JqZWN0
Q29udGVudFR5cGUgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBXZWJGcmFtZUJyaWRn
ZSogYnJpZGdlID0gbV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZTsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFticmlkZ2UgZGV0ZXJtaW5lT2JqZWN0RnJv
bU1JTUVUeXBlOm1pbWVUeXBlIFVSTDp1cmxdOworCisgICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRo
YXQgZW5zdXJlcyBUaWdlciBNYWlsJ3MgV2ViS2l0IHBsdWctaW4gd2lsbCBsb2FkIGR1cmluZyBs
YXlvdXQKKyAgICAvLyBhbmQgbm90IGF0dGFjaCB0aW1lLiAoNTUyMDU0MSkKKyAgICBzdGF0aWMg
Qk9PTCBpc1RpZ2VyTWFpbCA9IFdLQXBwVmVyc2lvbkNoZWNrTGVzc1RoYW4oQCJjb20uYXBwbGUu
bWFpbCIsIC0xLCAzLjApOworICAgIGlmIChpc1RpZ2VyTWFpbCAmJiBtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1hcHBsZS1tc2ctYXR0YWNobWVudCIpCisgICAgICAgIHJldHVybiBPYmplY3RD
b250ZW50TmV0c2NhcGVQbHVnaW47CisKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlOworCisg
ICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRyeSB0byBndWVzcyB0aGUgTUlN
RSB0eXBlIGJhc2VkIG9mZiB0aGUgZXh0ZW5zaW9uLgorICAgICAgICBOU1VSTCAqVVJMID0gdXJs
OworICAgICAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gW1tVUkwgcGF0aF0gcGF0aEV4dGVuc2lv
bl07CisgICAgICAgIGlmIChbZXh0ZW5zaW9uIGxlbmd0aF0gPiAwKSB7CisgICAgICAgICAgICB0
eXBlID0gV0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworICAgICAgICAgICAg
aWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbm8gTUlNRSB0eXBl
IGlzIHNwZWNpZmllZCwgdXNlIGEgcGx1Zy1pbiBpZiB3ZSBoYXZlIG9uZSB0aGF0IGNhbiBoYW5k
bGUgdGhlIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBpZiAoV2ViQmFzZVBsdWdpblBhY2th
Z2UgKnBhY2thZ2UgPSBbZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKSBfcGx1Z2luRm9yRXh0
ZW5zaW9uOmV4dGVuc2lvbl0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFtwYWNrYWdlIGlz
S2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSkgCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOworI2lmbmRlZiBfX0xQNjRf
XworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChbcGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xh
c3NdXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNj
YXBlUGx1Z2luOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7IC8vIEdvIGFoZWFkIGFu
ZCBob3BlIHRoYXQgd2UgY2FuIGRpc3BsYXkgdGhlIGNvbnRlbnQuCisKKyAgICBpZiAoTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQorICAgICAgICByZXR1
cm4gT2JqZWN0Q29udGVudEltYWdlOworCisgICAgaWYgKFdlYkJhc2VQbHVnaW5QYWNrYWdlICpw
YWNrYWdlID0gW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX3BsdWdpbkZvck1JTUVUeXBl
OnR5cGVdKSB7CisjaWZuZGVmIF9fTFA2NF9fCisgICAgICAgIGlmIChbcGFja2FnZSBpc0tpbmRP
ZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xhc3NdXSkKKyAgICAgICAgICAgIHJl
dHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisjZW5kaWYKKyAgICAgICAgQVNTRVJU
KFtwYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBhY2thZ2UgY2xhc3NdXSk7CisgICAg
ICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47CisgICAgfQorCisgICAgaWYgKFtX
ZWJGcmFtZVZpZXcgX3ZpZXdDbGFzc0Zvck1JTUVUeXBlOnR5cGVdKQorICAgICAgICByZXR1cm4g
T2JqZWN0Q29udGVudEZyYW1lOworICAgIAorICAgIHJldHVybiBPYmplY3RDb250ZW50Tm9uZTsK
KwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKICAgICByZXR1cm4gT2JqZWN0Q29u
dGVudE5vbmU7CiB9CiAKLXN0YXRpYyBOU0FycmF5KiBuc0FycmF5KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2ZWN0b3IpCitzdGF0aWMgTlNNdXRhYmxlQXJyYXkqIGtpdChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdmVjdG9yKQogewogICAgIHVuc2lnbmVkIGxlbiA9IHZlY3Rvci5zaXplKCk7CiAgICAg
TlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
Omxlbl07CkBAIC0xMTM2LDE5ICsxMjEzLDE1NiBAQCBzdGF0aWMgTlNBcnJheSogbnNBcnJheShj
b25zdCBWZWN0b3I8U3RyCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1XaWRnZXQqIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQorc3RhdGljIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9IG1fd2ViRnJh
bWUtPl9wcml2YXRlLT5icmlkZ2U7CisgICAgc2l6ZV90IHNpemUgPSBwYXJhbU5hbWVzLnNpemUo
KTsKKyAgICBBU1NFUlQoc2l6ZSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShwYXJhbU5hbWVzW2ldLCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJhbVZhbHVlc1tp
XTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitzdGF0aWMgTlNWaWV3ICpwbHVn
aW5WaWV3KFdlYkZyYW1lICpmcmFtZSwgV2ViUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZSwK
KyAgICBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcywgTlNBcnJheSAqYXR0cmlidXRlVmFsdWVzLCBO
U1VSTCAqYmFzZVVSTCwKKyAgICBET01FbGVtZW50ICplbGVtZW50LCBCT09MIGxvYWRNYW51YWxs
eSkKK3sKKyAgICBXZWJIVE1MVmlldyAqZG9jVmlldyA9IChXZWJIVE1MVmlldyAqKVtbZnJhbWUg
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIEFTU0VSVChbZG9jVmlldyBpc0tpbmRPZkNs
YXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKKyAgICAgICAgCisgICAgV2ViUGx1Z2luQ29udHJv
bGxlciAqcGx1Z2luQ29udHJvbGxlciA9IFtkb2NWaWV3IF9wbHVnaW5Db250cm9sbGVyXTsKKyAg
ICAKKyAgICAvLyBTdG9yZSBhdHRyaWJ1dGVzIGluIGEgZGljdGlvbmFyeSBzbyB0aGV5IGNhbiBi
ZSBwYXNzZWQgdG8gV2ViUGx1Z2lucy4KKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6YXR0cmli
dXRlVmFsdWVzIGZvcktleXM6YXR0cmlidXRlTmFtZXNdOworICAgIAorICAgIFtwbHVnaW5QYWNr
YWdlIGxvYWRdOworICAgIENsYXNzIHZpZXdGYWN0b3J5ID0gW3BsdWdpblBhY2thZ2Ugdmlld0Zh
Y3RvcnldOworICAgIAorICAgIE5TVmlldyAqdmlldyA9IG5pbDsKKyAgICBOU0RpY3Rpb25hcnkg
KmFyZ3VtZW50cyA9IG5pbDsKKyAgICAKKyAgICBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKKyAgICAgICAg
YXJndW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z0luQmFzZVVSTEtleSwKKyAgICAgICAgICAgIGF0
dHJpYnV0ZXMsIFdlYlBsdWdJbkF0dHJpYnV0ZXNLZXksCisgICAgICAgICAgICBwbHVnaW5Db250
cm9sbGVyLCBXZWJQbHVnSW5Db250YWluZXJLZXksCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpsb2FkTWFudWFsbHkgPyBXZWJQbHVnSW5Nb2RlRnVsbCA6IFdlYlBsdWdJbk1v
ZGVFbWJlZF0sIFdlYlBsdWdJbk1vZGVLZXksCisgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6IWxvYWRNYW51YWxseV0sIFdlYlBsdWdJblNob3VsZExvYWRNYWluUmVzb3VyY2VL
ZXksCisgICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVnSW5Db250YWluaW5nRWxlbWVudEtleSwK
KyAgICAgICAgICAgIG5pbF07CisgICAgICAgIExPRyhQbHVnaW5zLCAiYXJndW1lbnRzOlxuJUAi
LCBhcmd1bWVudHMpOworICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKKyAgICAgICAgYXJn
dW1lbnRzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAg
ICAgICAgICAgYmFzZVVSTCwgV2ViUGx1Z2luQmFzZVVSTEtleSwKKyAgICAgICAgICAgIGF0dHJp
YnV0ZXMsIFdlYlBsdWdpbkF0dHJpYnV0ZXNLZXksCisgICAgICAgICAgICBwbHVnaW5Db250cm9s
bGVyLCBXZWJQbHVnaW5Db250YWluZXJLZXksCisgICAgICAgICAgICBlbGVtZW50LCBXZWJQbHVn
SW5Db250YWluaW5nRWxlbWVudEtleSwKKyAgICAgICAgICAgIG5pbF07CisgICAgICAgIExPRyhQ
bHVnaW5zLCAiYXJndW1lbnRzOlxuJUAiLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIHZpZXcg
PSBbV2ViUGx1Z2luQ29udHJvbGxlciBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHMg
ZnJvbVBsdWdpblBhY2thZ2U6cGx1Z2luUGFja2FnZV07CisgICAgW2F0dHJpYnV0ZXMgcmVsZWFz
ZV07CisgICAgcmV0dXJuIHZpZXc7Cit9CiAKK1dpZGdldCogV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCit7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAg
IHJldHVybiBuZXcgV2lkZ2V0KFticmlkZ2Ugdmlld0ZvclBsdWdpbldpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dXJsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVzOm5zQXJyYXkocGFyYW1OYW1lcykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXM6bnNB
cnJheShwYXJhbVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTUlNRVR5cGU6bWltZVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERPTUVsZW1lbnQ6W0RPTUVsZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1hbnVhbGx5OmxvYWRN
YW51YWxseV0pOworCisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVz
LnNpemUoKSk7CisKKyAgICBpbnQgZXJyb3JDb2RlID0gMDsKKworICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIFNFTCBzZWxlY3RvciA9IEBz
ZWxlY3Rvcih3ZWJWaWV3OnBsdWdJblZpZXdXaXRoQXJndW1lbnRzOik7CisgICAgTlNVUkwgKlVS
TCA9IHVybDsKKworICAgIGlmIChbW3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVj
dG9yOnNlbGVjdG9yXSkgeworICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyaWJ1dGVz
ID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6a2l0KHBhcmFt
TmFtZXMpIGZvcktleXM6a2l0KHBhcmFtVmFsdWVzKV07CisgICAgICAgIE5TRGljdGlvbmFyeSAq
YXJndW1lbnRzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6
CisgICAgICAgICAgICBhdHRyaWJ1dGVzLCBXZWJQbHVnSW5BdHRyaWJ1dGVzS2V5LAorICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bG9hZE1hbnVhbGx5ID8gV2ViUGx1Z0luTW9k
ZUZ1bGwgOiBXZWJQbHVnSW5Nb2RlRW1iZWRdLCBXZWJQbHVnSW5Nb2RlS2V5LAorICAgICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOiFsb2FkTWFudWFsbHldLCBXZWJQbHVnSW5TaG91
bGRMb2FkTWFpblJlc291cmNlS2V5LAorICAgICAgICAgICAgZWxlbWVudCwgV2ViUGx1Z0luQ29u
dGFpbmluZ0VsZW1lbnRLZXksCisgICAgICAgICAgICBVUkwsIFdlYlBsdWdJbkJhc2VVUkxLZXks
IC8vIFVSTCBtaWdodCBiZSBuaWwsIHNvIGFkZCBpdCBsYXN0CisgICAgICAgICAgICBuaWxdOwor
CisgICAgICAgIE5TVmlldyAqdmlldyA9IENhbGxVSURlbGVnYXRlKHdlYlZpZXcsIHNlbGVjdG9y
LCBhcmd1bWVudHMpOworCisgICAgICAgIFthdHRyaWJ1dGVzIHJlbGVhc2VdOworICAgICAgICBb
YXJndW1lbnRzIHJlbGVhc2VdOworCisgICAgICAgIGlmICh2aWV3KQorICAgICAgICAgICAgcmV0
dXJuIG5ldyBXaWRnZXQodmlldyk7CisgICAgfQorCisgICAgTlNTdHJpbmcgKk1JTUVUeXBlOwor
ICAgIFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlOworICAgIGlmIChtaW1lVHlw
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgTUlNRVR5cGUgPSBuaWw7CisgICAgICAgIHBsdWdpblBh
Y2thZ2UgPSBuaWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTUlNRVR5cGUgPSBtaW1lVHlwZTsK
KyAgICAgICAgcGx1Z2luUGFja2FnZSA9IFt3ZWJWaWV3IF9wbHVnaW5Gb3JNSU1FVHlwZTptaW1l
VHlwZV07CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBbW1VSTCBwYXRo
XSBwYXRoRXh0ZW5zaW9uXTsKKyAgICBpZiAoIXBsdWdpblBhY2thZ2UgJiYgW2V4dGVuc2lvbiBs
ZW5ndGhdICE9IDApIHsKKyAgICAgICAgcGx1Z2luUGFja2FnZSA9IFt3ZWJWaWV3IF9wbHVnaW5G
b3JFeHRlbnNpb246ZXh0ZW5zaW9uXTsKKyAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKKyAg
ICAgICAgICAgIE5TU3RyaW5nICpuZXdNSU1FVHlwZSA9IFtwbHVnaW5QYWNrYWdlIE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uOmV4dGVuc2lvbl07CisgICAgICAgICAgICBpZiAoW25ld01JTUVUeXBlIGxl
bmd0aF0gIT0gMCkKKyAgICAgICAgICAgICAgICBNSU1FVHlwZSA9IG5ld01JTUVUeXBlOworICAg
ICAgICB9CisgICAgfQorCisgICAgTlNWaWV3ICp2aWV3ID0gbmlsOworCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29yZShtX3dlYkZyYW1lLmdldCgpKS0+ZG9jdW1lbnQoKTsKKyAgICBOU1VS
TCAqYmFzZVVSTCA9IGRvY3VtZW50LT5iYXNlVVJMKCk7CisgICAgaWYgKHBsdWdpblBhY2thZ2Up
IHsKKyAgICAgICAgaWYgKFtwbHVnaW5QYWNrYWdlIGlzS2luZE9mQ2xhc3M6W1dlYlBsdWdpblBh
Y2thZ2UgY2xhc3NdXSkKKyAgICAgICAgICAgIHZpZXcgPSBwbHVnaW5WaWV3KG1fd2ViRnJhbWUu
Z2V0KCksIChXZWJQbHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZSwga2l0KHBhcmFtTmFtZXMp
LCBraXQocGFyYW1WYWx1ZXMpLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIGxvYWRNYW51YWxseSk7
CisgICAgICAgICAgICAKKyNpZm5kZWYgX19MUDY0X18KKyAgICAgICAgZWxzZSBpZiAoW3BsdWdp
blBhY2thZ2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNzXV0p
IHsKKyAgICAgICAgICAgIFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3ICplbWJlZGRlZFZp
ZXcgPSBbW1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyBhbGxvY10KKyAgICAgICAgICAg
ICAgICBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKQorICAgICAgICAgICAgICAgIHBsdWdpblBhY2thZ2U6KFdlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZSAqKXBsdWdpblBhY2thZ2UKKyAgICAgICAgICAgICAgICBVUkw6VVJMCisgICAgICAg
ICAgICAgICAgYmFzZVVSTDpiYXNlVVJMCisgICAgICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5
cGUKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVLZXlzOmtpdChwYXJhbU5hbWVzKQorICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlczpraXQocGFyYW1WYWx1ZXMpCisgICAgICAgICAgICAg
ICAgbG9hZE1hbnVhbGx5OmxvYWRNYW51YWxseQorICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6
a2l0KGVsZW1lbnQpXSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICB2aWV3ID0gZW1iZWRkZWRW
aWV3OworICAgICAgICB9IAorI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGVycm9yQ29kZSA9
IFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbjsKKworICAgIGlmICghZXJyb3JDb2RlICYmICF2
aWV3KQorICAgICAgICBlcnJvckNvZGUgPSBXZWJLaXRFcnJvckNhbm5vdExvYWRQbHVnSW47CisK
KyAgICBpZiAoZXJyb3JDb2RlKSB7CisgICAgICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vycm9y
IGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5FcnJvckNvZGU6ZXJyb3JDb2RlCisgICAgICAgICAgICBj
b250ZW50VVJMOlVSTAorICAgICAgICAgICAgcGx1Z2luUGFnZVVSTDpkb2N1bWVudC0+Y29tcGxl
dGVVUkwocGFyc2VVUkwocGFyYW1ldGVyVmFsdWUocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJw
bHVnaW5zcGFnZSIpKSkKKyAgICAgICAgICAgIHBsdWdpbk5hbWU6W3BsdWdpblBhY2thZ2UgbmFt
ZV0KKyAgICAgICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlXTsKKyAgICAgICAgV2ViTnVsbFBsdWdp
blZpZXcgKm51bGxWaWV3ID0gW1tbV2ViTnVsbFBsdWdpblZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCisgICAgICAg
ICAgICBlcnJvcjplcnJvciBET01FbGVtZW50OmtpdChlbGVtZW50KV0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICB2aWV3ID0gbnVsbFZpZXc7CisgICAgICAgIFtlcnJvciByZWxlYXNlXTsKKyAgICB9
CisgICAgCisgICAgQVNTRVJUKHZpZXcpOworICAgIHJldHVybiBuZXcgV2lkZ2V0KHZpZXcpOwor
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIHJldHVybiAwOwpAQCAtMTE1
NywyNSArMTM3MSw5MSBAQCBXaWRnZXQqIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVn
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQq
IHBsdWdpbldpZGdldCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
W21fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2UgcmVkaXJlY3REYXRhVG9QbHVnaW46cGx1Z2lu
V2lkZ2V0LT5nZXRWaWV3KCldOworCisgICAgV2ViSFRNTFJlcHJlc2VudGF0aW9uICpyZXByZXNl
bnRhdGlvbiA9IChXZWJIVE1MUmVwcmVzZW50YXRpb24gKilbW21fd2ViRnJhbWUuZ2V0KCkgX2Rh
dGFTb3VyY2VdIHJlcHJlc2VudGF0aW9uXTsKKworICAgIE5TVmlldyAqcGx1Z2luVmlldyA9IHBs
dWdpbldpZGdldC0+Z2V0VmlldygpOworCisjaWZuZGVmIF9fTFA2NF9fCisgICAgaWYgKFtwbHVn
aW5WaWV3IGlzS2luZE9mQ2xhc3M6W1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3IGNsYXNz
XV0pCisgICAgICAgIFtyZXByZXNlbnRhdGlvbiBfcmVkaXJlY3REYXRhVG9NYW51YWxMb2FkZXI6
KFdlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3ICopcGx1Z2luVmlldyBmb3JQbHVnaW5WaWV3
OnBsdWdpblZpZXddOworICAgIGVsc2UgeworI2Vsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgICAg
V2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IChXZWJIVE1MVmlldyAqKVtbbV93ZWJGcmFtZS5n
ZXQoKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgIEFTU0VSVChbZG9jdW1lbnRW
aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOworICAgICAgICBbcmVwcmVz
ZW50YXRpb24gX3JlZGlyZWN0RGF0YVRvTWFudWFsTG9hZGVyOltkb2N1bWVudFZpZXcgX3BsdWdp
bkNvbnRyb2xsZXJdIGZvclBsdWdpblZpZXc6cGx1Z2luVmlld107CisgICAgfQorCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogV2lkZ2V0KiBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKKyAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
VmFsdWVzKQogewotICAgIFdpZGdldCogcmVzdWx0ID0gbmV3IFdpZGdldDsKLSAgICAKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgV2ViRnJhbWVCcmlkZ2UqIGJyaWRnZSA9
IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7Ci0gICAgcmVzdWx0LT5zZXRWaWV3KFticmlk
Z2Ugdmlld0ZvckphdmFBcHBsZXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
TmFtZXM6bnNBcnJheShwYXJhbU5hbWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZVZhbHVlczpuc0FycmF5KHBhcmFtVmFsdWVzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2VVUkw6YmFzZVVSTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTUVs
ZW1lbnQ6W0RPTUVsZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRdXSk7ICAgIAorCisgICAgTlNW
aWV3ICp2aWV3ID0gbmlsOworCisgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gQCJhcHBsaWNhdGlv
bi94LWphdmEtYXBwbGV0IjsKKyAgICAKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmll
dyhtX3dlYkZyYW1lLmdldCgpKTsKKworICAgIFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5Q
YWNrYWdlID0gW3dlYlZpZXcgX3BsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXTsKKworICAgIGlm
IChwbHVnaW5QYWNrYWdlKSB7CisgICAgICAgIGlmIChbcGx1Z2luUGFja2FnZSBpc0tpbmRPZkNs
YXNzOltXZWJQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIC8vIEZvciBzb21l
IHJlYXNvbiwgdGhlIEphdmEgcGx1Zy1pbiByZXF1aXJlcyB0aGF0IHdlIHBhc3MgdGhlIGRpbWVu
c2lvbiBvZiB0aGUgcGx1Zy1pbiBhcyBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgTlNNdXRhYmxl
QXJyYXkgKm5hbWVzID0ga2l0KHBhcmFtTmFtZXMpOworICAgICAgICAgICAgTlNNdXRhYmxlQXJy
YXkgKnZhbHVlcyA9IGtpdChwYXJhbVZhbHVlcyk7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVy
VmFsdWUocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJ3aWR0aCIpLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICAgICAgW25hbWVzIGFkZE9iamVjdDpAIndpZHRoIl07CisgICAgICAgICAgICAgICAg
W3ZhbHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIHNpemUu
d2lkdGgoKV1dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcmFtZXRlclZhbHVl
KHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCAiaGVpZ2h0IikuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBbbmFtZXMgYWRkT2JqZWN0OkAiaGVpZ2h0Il07CisgICAgICAgICAgICAgICAgW3Zh
bHVlcyBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCIsIHNpemUud2lk
dGgoKV1dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlldyA9IHBsdWdpblZpZXcobV93
ZWJGcmFtZS5nZXQoKSwgKFdlYlBsdWdpblBhY2thZ2UgKilwbHVnaW5QYWNrYWdlLCBuYW1lcywg
dmFsdWVzLCBiYXNlVVJMLCBraXQoZWxlbWVudCksIE5PKTsKKyAgICAgICAgICAgIFtuYW1lcyBy
ZWxlYXNlXTsKKyAgICAgICAgICAgIFt2YWx1ZXMgcmVsZWFzZV07CisgICAgICAgICAgICAKKyAg
ICAgICAgfSAKKyNpZm5kZWYgX19MUDY0X18KKyAgICAgICAgZWxzZSBpZiAoW3BsdWdpblBhY2th
Z2UgaXNLaW5kT2ZDbGFzczpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKKyAg
ICAgICAgICAgIHZpZXcgPSBbW1tXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlOihXZWJOZXRzY2FwZVBsdWdpblBhY2th
Z2UgKilwbHVnaW5QYWNrYWdlCisgICAgICAgICAgICAgICAgVVJMOm5pbAorICAgICAgICAgICAg
ICAgIGJhc2VVUkw6YmFzZVVSTAorICAgICAgICAgICAgICAgIE1JTUVUeXBlOk1JTUVUeXBlCisg
ICAgICAgICAgICAgICAgYXR0cmlidXRlS2V5czpraXQocGFyYW1OYW1lcykKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVWYWx1ZXM6a2l0KHBhcmFtVmFsdWVzKQorICAgICAgICAgICAgICAgIGxv
YWRNYW51YWxseTpOTworICAgICAgICAgICAgICAgIERPTUVsZW1lbnQ6a2l0KGVsZW1lbnQpXSBh
dXRvcmVsZWFzZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKCF2aWV3KSB7Cisg
ICAgICAgIE5TRXJyb3IgKmVycm9yID0gW1tOU0Vycm9yIGFsbG9jXSBfaW5pdFdpdGhQbHVnaW5F
cnJvckNvZGU6V2ViS2l0RXJyb3JKYXZhVW5hdmFpbGFibGUKKyAgICAgICAgICAgIGNvbnRlbnRV
Ukw6bmlsCisgICAgICAgICAgICBwbHVnaW5QYWdlVVJMOm5pbAorICAgICAgICAgICAgcGx1Z2lu
TmFtZTpbcGx1Z2luUGFja2FnZSBuYW1lXQorICAgICAgICAgICAgTUlNRVR5cGU6TUlNRVR5cGVd
OworICAgICAgICB2aWV3ID0gW1tbV2ViTnVsbFBsdWdpblZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCisgICAgICAg
ICAgICBlcnJvcjplcnJvciBET01FbGVtZW50OmtpdChlbGVtZW50KV0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICBbZXJyb3IgcmVsZWFzZV07CisgICAgfQorCisgICAgQVNTRVJUKHZpZXcpOworICAg
IHJldHVybiBuZXcgV2lkZ2V0KHZpZXcpOworCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBuZXcgV2lkZ2V0OwogfQog
CiBTdHJpbmcgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QK
QEAgLTExODgsNyArMTQ2OCwyMSBAQCBTdHJpbmcgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJy
aWRlTWVkCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndpbmRvd09iamVjdENsZWFyZWQo
KQogewotICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+YnJpZGdlIHdpbmRvd09iamVjdENsZWFy
ZWRdOworICAgIEZyYW1lICpmcmFtZSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgV2Vi
VmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgV2ViRnJh
bWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJW
aWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2ViVmlldyk7CisgICAgaWYg
KGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpIHsKKyAg
ICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5k
b3dPYmplY3RGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFy
V2luZG93T2JqZWN0OmZvckZyYW1lOiksCisgICAgICAgICAgICBmcmFtZS0+d2luZG93U2NyaXB0
T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoaW1wbGVtZW50YXRp
b25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jKSB7CisgICAgICAgIENhbGxGcmFt
ZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJs
ZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OndpbmRvd1NjcmlwdE9iamVjdEF2YWls
YWJsZTopLAorICAgICAgICAgICAgZnJhbWUtPndpbmRvd1NjcmlwdE9iamVjdCgpKTsKKyAgICB9
CisKKyAgICBpZiAoW3dlYlZpZXcgc2NyaXB0RGVidWdEZWxlZ2F0ZV0gfHwgW1dlYlNjcmlwdERl
YnVnU2VydmVyIGxpc3RlbmVyQ291bnRdKSB7CisgICAgICAgIFttX3dlYkZyYW1lLmdldCgpIF9k
ZXRhY2hTY3JpcHREZWJ1Z2dlcl07CisgICAgICAgIFttX3dlYkZyYW1lLmdldCgpIF9hdHRhY2hT
Y3JpcHREZWJ1Z2dlcl07CisgICAgfQogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpy
ZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19519</attachid>
            <date>2008-03-04 04:16:03 -0800</date>
            <delta_ts>2008-03-04 07:20:59 -0800</delta_ts>
            <desc>patch for just window method</desc>
            <filename>WindowBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>6877</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIFdlYkNvcmVGcmFtZUJyaWRnZSB3aW5kb3cgbWV0aG9kCisKKyAgICAgICAgKiBwYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bmRGYWtlRXZlbnRzQWZ0ZXJXaWRnZXRUcmFja2luZyk6IEdldCB0aGUgd2luZG93IGJ5IGNhbGxp
bmcKKyAgICAgICAgd2luZG93IG9uIHRoZSBOU1ZpZXcgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnJp
ZGdlLiBUaGUgV2ViS2l0IHNpZGUgd2Fzbid0IGRvaW5nIGFueXRoaW5nCisgICAgICAgIHNwZWNp
YWwsIHNvIGEgY2FsbCB0byAtW05TVmlldyB3aW5kb3ddIGlzIGZpbmUuCisKKyAgICAgICAgKiBw
YWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCB0aGUgd2luZG93IG1ldGhvZC4K
KwogMjAwOC0wMy0wNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgU3VnZ2VzdGVkIGJ5IERhcmluLCBydWJiZXItc3RhbXBlZCBieSBNYXJrLgpJbmRleDog
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzNSw2ICs1
MzUsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlVXAoTlNFdmVudCAqZXZlbgogICovCiB2
b2lkIEV2ZW50SGFuZGxlcjo6c2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZl
bnQgKmluaXRpYXRpbmdFdmVudCkKIHsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52
aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNl
OwpAQCAtNTQzLDM0ICs1NDcsMzQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRz
QWZ0ZXJXaQogICAgICAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBuaWw7CiAgICAgICAgIGlmIChl
dmVudFR5cGUgPT0gTlNMZWZ0TW91c2VEb3duKSB7CiAgICAgICAgICAgICBmYWtlRXZlbnQgPSBb
TlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246W2luaXRpYXRpbmdFdmVudCBsb2NhdGlvbklu
V2luZG93XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltp
bml0aWF0aW5nRXZlbnQgbW9kaWZpZXJGbGFnc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcDpbaW5pdGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltpbml0aWF0aW5nRXZlbnQgd2lu
ZG93TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQ6W2luaXRpYXRpbmdFdmVudCBjb250ZXh0XQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnROdW1iZXI6W2luaXRpYXRpbmdFdmVudCBldmVudE51bWJlcl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrQ291bnQ6W2luaXRpYXRpbmdFdmVu
dCBjbGlja0NvdW50XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3N1
cmU6W2luaXRpYXRpbmdFdmVudCBwcmVzc3VyZV1dOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOltpbml0aWF0aW5nRXZlbnQgbG9jYXRpb25Jbldp
bmRvd10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFn
czpbaW5pdGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W2luaXRpYXRpbmdFdmVudCB0aW1lc3RhbXBd
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W2lu
aXRpYXRpbmdFdmVudCB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQ6W2luaXRpYXRpbmdFdmVudCBjb250ZXh0XQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOltpbml0aWF0aW5n
RXZlbnQgZXZlbnROdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsaWNrQ291bnQ6W2luaXRpYXRpbmdFdmVudCBjbGlja0NvdW50XQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlOltpbml0aWF0aW5nRXZlbnQg
cHJlc3N1cmVdXTsKICAgICAgICAgCiAgICAgICAgICAgICBbTlNBcHAgcG9zdEV2ZW50OmZha2VF
dmVudCBhdFN0YXJ0OllFU107CiAgICAgICAgIH0gZWxzZSB7IC8vIGV2ZW50VHlwZSA9PSBOU0tl
eURvd24KICAgICAgICAgICAgIGZha2VFdmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6
TlNLZXlVcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246W2lu
aXRpYXRpbmdFdmVudCBsb2NhdGlvbkluV2luZG93XQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVyRmxhZ3M6W2luaXRpYXRpbmdFdmVudCBtb2RpZmllckZsYWdzXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W2luaXRpYXRpbmdFdmVu
dCB0aW1lc3RhbXBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJl
cjpbaW5pdGlhdGluZ0V2ZW50IHdpbmRvd051bWJlcl0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0Oltpbml0aWF0aW5nRXZlbnQgY29udGV4dF0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOltpbml0aWF0aW5nRXZlbnQgY2hh
cmFjdGVyc10gCi0gICAgICAgICAgICAgICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpb
aW5pdGlhdGluZ0V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc10gCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzQVJlcGVhdDpbaW5pdGlhdGluZ0V2ZW50IGlzQVJl
cGVhdF0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29kZTpbaW5p
dGlhdGluZ0V2ZW50IGtleUNvZGVdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb246W2luaXRpYXRpbmdFdmVudCBsb2NhdGlvbkluV2luZG93XQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbaW5pdGlhdGlu
Z0V2ZW50IG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wOltpbml0aWF0aW5nRXZlbnQgdGltZXN0YW1wXQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbaW5pdGlhdGluZ0V2ZW50IHdp
bmRvd051bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQ6W2luaXRpYXRpbmdFdmVudCBjb250ZXh0XQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhcmFjdGVyczpbaW5pdGlhdGluZ0V2ZW50IGNoYXJhY3RlcnNdIAor
ICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyczpbaW5pdGlh
dGluZ0V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc10gCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXNBUmVwZWF0Oltpbml0aWF0aW5nRXZlbnQgaXNBUmVw
ZWF0XSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvZGU6
W2luaXRpYXRpbmdFdmVudCBrZXlDb2RlXV07CiAgICAgICAgICAgICBbTlNBcHAgcG9zdEV2ZW50
OmZha2VFdmVudCBhdFN0YXJ0OllFU107CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6ICBX
ZSBzaG91bGQgcmVhbGx5IGdldCB0aGUgY3VycmVudCBtb2RpZmllckZsYWdzIGhlcmUsIGJ1dCB0
aGVyZSdzIG5vIHdheSB0byBwb2xsCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5
IGdldCB0aGUgY3VycmVudCBtb2RpZmllckZsYWdzIGhlcmUsIGJ1dCB0aGVyZSdzIG5vIHdheSB0
byBwb2xsCiAgICAgICAgIC8vIHRoZW0gaW4gQ29jb2EsIGFuZCBiZWNhdXNlIHRoZSBldmVudCBz
dHJlYW0gd2FzIHN0b2xlbiBieSB0aGUgQ2FyYm9uIG1lbnUgY29kZSB3ZSBoYXZlCiAgICAgICAg
IC8vIG5vIHVwLXRvLWRhdGUgY2FjaGUgb2YgdGhlbSBhbnl3aGVyZS4KICAgICAgICAgZmFrZUV2
ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246W1ttX2ZyYW1lLT5icmlkZ2Uo
KSB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlvbl1dCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpbW3ZpZXctPmdl
dFZpZXcoKSB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlv
bl1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbaW5p
dGlhdGluZ0V2ZW50IG1vZGlmaWVyRmxhZ3NdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcDpbaW5pdGlhdGluZ0V2ZW50IHRpbWVzdGFtcF0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltpbml0aWF0aW5nRXZlbnQg
d2luZG93TnVtYmVyXQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCShy
ZXZpc2lvbiAzMDczMSkKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMCw4ICsyMTAsNiBAQCBlbnVtIFdlYlNjcm9sbEdyYW51bGFy
aXR5IHsKIAogQHByb3RvY29sIFdlYkNvcmVGcmFtZUJyaWRnZQogCi0tIChOU1dpbmRvdyAqKXdp
bmRvdzsKLQogLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcjsKIC0gKHZvaWQpbWFrZUZp
cnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRlciAqKXJlc3BvbmRlcjsKIApJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDMwNzM4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMSBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZW1vdmUgV2Vi
Q29yZUZyYW1lQnJpZGdlIHdpbmRvdyBtZXRob2QKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lQnJpZGdlLm1tOiBSZW1vdmVkIHdpbmRvdyBtZXRob2QuCisKIDIwMDgtMDMtMDMg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0uCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0J
KHJldmlzaW9uIDMwNzMxKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJy
aWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYzLDEyICsyNjMsNiBAQCBOU1N0cmluZyAqV2Vi
UGx1Z2luQ29udGFpbmVyS2V5ID0gICBAIldlCiAgICAgW3dlYlZpZXcgX3BvcFBlcmZvcm1pbmdQ
cm9ncmFtbWF0aWNGb2N1c107CiB9CiAKLS0gKE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgQVNT
RVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIHJldHVybiBbW19mcmFtZSBmcmFtZVZpZXddIHdpbmRv
d107Ci19Ci0KIC0gKHZvaWQpcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0
ZW5lcjooaWQ8V2ViQ29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lcgog
ewogICAgIFdlYlZpZXcgKnd2ID0gW3NlbGYgd2ViVmlld107Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19520</attachid>
            <date>2008-03-04 04:33:42 -0800</date>
            <delta_ts>2008-03-04 07:22:30 -0800</delta_ts>
            <desc>patch for just installInFrame method</desc>
            <filename>InstallInFrameBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>12365</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIFdlYkNvcmVGcmFtZUJyaWRnZSBpbnN0YWxsSW5GcmFtZTogbWV0aG9kCisKKyAgICAgICAg
KiBXZWJDb3JlLmJhc2UuZXhwOiBFeHBvcnQgYSBmZXcgc3ltYm9scy4KKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEV4cG9ydCBhIGZldyBmaWxlcy4KKyAgICAg
ICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlIGluc3RhbGxJbkZyYW1l
Oi4KKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06IERpdHRvLgorCiAy
MDA4LTAzLTA0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBTdWdnZXN0ZWQgYnkgRGFyaW4sIHJ1YmJlci1zdGFtcGVkIGJ5IE1hcmsuCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUwLDMgKzc1MCw1IEBAIF93a1NldFVwRm9udENhY2hlCiBfd2tTaWduYWxD
RlJlYWRTdHJlYW1FbmQKIF93a1NpZ25hbENGUmVhZFN0cmVhbUVycm9yCiBfd2tTaWduYWxDRlJl
YWRTdHJlYW1IYXNCeXRlcworX19aTjdXZWJDb3JlOUZyYW1lVmlldzE0aW5pdFNjcm9sbGJhcnNF
dgorX19aTjdXZWJDb3JlNUZyYW1lMTNvd25lclJlbmRlcmVyRXYKSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTAzLDEwICsyMTAzLDEwIEBACiAJCUE4NzFERUQ0MEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJG
cmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODcxREVDQzBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyRnJhbWUuY3BwICovOyB9OwogCQlBODcx
REVENTBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyUGFydE9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURFQ0QwQTE1MzBDNzAwQjEyQTY4
IC8qIFJlbmRlclBhcnRPYmplY3QuaCAqLzsgfTsKIAkJQTg3MURFRDYwQTE1MzBDNzAwQjEyQTY4
IC8qIFJlbmRlclBhcnRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTg3MURFQ0UwQTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnRPYmpl
Y3QuY3BwICovOyB9OwotCQlBODcxREVENzBBMTUzMEM3MDBCMTJBNjggLyogUmVuZGVyUGFydC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURFQ0Yw
QTE1MzBDNzAwQjEyQTY4IC8qIFJlbmRlclBhcnQuaCAqLzsgfTsKKwkJQTg3MURFRDcwQTE1MzBD
NzAwQjEyQTY4IC8qIFJlbmRlclBhcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NzFERUNGMEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJQYXJ0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg3MURG
RTIwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkRFMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJSZXBsYWNlZC5jcHAgKi87IH07CiAJCUE4NzFERkUzMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJSZXBsYWNlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg3MURGREYwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJlcGxhY2VkLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTg3MURGRTQw
QTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlcldpZGdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MURGRTAwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRl
cldpZGdldC5oICovOyB9OworCQlBODcxREZFNDBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lk
Z2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODcx
REZFMDBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg3MURGRTUwQTE1Mzc2QjAwQjEyQTY4
IC8qIFJlbmRlcldpZGdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODcxREZFMTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAq
LzsgfTsKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdB
MkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODhE
RDQ4NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4NjBCNDYyOUEzMDBDMDI5
OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi87IH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2Vi
Q29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw2IEBAIGVu
dW0gV2ViU2Nyb2xsR3JhbnVsYXJpdHkgewogCiAtIChOU1VSTCAqKWJhc2VVUkw7CiAKLS0gKHZv
aWQpaW5zdGFsbEluRnJhbWU6KE5TVmlldyAqKXZpZXc7Ci0KIC0gKEJPT0wpc2Nyb2xsT3ZlcmZs
b3dJbkRpcmVjdGlvbjooV2ViU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eToo
V2ViU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAKIC0gKHZvaWQpY3JlYXRlRnJhbWVW
aWV3V2l0aE5TVmlldzooTlNWaWV3ICopdmlldyBtYXJnaW5XaWR0aDooaW50KW13IG1hcmdpbkhl
aWdodDooaW50KW1oOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0J
KHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMCwyMiArNTEwLDYgQEAgc3RhdGljIGlubGluZSBXZWJD
b3JlRnJhbWVCcmlkZ2UgKmJyaWRnZQogICAgIHJldHVybiBbc2VsZiBjb3B5UmVuZGVyTm9kZTpy
ZW5kZXJlciBjb3BpZXI6Y29waWVyXTsKIH0KIAotLSAodm9pZClpbnN0YWxsSW5GcmFtZTooTlNW
aWV3ICopdmlldwotewotICAgIC8vIElmIHRoaXMgaXNuJ3QgdGhlIG1haW4gZnJhbWUsIGl0IG11
c3QgaGF2ZSBhIHJlbmRlciBtX2ZyYW1lIHNldCwgb3IgaXQKLSAgICAvLyB3b24ndCBldmVyIGdl
dCBpbnN0YWxsZWQgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgIEFTU0VSVChtX2ZyYW1lID09
IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkgfHwgbV9mcmFtZS0+b3duZXJFbGVtZW50KCkp
OwotCi0gICAgbV9mcmFtZS0+dmlldygpLT5zZXRWaWV3KHZpZXcpOwotICAgIC8vIEZJWE1FOiBm
cmFtZSB0cmllcyB0byBkbyB0aGlzIHRvbywgaXMgaXQgbmVlZGVkPwotICAgIGlmIChtX2ZyYW1l
LT5vd25lclJlbmRlcmVyKCkpIHsKLSAgICAgICAgbV9mcmFtZS0+b3duZXJSZW5kZXJlcigpLT5z
ZXRXaWRnZXQobV9mcmFtZS0+dmlldygpKTsKLSAgICAgICAgLy8gTm93IHRoZSByZW5kZXIgcGFy
dCBvd25zIHRoZSB2aWV3LCBzbyB3ZSBkb24ndCBhbnkgbW9yZS4KLSAgICB9Ci0KLSAgICBtX2Zy
YW1lLT52aWV3KCktPmluaXRTY3JvbGxiYXJzKCk7Ci19Ci0KIHN0YXRpYyBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50KiBlbGVtZW50KQogewog
ICAgIE5vZGUqIG5vZGUgPSBbZWxlbWVudCBfbm9kZV07CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzA3Mzgp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBA
CisyMDA4LTAzLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHJlbW92ZSBXZWJDb3JlRnJh
bWVCcmlkZ2UgaW5zdGFsbEluRnJhbWU6IG1ldGhvZAorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IENhbGwKKyAgICAgICAgLVtXZWJG
cmFtZVZpZXcgX2luc3RhbGxdIGluc3RlYWQgb2YgLVtXZWJDb3JlRnJhbWVCcmlkZ2UgaW5zdGFs
bEluRnJhbWU6XS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbToKKyAgICAgICAg
KC1bV2ViRnJhbWVWaWV3IF9pbnN0YWxsXSk6IEFkZGVkLiBIYXMgY29kZSBmcm9tIC1bV2ViQ29y
ZUZyYW1lQnJpZGdlIGluc3RhbGxJbkZyYW1lOl0uCisgICAgICAgICgtW1dlYkZyYW1lVmlldyBf
c2V0Q3VzdG9tU2Nyb2xsVmlld0NsYXNzOl0pOiBVc2VkIGVhcmx5IHJldHVybiBpZGlvbSBzbyB0
aGUgZW50aXJlCisgICAgICAgIG1ldGhvZCBpc24ndCBuZXN0ZWQgaW5zaWRlIGFuIGlmIHN0YXRl
bWVudC4gQ2FsbAorICAgICAgICAtW1dlYkZyYW1lVmlldyBfaW5zdGFsbF0gaW5zdGVhZCBvZiAt
W1dlYkNvcmVGcmFtZUJyaWRnZSBpbnN0YWxsSW5GcmFtZTpdLgorICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWVWaWV3SW50ZXJuYWwuaDogQWRkZWQgZGVjbGFyYXRpb24gb2YgX2luc3RhbGwgbWV0
aG9kIHNvIGl0IGNhbiBiZQorICAgICAgICB1c2VkIGluIFdlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
LgorCiAyMDA4LTAzLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDczMSkKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEwMDYsMTIgKzEwMDYsMTAgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNp
dGlvblRvQwogICAgIGlmICghZG9jdW1lbnRWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBX
ZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gbV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZTsKLQog
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzYXZlIHdvcmsgYW5kIG5vdCBkbyB0aGlzIGZvciBhIHRv
cC1sZXZlbCB2aWV3IHRoYXQgaXMgbm90IGEgV2ViSFRNTFZpZXcuCi0gICAgW2JyaWRnZSBjcmVh
dGVGcmFtZVZpZXdXaXRoTlNWaWV3OmRvY3VtZW50VmlldyBtYXJnaW5XaWR0aDpbdiBfbWFyZ2lu
V2lkdGhdIG1hcmdpbkhlaWdodDpbdiBfbWFyZ2luSGVpZ2h0XV07CisgICAgW21fd2ViRnJhbWUt
Pl9wcml2YXRlLT5icmlkZ2UgY3JlYXRlRnJhbWVWaWV3V2l0aE5TVmlldzpkb2N1bWVudFZpZXcg
bWFyZ2luV2lkdGg6W3YgX21hcmdpbldpZHRoXSBtYXJnaW5IZWlnaHQ6W3YgX21hcmdpbkhlaWdo
dF1dOwogICAgIFttX3dlYkZyYW1lLmdldCgpIF91cGRhdGVCYWNrZ3JvdW5kXTsKLSAgICBbYnJp
ZGdlIGluc3RhbGxJbkZyYW1lOlt2IF9zY3JvbGxWaWV3XV07CisgICAgW3YgX2luc3RhbGxdOwog
CiAgICAgLy8gQ2FsbCBzZXREYXRhU291cmNlIG9uIHRoZSBkb2N1bWVudCB2aWV3IGFmdGVyIGl0
IGhhcyBiZWVuIHBsYWNlZCBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCiAgICAgLy8gVGhpcyB3aGF0
IHdlIGZvciB0aGUgdG9wLWxldmVsIHZpZXcsIHNvIHNob3VsZCBkbyB0aGlzIGZvciB2aWV3cyBp
biBzdWJmcmFtZXMgYXMgd2VsbC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQko
cmV2aXNpb24gMzA3MzEpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDYgKzYxLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJ
dGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
UGFydC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UaHJlYWRDaGVjay5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CkBA
IC0yODUsNiArMjg2LDMzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhO
U00KICAgICByZXR1cm4gW1dlYlZpZXcgX3ZpZXdDbGFzczomdmlld0NsYXNzIGFuZFJlcHJlc2Vu
dGF0aW9uQ2xhc3M6bmlsIGZvck1JTUVUeXBlOk1JTUVUeXBlXSA/IHZpZXdDbGFzcyA6IG5pbDsK
IH0KIAorLSAodm9pZClfaW5zdGFsbAoreworICAgIEFTU0VSVChfcHJpdmF0ZS0+d2ViRnJhbWUp
OworICAgIEFTU0VSVChfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3KTsKKworICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoX3ByaXZhdGUtPndlYkZyYW1lKTsKKworICAgIEFTU0VSVChmcmFtZSk7Cisg
ICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOworCisgICAgLy8gSWYgdGhpcyBpc24ndCB0aGUgbWFp
biBmcmFtZSwgaXQgbXVzdCBoYXZlIGFuIG93bmVyIGVsZW1lbnQgc2V0LCBvciBpdAorICAgIC8v
IHdvbid0IGV2ZXIgZ2V0IGluc3RhbGxlZCBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCisgICAgQVNT
RVJUKGZyYW1lID09IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpIHx8IGZyYW1lLT5vd25lckVs
ZW1lbnQoKSk7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworCisgICAg
dmlldy0+c2V0VmlldyhfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3KTsKKworICAgIC8vIEZJWE1F
OiBGcmFtZSB0cmllcyB0byBkbyB0aGlzIHRvby4gSXMgdGhpcyBjb2RlIG5lZWRlZD8KKyAgICBp
ZiAoUmVuZGVyUGFydCogb3duZXIgPSBmcmFtZS0+b3duZXJSZW5kZXJlcigpKSB7CisgICAgICAg
IG93bmVyLT5zZXRXaWRnZXQodmlldyk7CisgICAgICAgIC8vIE5vdyB0aGUgcmVuZGVyIHBhcnQg
b3ducyB0aGUgdmlldywgc28gd2UgZG9uJ3QgYW55IG1vcmUuCisgICAgfQorCisgICAgdmlldy0+
aW5pdFNjcm9sbGJhcnMoKTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWVW
aWV3CkBAIC05MjgsMzMgKzk1NiwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9t
Q2xhc3MoTlNNCiAgICAgQVNTRVJUKFtjdXN0b21DbGFzcyBpc1N1YmNsYXNzT2ZDbGFzczpbV2Vi
RHluYW1pY1Njcm9sbEJhcnNWaWV3IGNsYXNzXV0pOwogICAgIGlmIChjdXN0b21DbGFzcyA9PSBb
X3ByaXZhdGUtPmZyYW1lU2Nyb2xsVmlldyBjbGFzc10pCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoW2N1c3RvbUNsYXNzIGlzU3ViY2xhc3NPZkNsYXNzOltXZWJEeW5hbWljU2Nyb2xsQmFyc1Zp
ZXcgY2xhc3NdXSkgewotICAgICAgICBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgKm9sZFNjcm9s
bFZpZXcgPSBfcHJpdmF0ZS0+ZnJhbWVTY3JvbGxWaWV3OyAvLyBhbHJlYWR5IHJldGFpbmVkCi0g
ICAgICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tzZWxmIGRv
Y3VtZW50Vmlld10gcmV0YWluXTsKLQotICAgICAgICBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcg
KnNjcm9sbFZpZXcgID0gW1tjdXN0b21DbGFzcyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbb2xkU2Ny
b2xsVmlldyBmcmFtZV1dOwotICAgICAgICBbc2Nyb2xsVmlldyBzZXRDb250ZW50VmlldzpbW1tX
ZWJDbGlwVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbc2Nyb2xsVmlldyBib3VuZHNdXSBhdXRv
cmVsZWFzZV1dOwotICAgICAgICBbc2Nyb2xsVmlldyBzZXREcmF3c0JhY2tncm91bmQ6W29sZFNj
cm9sbFZpZXcgZHJhd3NCYWNrZ3JvdW5kXV07Ci0gICAgICAgIFtzY3JvbGxWaWV3IHNldEhhc1Zl
cnRpY2FsU2Nyb2xsZXI6W29sZFNjcm9sbFZpZXcgaGFzVmVydGljYWxTY3JvbGxlcl1dOwotICAg
ICAgICBbc2Nyb2xsVmlldyBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsZXI6W29sZFNjcm9sbFZpZXcg
aGFzSG9yaXpvbnRhbFNjcm9sbGVyXV07Ci0gICAgICAgIFtzY3JvbGxWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6W29sZFNjcm9sbFZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOwotICAgICAgICBbc2Ny
b2xsVmlldyBzZXRMaW5lU2Nyb2xsOltvbGRTY3JvbGxWaWV3IGxpbmVTY3JvbGxdXTsKLSAgICAg
ICAgW3NlbGYgYWRkU3VidmlldzpzY3JvbGxWaWV3XTsKLQotICAgICAgICAvLyBkb24ndCBjYWxs
IG91ciBvdmVycmlkZGVuIHZlcnNpb24gaGVyZTsgd2UgbmVlZCB0byBtYWtlIHRoZSBzdGFuZGFy
ZCBOU1ZpZXcgbGluayBiZXR3ZWVuIHVzCi0gICAgICAgIC8vIGFuZCBvdXIgc3VidmlldyBzbyB0
aGF0IHByZXZpb3VzS2V5VmlldyBhbmQgcHJldmlvdXNWYWxpZEtleVZpZXcgd29yayBhcyBleHBl
Y3RlZC4gVGhpcyB3b3JrcwotICAgICAgICAvLyB0b2dldGhlciB3aXRoIG91ciBiZWNvbWVGaXJz
dFJlc3BvbmRlciBhbmQgc2V0TmV4dEtleVZpZXcgb3ZlcnJpZGVzLgotICAgICAgICBbc3VwZXIg
c2V0TmV4dEtleVZpZXc6c2Nyb2xsVmlld107Ci0KLSAgICAgICAgX3ByaXZhdGUtPmZyYW1lU2Ny
b2xsVmlldyA9IHNjcm9sbFZpZXc7Ci0KLSAgICAgICAgW3NlbGYgX3NldERvY3VtZW50Vmlldzpk
b2N1bWVudFZpZXddOwotICAgICAgICBbW3NlbGYgX2JyaWRnZV0gaW5zdGFsbEluRnJhbWU6c2Ny
b2xsVmlld107Ci0KLSAgICAgICAgW29sZFNjcm9sbFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0gICAgICAgIFtvbGRTY3JvbGxWaWV3IHJlbGVhc2VdOwotICAgICAgICBbZG9jdW1lbnRWaWV3
IHJlbGVhc2VdOwotICAgIH0KKyAgICBpZiAoIVtjdXN0b21DbGFzcyBpc1N1YmNsYXNzT2ZDbGFz
czpbV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAqb2xkU2Nyb2xsVmlldyA9IF9wcml2YXRlLT5m
cmFtZVNjcm9sbFZpZXc7IC8vIGFscmVhZHkgcmV0YWluZWQKKyAgICBOU1ZpZXcgPFdlYkRvY3Vt
ZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtbc2VsZiBkb2N1bWVudFZpZXddIHJldGFpbl07CisK
KyAgICBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgKnNjcm9sbFZpZXcgID0gW1tjdXN0b21DbGFz
cyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbb2xkU2Nyb2xsVmlldyBmcmFtZV1dOworICAgIFtzY3Jv
bGxWaWV3IHNldENvbnRlbnRWaWV3OltbW1dlYkNsaXBWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OltzY3JvbGxWaWV3IGJvdW5kc11dIGF1dG9yZWxlYXNlXV07CisgICAgW3Njcm9sbFZpZXcgc2V0
RHJhd3NCYWNrZ3JvdW5kOltvbGRTY3JvbGxWaWV3IGRyYXdzQmFja2dyb3VuZF1dOworICAgIFtz
Y3JvbGxWaWV3IHNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6W29sZFNjcm9sbFZpZXcgaGFzVmVydGlj
YWxTY3JvbGxlcl1dOworICAgIFtzY3JvbGxWaWV3IHNldEhhc0hvcml6b250YWxTY3JvbGxlcjpb
b2xkU2Nyb2xsVmlldyBoYXNIb3Jpem9udGFsU2Nyb2xsZXJdXTsKKyAgICBbc2Nyb2xsVmlldyBz
ZXRBdXRvcmVzaXppbmdNYXNrOltvbGRTY3JvbGxWaWV3IGF1dG9yZXNpemluZ01hc2tdXTsKKyAg
ICBbc2Nyb2xsVmlldyBzZXRMaW5lU2Nyb2xsOltvbGRTY3JvbGxWaWV3IGxpbmVTY3JvbGxdXTsK
KyAgICBbc2VsZiBhZGRTdWJ2aWV3OnNjcm9sbFZpZXddOworCisgICAgLy8gZG9uJ3QgY2FsbCBv
dXIgb3ZlcnJpZGRlbiB2ZXJzaW9uIGhlcmU7IHdlIG5lZWQgdG8gbWFrZSB0aGUgc3RhbmRhcmQg
TlNWaWV3IGxpbmsgYmV0d2VlbiB1cworICAgIC8vIGFuZCBvdXIgc3VidmlldyBzbyB0aGF0IHBy
ZXZpb3VzS2V5VmlldyBhbmQgcHJldmlvdXNWYWxpZEtleVZpZXcgd29yayBhcyBleHBlY3RlZC4g
VGhpcyB3b3JrcworICAgIC8vIHRvZ2V0aGVyIHdpdGggb3VyIGJlY29tZUZpcnN0UmVzcG9uZGVy
IGFuZCBzZXROZXh0S2V5VmlldyBvdmVycmlkZXMuCisgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3
OnNjcm9sbFZpZXddOworCisgICAgX3ByaXZhdGUtPmZyYW1lU2Nyb2xsVmlldyA9IHNjcm9sbFZp
ZXc7CisKKyAgICBbc2VsZiBfc2V0RG9jdW1lbnRWaWV3OmRvY3VtZW50Vmlld107CisgICAgW3Nl
bGYgX2luc3RhbGxdOworCisgICAgW29sZFNjcm9sbFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
CisgICAgW29sZFNjcm9sbFZpZXcgcmVsZWFzZV07CisgICAgW2RvY3VtZW50VmlldyByZWxlYXNl
XTsKIH0KIAogQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlld0ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlld0ludGVy
bmFsLmgJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmll
d0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDUgKzQ2LDYgQEAKICsgKENsYXNzKV92
aWV3Q2xhc3NGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKICsgKEJPT0wpX2NhblNo
b3dNSU1FVHlwZUFzSFRNTDooTlNTdHJpbmcgKilNSU1FVHlwZTsKIC0gKFdlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlldyAqKV9zY3JvbGxWaWV3OworLSAodm9pZClfaW5zdGFsbDsKIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19521</attachid>
            <date>2008-03-04 04:42:33 -0800</date>
            <delta_ts>2008-03-04 07:25:34 -0800</delta_ts>
            <desc>patch for scrollOverflow method</desc>
            <filename>ScrollOverflowPatch.txt</filename>
            <type>text/plain</type>
            <size>7569</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlZCBXZWJDb3JlRnJhbWVCcmlkZ2Ugc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbgorCisgICAg
ICAgICogV2ViQ29yZS5iYXNlLmV4cDogRXhwb3J0IGZ1bmN0aW9uIG5lZWRlZCBieSBXZWJLaXQu
CisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmg6IFJlbW92ZWQgV2ViU2Ny
b2xsRGlyZWN0aW9uLCBXZWJTY3JvbGxHcmFudWxhcml0eSwKKyAgICAgICAgYW5kIHNjcm9sbE92
ZXJmbG93SW5EaXJlY3Rpb24uCisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
Lm1tOiBSZW1vdmVkIG1ldGhvZC4KKwogMjAwOC0wMy0wNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3VnZ2VzdGVkIGJ5IERhcmluLCBydWJiZXItc3Rh
bXBlZCBieSBNYXJrLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzA3MzEpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCwzICs3NTAsNCBAQCBfd2tT
ZXRVcEZvbnRDYWNoZQogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJlYWRT
dHJlYW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKK19fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMTRzY3JvbGxPdmVyZmxvd0VOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Nj
cm9sbEdyYW51bGFyaXR5RQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5o
CShyZXZpc2lvbiAzMDczMSkKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDIwICs1Niw2IEBAIGVudW0gV2ViQ29yZURldmljZVR5
cGUgewogICAgIFdlYkNvcmVEZXZpY2VQcmludGVyCiB9OwogCi1lbnVtIFdlYlNjcm9sbERpcmVj
dGlvbiB7Ci0gICAgV2ViU2Nyb2xsVXAsCi0gICAgV2ViU2Nyb2xsRG93biwKLSAgICBXZWJTY3Jv
bGxMZWZ0LAotICAgIFdlYlNjcm9sbFJpZ2h0Ci19OwotCi1lbnVtIFdlYlNjcm9sbEdyYW51bGFy
aXR5IHsKLSAgICBXZWJTY3JvbGxMaW5lLAotICAgIFdlYlNjcm9sbFBhZ2UsCi0gICAgV2ViU2Ny
b2xsRG9jdW1lbnQsCi0gICAgV2ViU2Nyb2xsV2hlZWwKLX07Ci0KIEBwcm90b2NvbCBXZWJDb3Jl
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPE5TT2JqZWN0PgogLSAodm9pZCljaG9vc2VGaWxlbmFt
ZTooTlNTdHJpbmcgKilmaWxlTmFtZTsKIC0gKHZvaWQpY2FuY2VsOwpAQCAtMTA1LDggKzkxLDYg
QEAgZW51bSBXZWJTY3JvbGxHcmFudWxhcml0eSB7CiAKIC0gKHZvaWQpaW5zdGFsbEluRnJhbWU6
KE5TVmlldyAqKXZpZXc7CiAKLS0gKEJPT0wpc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjooV2Vi
U2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViU2Nyb2xsR3JhbnVsYXJp
dHkpZ3JhbnVsYXJpdHk7Ci0KIC0gKHZvaWQpY3JlYXRlRnJhbWVWaWV3V2l0aE5TVmlldzooTlNW
aWV3ICopdmlldyBtYXJnaW5XaWR0aDooaW50KW13IG1hcmdpbkhlaWdodDooaW50KW1oOwogCiAt
ICh2b2lkKXJlYXBwbHlTdHlsZXNGb3JEZXZpY2VUeXBlOihXZWJDb3JlRGV2aWNlVHlwZSlkZXZp
Y2VUeXBlOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlz
aW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI5NiwxMyArMjk2LDYgQEAgc3RhdGljIGlubGluZSBXZWJDb3JlRnJh
bWVCcmlkZ2UgKmJyaWRnZQogICAgIH0KIH0KIAotLSAoQk9PTClzY3JvbGxPdmVyZmxvd0luRGly
ZWN0aW9uOihXZWJTY3JvbGxEaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJTY3Jv
bGxHcmFudWxhcml0eSlncmFudWxhcml0eQotewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIHJldHVybiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsT3Zl
cmZsb3coKFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24sIChTY3JvbGxHcmFudWxhcml0eSlncmFu
dWxhcml0eSk7Ci19Ci0KIC0gKHZvaWQpY2xlYXJGcmFtZQogewogICAgIG1fZnJhbWUgPSAwOwpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDMwNzM4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgLSByZW1vdmVkIFdlYkNvcmVGcmFtZUJyaWRnZSBzY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9u
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWVWaWV3IF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOiBDaGFuZ2Vk
IHRvIGNhbGwKKyAgICAgICAgRXZlbnRIYW5kbGVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcg
dGhlIGJyaWRnZS4KKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IHNjcm9sbFRvQmVnaW5uaW5nT2ZE
b2N1bWVudDpdKTogVXBkYXRlZCB0byB1c2UgV2ViQ29yZSBlbnVtcyBpbnN0ZWFkCisgICAgICAg
IG9mIHRoZSBvbmVzIGZyb20gdGhlIGJyaWRnZS4KKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IHNj
cm9sbFRvRW5kT2ZEb2N1bWVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lVmlldyBf
cGFnZVZlcnRpY2FsbHk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3BhZ2VI
b3Jpem9udGFsbHk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZVZpZXcgX3Njcm9sbExp
bmVWZXJ0aWNhbGx5Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxM
aW5lSG9yaXpvbnRhbGx5Ol0pOiBEaXR0by4KKwogMjAwOC0wMy0wMyAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNpb24gMzA3MzEpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXF1ZXN0
Lmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RyYWdDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTQ4MCwxNSArNDgxLDIwIEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICByZXR1cm4gW1tzZWxm
IHdlYkZyYW1lXSBfYnJpZGdlXTsKIH0KIAotLSAoQk9PTClfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVj
dGlvbjooV2ViU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViU2Nyb2xs
R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0gKEJPT0wpX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rp
b246KFNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFNjcm9sbEdyYW51bGFy
aXR5KWdyYW51bGFyaXR5CiB7CiAgICAgLy8gc2Nyb2xsaW5nIG92ZXJmbG93cyBpcyBvbmx5IGFw
cGxpY2FibGUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIFdlYkhUTUxWaWV3Ci0gICAgcmV0dXJu
IChbW3NlbGYgZG9jdW1lbnRWaWV3XSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
ICYmIFtbc2VsZiBfYnJpZGdlXSBzY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmRpcmVjdGlvbiBn
cmFudWxhcml0eTpncmFudWxhcml0eV0pOworICAgIGlmICghW1tzZWxmIGRvY3VtZW50Vmlld10g
aXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5POwor
ICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2Nyb2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiB9CiAKIC0gKHZvaWQpc2Ny
b2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50OihpZClzZW5kZXIKIHsKLSAgICBpZiAoIVtzZWxmIF9z
Y3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOldlYlNjcm9sbFVwIGdyYW51bGFyaXR5OldlYlNjcm9s
bERvY3VtZW50XSkgeworICAgIGlmICghW3NlbGYgX3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246
U2Nyb2xsVXAgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlEb2N1bWVudF0pIHsKIAogICAgICAgICBpZiAo
IVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkgewogICAgICAgICAgICAgW1tzZWxmIF9sYXJnZXN0Q2hp
bGRXaXRoU2Nyb2xsQmFyc10gc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3VtZW50OnNlbmRlcl07CkBA
IC01MDEsNyArNTA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5T
TQogCiAtICh2b2lkKXNjcm9sbFRvRW5kT2ZEb2N1bWVudDooaWQpc2VuZGVyCiB7Ci0gICAgaWYg
KCFbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpXZWJTY3JvbGxEb3duIGdyYW51bGFy
aXR5OldlYlNjcm9sbERvY3VtZW50XSkgeworICAgIGlmICghW3NlbGYgX3Njcm9sbE92ZXJmbG93
SW5EaXJlY3Rpb246U2Nyb2xsRG93biBncmFudWxhcml0eTpTY3JvbGxCeURvY3VtZW50XSkgewog
CiAgICAgICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKSB7CiAgICAgICAgICAgICBbW3Nl
bGYgX2xhcmdlc3RDaGlsZFdpdGhTY3JvbGxCYXJzXSBzY3JvbGxUb0VuZE9mRG9jdW1lbnQ6c2Vu
ZGVyXTsKQEAgLTU1Nyw3ICs1NjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9t
Q2xhc3MoTlNNCiAKIC0gKEJPT0wpX3BhZ2VWZXJ0aWNhbGx5OihCT09MKXVwCiB7Ci0gICAgaWYg
KFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOnVwID8gV2ViU2Nyb2xsVXAgOiBXZWJT
Y3JvbGxEb3duIGdyYW51bGFyaXR5OldlYlNjcm9sbFBhZ2VdKQorICAgIGlmIChbc2VsZiBfc2Ny
b2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjp1cCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biBncmFudWxh
cml0eTpTY3JvbGxCeVBhZ2VdKQogICAgICAgICByZXR1cm4gWUVTOwogICAgIAogICAgIGlmICgh
W3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpAQCAtNTY5LDcgKzU3NSw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAogLSAoQk9PTClfcGFnZUhvcml6b250YWxseToo
Qk9PTClsZWZ0CiB7Ci0gICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxl
ZnQgPyBXZWJTY3JvbGxMZWZ0IDogV2ViU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6V2ViU2Nyb2xs
UGFnZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVyZmxvd0luRGlyZWN0aW9uOmxlZnQgPyBT
Y3JvbGxMZWZ0IDogU2Nyb2xsUmlnaHQgZ3JhbnVsYXJpdHk6U2Nyb2xsQnlQYWdlXSkKICAgICAg
ICAgcmV0dXJuIFlFUzsKIAogICAgIGlmICghW3NlbGYgX2hhc1Njcm9sbEJhcnNdKQpAQCAtNTgx
LDcgKzU4Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KIAog
LSAoQk9PTClfc2Nyb2xsTGluZVZlcnRpY2FsbHk6KEJPT0wpdXAKIHsKLSAgICBpZiAoW3NlbGYg
X3Njcm9sbE92ZXJmbG93SW5EaXJlY3Rpb246dXAgPyBXZWJTY3JvbGxVcCA6IFdlYlNjcm9sbERv
d24gZ3JhbnVsYXJpdHk6V2ViU2Nyb2xsTGluZV0pCisgICAgaWYgKFtzZWxmIF9zY3JvbGxPdmVy
Zmxvd0luRGlyZWN0aW9uOnVwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duIGdyYW51bGFyaXR5OlNj
cm9sbEJ5TGluZV0pCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9oYXNT
Y3JvbGxCYXJzXSkKQEAgLTU5Myw3ICs1OTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlw
ZXNGcm9tQ2xhc3MoTlNNCiAKIC0gKEJPT0wpX3Njcm9sbExpbmVIb3Jpem9udGFsbHk6KEJPT0wp
bGVmdAogewotICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8g
V2ViU2Nyb2xsTGVmdCA6IFdlYlNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OldlYlNjcm9sbExpbmVd
KQorICAgIGlmIChbc2VsZiBfc2Nyb2xsT3ZlcmZsb3dJbkRpcmVjdGlvbjpsZWZ0ID8gU2Nyb2xs
TGVmdCA6IFNjcm9sbFJpZ2h0IGdyYW51bGFyaXR5OlNjcm9sbEJ5TGluZV0pCiAgICAgICAgIHJl
dHVybiBZRVM7CiAKICAgICBpZiAoIVtzZWxmIF9oYXNTY3JvbGxCYXJzXSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19522</attachid>
            <date>2008-03-04 04:52:15 -0800</date>
            <delta_ts>2008-03-04 07:30:05 -0800</delta_ts>
            <desc>patch for createFrameView method</desc>
            <filename>CreateFrameViewBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>4915</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlIFdlYkNvcmVGcmFtZUJyaWRnZSBjcmVhdGVGcmFtZVZpZXdXaXRoTlNWaWV3CisKKyAg
ICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBBZGRlZCBzb21lIG1vcmUgZXhwb3J0cy4KKyAgICAg
ICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaDogRGVsZXRlZCBjcmVhdGVGcmFtZVZp
ZXdXaXRoTlNWaWV3LgorICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbTog
RGl0dG8uCisKIDIwMDgtMDMtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFN1Z2dlc3RlZCBieSBEYXJpbiwgcnViYmVyLXN0YW1wZWQgYnkgTWFyay4K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMyArNzUwLDYgQEAgX3drU2V0VXBGb250Q2FjaGUK
IF93a1NpZ25hbENGUmVhZFN0cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93
a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5dGVzCitfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRN
YXJnaW5IZWlnaHRFaQorX19aTjdXZWJDb3JlOUZyYW1lVmlld0MxRVBOU181RnJhbWVFCitfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLmgJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw2IEBA
IGVudW0gV2ViU2Nyb2xsR3JhbnVsYXJpdHkgewogCiAtIChCT09MKXNjcm9sbE92ZXJmbG93SW5E
aXJlY3Rpb246KFdlYlNjcm9sbERpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNj
cm9sbEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogCi0tICh2b2lkKWNyZWF0ZUZyYW1lVmlld1dp
dGhOU1ZpZXc6KE5TVmlldyAqKXZpZXcgbWFyZ2luV2lkdGg6KGludCltdyBtYXJnaW5IZWlnaHQ6
KGludCltaDsKLQogLSAodm9pZClyZWFwcGx5U3R5bGVzRm9yRGV2aWNlVHlwZTooV2ViQ29yZURl
dmljZVR5cGUpZGV2aWNlVHlwZTsKIC0gKHZvaWQpZm9yY2VMYXlvdXRBZGp1c3RpbmdWaWV3U2l6
ZTooQk9PTClhZGp1c3RTaXplRmxhZzsKIC0gKHZvaWQpZm9yY2VMYXlvdXRXaXRoTWluaW11bVBh
Z2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBh
Z2VXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTooQk9PTClhZGp1c3RTaXplRmxhZzsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDczMSkKKysrIFdl
YkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDgsMjMgKzMwOCw2IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UK
ICAgICBtX2ZyYW1lID0gMDsKIH0KIAotLSAodm9pZCljcmVhdGVGcmFtZVZpZXdXaXRoTlNWaWV3
OihOU1ZpZXcgKil2aWV3IG1hcmdpbldpZHRoOihpbnQpbXcgbWFyZ2luSGVpZ2h0OihpbnQpbWgK
LXsKLSAgICAvLyBJZiB3ZSBvd24gdGhlIHZpZXcsIGRlbGV0ZSB0aGUgb2xkIG9uZSAtIG90aGVy
d2lzZSB0aGUgcmVuZGVyIG1fZnJhbWUgd2lsbCB0YWtlIGNhcmUgb2YgZGVsZXRpbmcgdGhlIHZp
ZXcuCi0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7Ci0KLSAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcobV9mcmFtZSk7Ci0gICAgbV9m
cmFtZS0+c2V0VmlldyhmcmFtZVZpZXcpOwotICAgIGZyYW1lVmlldy0+ZGVyZWYoKTsKLQotICAg
IGZyYW1lVmlldy0+c2V0Vmlldyh2aWV3KTsKLSAgICBpZiAobXcgPj0gMCkKLSAgICAgICAgZnJh
bWVWaWV3LT5zZXRNYXJnaW5XaWR0aChtdyk7Ci0gICAgaWYgKG1oID49IDApCi0gICAgICAgIGZy
YW1lVmlldy0+c2V0TWFyZ2luSGVpZ2h0KG1oKTsKLX0KLQogLSAoTlNTdHJpbmcgKilfc3RyaW5n
V2l0aERvY3VtZW50VHlwZVN0cmluZ0FuZE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBT
dHJpbmcKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnRUeXBlU3RyaW5nKCkgKyBtYXJr
dXBTdHJpbmc7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMzA3MzgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA4LTAzLTA0ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIGVsaW1pbmF0ZSBXZWJDb3JlRnJhbWVCcmlkZ2UgY3JlYXRlRnJhbWVW
aWV3V2l0aE5TVmlldworCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkRm9yTmV3UGFnZSk6CisgICAgICAgIE1vdmVkIGNvZGUgaGVyZSBmcm9tIGNyZWF0ZUZy
YW1lVmlld1dpdGhOU1ZpZXcuCisKIDIwMDgtMDMtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDMw
NzMxKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZUxvYWRlclR5cGVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lVHJlZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwMDksNyArMTAxMCwy
MCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiAgICAgV2ViRnJh
bWVCcmlkZ2UgKmJyaWRnZSA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT5icmlkZ2U7CiAKICAgICAv
LyBGSVhNRTogV2UgY291bGQgc2F2ZSB3b3JrIGFuZCBub3QgZG8gdGhpcyBmb3IgYSB0b3AtbGV2
ZWwgdmlldyB0aGF0IGlzIG5vdCBhIFdlYkhUTUxWaWV3LgotICAgIFticmlkZ2UgY3JlYXRlRnJh
bWVWaWV3V2l0aE5TVmlldzpkb2N1bWVudFZpZXcgbWFyZ2luV2lkdGg6W3YgX21hcmdpbldpZHRo
XSBtYXJnaW5IZWlnaHQ6W3YgX21hcmdpbkhlaWdodF1dOworCisgICAgLy8gSWYgd2Ugb3duIHRo
ZSB2aWV3LCBkZWxldGUgdGhlIG9sZCBvbmUgLSBvdGhlcndpc2UgdGhlIHJlbmRlciBtX2ZyYW1l
IHdpbGwgdGFrZSBjYXJlIG9mIGRlbGV0aW5nIHRoZSB2aWV3LgorICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIGNvcmVGcmFtZS0+c2V0VmlldygwKTsK
KyAgICBSZWZQdHI8RnJhbWVWaWV3PiBjb3JlVmlldyA9IG5ldyBGcmFtZVZpZXcoY29yZUZyYW1l
KTsKKyAgICBjb3JlRnJhbWUtPnNldFZpZXcoY29yZVZpZXcuZ2V0KCkpOworICAgIGNvcmVWaWV3
LT5zZXRWaWV3KGRvY3VtZW50Vmlldyk7CisgICAgaW50IG1hcmdpbldpZHRoID0gW3YgX21hcmdp
bldpZHRoXTsKKyAgICBpZiAobWFyZ2luV2lkdGggPj0gMCkKKyAgICAgICAgY29yZVZpZXctPnNl
dE1hcmdpbldpZHRoKG1hcmdpbldpZHRoKTsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gW3YgX21h
cmdpbkhlaWdodF07CisgICAgaWYgKG1hcmdpbkhlaWdodCA+PSAwKQorICAgICAgICBjb3JlVmll
dy0+c2V0TWFyZ2luSGVpZ2h0KG1hcmdpbkhlaWdodCk7CisKICAgICBbbV93ZWJGcmFtZS5nZXQo
KSBfdXBkYXRlQmFja2dyb3VuZF07CiAgICAgW2JyaWRnZSBpbnN0YWxsSW5GcmFtZTpbdiBfc2Ny
b2xsVmlld11dOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19523</attachid>
            <date>2008-03-04 05:01:13 -0800</date>
            <delta_ts>2008-03-04 07:35:21 -0800</delta_ts>
            <desc>patch for reapplyStyles method</desc>
            <filename>ReapplyBridgePatch.txt</filename>
            <type>text/plain</type>
            <size>5690</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDczOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIFdlYkNvcmVGcmFtZUJyaWRnZSByZWFwcGx5U3R5bGVzIG1ldGhvZAorCisgICAgICAgICog
V2ViQ29yZS5iYXNlLmV4cDogQWRkZWQgZXhwb3J0cy4KKyAgICAgICAgKiBwYWdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCBXZWJDb3JlRGV2aWNlVHlwZSBhbmQKKyAgICAgICAg
cmVhcHBseVN0eWxlc0ZvckRldmljZVR5cGU6IG1ldGhvZC4KKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW06IERpdHRvLgorCiAyMDA4LTAzLTA0ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBTdWdnZXN0ZWQgYnkgRGFyaW4sIHJ1
YmJlci1zdGFtcGVkIGJ5IE1hcmsuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzMDczMSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNzUwLDMgKzc1MCw1
IEBAIF93a1NldFVwRm9udENhY2hlCiBfd2tTaWduYWxDRlJlYWRTdHJlYW1FbmQKIF93a1NpZ25h
bENGUmVhZFN0cmVhbUVycm9yCiBfd2tTaWduYWxDRlJlYWRTdHJlYW1IYXNCeXRlcworX19aTjdX
ZWJDb3JlOUZyYW1lVmlldzEyc2V0TWVkaWFUeXBlRVJLTlNfNlN0cmluZ0UKK19fWk43V2ViQ29y
ZTVGcmFtZTEzcmVhcHBseVN0eWxlc0V2CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1l
QnJpZGdlLmgJKHJldmlzaW9uIDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJh
bWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTEgKzUxLDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBAcHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXI7CiAKLWVudW0gV2Vi
Q29yZURldmljZVR5cGUgewotICAgIFdlYkNvcmVEZXZpY2VTY3JlZW4sCi0gICAgV2ViQ29yZURl
dmljZVByaW50ZXIKLX07Ci0KIGVudW0gV2ViU2Nyb2xsRGlyZWN0aW9uIHsKICAgICBXZWJTY3Jv
bGxVcCwKICAgICBXZWJTY3JvbGxEb3duLApAQCAtMTA5LDcgKzEwNCw2IEBAIGVudW0gV2ViU2Ny
b2xsR3JhbnVsYXJpdHkgewogCiAtICh2b2lkKWNyZWF0ZUZyYW1lVmlld1dpdGhOU1ZpZXc6KE5T
VmlldyAqKXZpZXcgbWFyZ2luV2lkdGg6KGludCltdyBtYXJnaW5IZWlnaHQ6KGludCltaDsKIAot
LSAodm9pZClyZWFwcGx5U3R5bGVzRm9yRGV2aWNlVHlwZTooV2ViQ29yZURldmljZVR5cGUpZGV2
aWNlVHlwZTsKIC0gKHZvaWQpZm9yY2VMYXlvdXRBZGp1c3RpbmdWaWV3U2l6ZTooQk9PTClhZGp1
c3RTaXplRmxhZzsKIC0gKHZvaWQpZm9yY2VMYXlvdXRXaXRoTWluaW11bVBhZ2VXaWR0aDooZmxv
YXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1
c3RpbmdWaWV3U2l6ZTooQk9PTClhZGp1c3RTaXplRmxhZzsKIC0gKHZvaWQpc2VuZFNjcm9sbEV2
ZW50OwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9u
IDMwNzMxKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM4NywxNiArMzg3LDYgQEAgc3RhdGljIGlubGluZSBXZWJDb3JlRnJhbWVC
cmlkZ2UgKmJyaWRnZQogICAgIHJldHVybiBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFy
YWN0ZXJzTm9Db3B5OmJ1ZiBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpZRVNdIGF1dG9yZWxl
YXNlXTsKIH0KIAotLSAodm9pZClyZWFwcGx5U3R5bGVzRm9yRGV2aWNlVHlwZTooV2ViQ29yZURl
dmljZVR5cGUpZGV2aWNlVHlwZQotewotICAgIGlmIChtX2ZyYW1lLT52aWV3KCkpCi0gICAgICAg
IG1fZnJhbWUtPnZpZXcoKS0+c2V0TWVkaWFUeXBlKGRldmljZVR5cGUgPT0gV2ViQ29yZURldmlj
ZVNjcmVlbiA/ICJzY3JlZW4iIDogInByaW50Iik7Ci0gICAgRG9jdW1lbnQgKmRvYyA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvYykKLSAgICAgICAgZG9jLT5zZXRQcmludGluZyhk
ZXZpY2VUeXBlID09IFdlYkNvcmVEZXZpY2VQcmludGVyKTsKLSAgICBtX2ZyYW1lLT5yZWFwcGx5
U3R5bGVzKCk7Ci19Ci0KIC0gKHZvaWQpZm9yY2VMYXlvdXRBZGp1c3RpbmdWaWV3U2l6ZTooQk9P
TClmbGFnCiB7CiAgICAgbV9mcmFtZS0+Zm9yY2VMYXlvdXQoIWZsYWcpOwpJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDMwNzM4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMiBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSByZW1vdmUg
V2ViQ29yZUZyYW1lQnJpZGdlIHJlYXBwbHlTdHlsZXMgbWV0aG9kCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyByZWFwcGx5U3R5bGVz
XSk6IE1vdmVkIGNvZGUgdG8gcmVhcHBseSBzdHlsZXMgaGVyZSBmcm9tIHRoZSBicmlkZ2UuCisK
IDIwMDgtMDMtMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lv
biAzMDczMSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjY4MSwxOCArMjY4MSwyMSBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlCiAKIC0gKHZvaWQpcmVhcHBseVN0eWxlcwogewotICAgIGlmICghX3ByaXZh
dGUtPm5lZWRzVG9BcHBseVN0eWxlcykgeworICAgIGlmICghX3ByaXZhdGUtPm5lZWRzVG9BcHBs
eVN0eWxlcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICAKLSNpZmRlZiBfS1dRX1RJTUlO
RyAgICAgICAgCisjaWZkZWYgTE9HX1RJTUVTCiAgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKIAotICAgIFtbc2VsZiBfYnJpZGdlXSByZWFwcGx5
U3R5bGVzRm9yRGV2aWNlVHlwZToKLSAgICAgICAgX3ByaXZhdGUtPnByaW50aW5nID8gV2ViQ29y
ZURldmljZVByaW50ZXIgOiBXZWJDb3JlRGV2aWNlU2NyZWVuXTsKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmlldyA9
IGNvcmVGcmFtZS0+dmlldygpKQorICAgICAgICBjb3JlVmlldy0+c2V0TWVkaWFUeXBlKF9wcml2
YXRlLT5wcmludGluZyA/ICJwcmludCIgOiAic2NyZWVuIik7CisgICAgaWYgKERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZG9jdW1lbnQtPnNldFBy
aW50aW5nKF9wcml2YXRlLT5wcmludGluZyk7CisgICAgY29yZUZyYW1lLT5yZWFwcGx5U3R5bGVz
KCk7CiAgICAgCi0jaWZkZWYgX0tXUV9USU1JTkcgICAgICAgIAorI2lmZGVmIExPR19USU1FUyAg
ICAgICAgCiAgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
LSBzdGFydDsKICAgICBMT0coVGltaW5nLCAiJXMgYXBwbHkgc3R5bGUgc2Vjb25kcyA9ICVmIiwg
W3NlbGYgVVJMXSwgdGhpc1RpbWUpOwogI2VuZGlmCkBAIC0yNzA5LDcgKzI3MTIsNyBAQCBzdGF0
aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiAgICAgaWYgKCFfcHJpdmF0ZS0+
bmVlZHNMYXlvdXQgJiYgIVtbc2VsZiBfYnJpZGdlXSBuZWVkc0xheW91dF0pCiAgICAgICAgIHJl
dHVybjsKIAotI2lmZGVmIF9LV1FfVElNSU5HICAgICAgICAKKyNpZmRlZiBMT0dfVElNRVMgICAg
ICAgIAogICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2Vu
ZGlmCiAKQEAgLTI3MjUsNyArMjcyOCw3IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGUKICAgICBpZiAoIV9wcml2YXRlLT5wcmludGluZykKICAgICAgICAgX3ByaXZh
dGUtPmxhc3RMYXlvdXRTaXplID0gWyhOU0NsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBkb2N1
bWVudFZpc2libGVSZWN0XS5zaXplOwogCi0jaWZkZWYgX0tXUV9USU1JTkcgICAgICAgIAorI2lm
ZGVmIExPR19USU1FUyAgICAgICAgCiAgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCkgLSBzdGFydDsKICAgICBMT0coVGltaW5nLCAiJXMgbGF5b3V0IHNlY29u
ZHMgPSAlZiIsIFtzZWxmIFVSTF0sIHRoaXNUaW1lKTsKICNlbmRpZgpAQCAtMjg2Nyw3ICsyODcw
LDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQogICAgIGlmIChz
dWJ2aWV3c1dlcmVTZXRBc2lkZSkKICAgICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CiAK
LSNpZmRlZiBfS1dRX1RJTUlORworI2lmZGVmIExPR19USU1FUwogICAgIGRvdWJsZSBzdGFydCA9
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCiAKQEAgLTI4OTcsNyArMjkwMCw3
IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICAgICAgW3NlbGYgZHJhd1Npbmds
ZVJlY3Q6cmVjdHNbaV1dOwogCi0jaWZkZWYgX0tXUV9USU1JTkcKKyNpZmRlZiBMT0dfVElNRVMK
ICAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0
OwogICAgIExPRyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdpZGdldC0+cGFydCgp
LT5iYXNlVVJMKCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19524</attachid>
            <date>2008-03-04 07:41:06 -0800</date>
            <delta_ts>2008-03-10 22:13:06 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>71623</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA4LTAzLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjQwCisgICAgICAgICAgZWxp
bWluYXRlIFdlYkNvcmVGcmFtZUJyaWRnZQorCisgICAgICAgIFRoaXMgcGF0Y2ggZWxpbWluYXRl
cyB0aGUgcGFydHMgb2YgdGhlIGJyaWRnZSB1c2VkIGZvciBjYWxscyAqdG8qIFdlYktpdC4KKwor
ICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6IFVwZGF0ZWQuCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBNYWtlIEZpbGVDaG9vc2VyLmggInByaXZhdGUiLCBz
byB3ZSBjYW4gdXNlCisgICAgICAgIGl0IGZyb20gV2ViS2l0LgorICAgICAgICAqIGJpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOiBFbGltaW5hdGUgdW5uZWVkZWQgYnJpZGdlLXJlbGF0
ZWQgZGVjbGFyYXRpb24uCisKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6IEFkZGVk
IG5vdy1uZWVkZWQgaW5jbHVkZSBvZiBGcmFtZS5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cGFzdGUpOiBNb3ZlZCB0aGUgTWFjLXNwZWNpZmljIHBhcnQgb2Yg
dGhpcyB0byBFZGl0b3JNYWMuCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogUmVtb3ZlZCBk
ZWZhdWx0IHZhbHVlIGZyb20gaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50LgorICAg
ICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBkZWNsYXJhdGlvbnMuIFJlbW92ZWQg
dXNlclZpc2libGVTdHJpbmcgZnVuY3Rpb24uCisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rKTogVXBkYXRlZCBmb3IgRWRp
dG9yLmggY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVZYW5rQW5kU2VsZWN0KTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpwYXN0ZSk6IEFkZGVkLiBDYWxscyBwYXN0ZTogb24gdGhlIGRvY3VtZW50
IHZpZXcgKG5vcm1hbGx5IGEKKyAgICAgICAgV2ViSFRNTFZpZXcpLiBXZSBzaG91bGQgZ2V0IHJp
ZCBvZiB0aGlzIGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnNldFNlbGVjdGVkKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGln
aHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBuZXcgY2xp
ZW50IGZ1bmN0aW9ucyB0byByZXBsYWNlIGNhbGxzIHVwIHRvIFdlYktpdAorICAgICAgICB0aGF0
IHdlcmUgZm9ybWVybHkgaGFuZGxlZCBieSB0aGUgYnJpZGdlLgorCisgICAgICAgICogcGFnZS9G
cmFtZS5oOiBSZW1vdmVkIHVubmVlZGVkIGRlY2xhcmF0aW9ucy4gUmVtb3ZlZCBmdW5jdGlvbnMK
KyAgICAgICAgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQsIHdpbGxQb3B1cE1lbnUsIGN1c3RvbUhp
Z2hsaWdoTGluZVJlY3QsIHBhaW50Q3VzdG9tSGlnaGxpZ2h0LAorICAgICAgICBhbmQgaXNzdWVQ
YXN0ZUNvbW1hbmQuIENhbGxlcnMgbm93IHVzZSB0aGUgQ2hyb21lQ2xpZW50IGRpcmVjdGx5IGlu
c3RlYWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OnVwZGF0ZURhc2hib2FyZFJlZ2lvbnMpOiBDaGFuZ2VkIHRvIGNhbGwgZGFz
aGJvYXJkUmVnaW9uc0NoYW5nZWQKKyAgICAgICAgb24gQ2hyb21lQ2xpZW50IGFuZCB0byBvbmx5
IGNhbGwgaXQgd2hlbiB0aGUgcmVnaW9ucyBhY3R1YWxseSBjaGFuZ2VkLgorCisgICAgICAgICog
cGFnZS9tYWMvQ2hyb21lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpmb2N1c05T
Vmlldyk6IENoYW5nZWQgdG8gY2FsbCBmaXJzdFJlc3BvbmRlciBhbmQgbWFrZUZpcnN0UmVzcG9u
ZGVyCisgICAgICAgIHZpYSB0aGUgY2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRnZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojp3aWxsUG9wVXBNZW51KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmphdmFBcHBsZXQpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMpOiBDaGFuZ2VkIHRvIGNhbGwga2V5Ym9hcmRVSU1v
ZGUgdmlhIHRoZQorICAgICAgICBjbGllbnQgaW5zdGVhZCBvZiB0aGUgYnJpZGdlLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6IERp
dHRvLCBidXQgZm9yIGZpcnN0UmVzcG9uZGVyCisgICAgICAgIGFuZCBtYWtlRmlyc3RSZXNwb25k
ZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJX
aWRnZXRUcmFja2luZyk6IEdldCB0aGUgd2luZG93IGJ5IGNhbGxpbmcKKyAgICAgICAgd2luZG93
IG9uIHRoZSBOU1ZpZXcgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnJpZGdlLiBUaGUgV2ViS2l0IHNp
ZGUgd2Fzbid0IGRvaW5nIGFueXRoaW5nCisgICAgICAgIHNwZWNpYWwsIHNvIGEgY2FsbCB0byAt
W05TVmlldyB3aW5kb3ddIGlzIGZpbmUuCisKKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdl
dCk6IENyZWF0ZSB0aGUgSmF2YSBhcHBsZXQgdXNpbmcgdGhlCisgICAgICAgIGNsaWVudCBpbnN0
ZWFkIG9mIHRoZSBicmlkZ2UuCisKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UuaDogUmVtb3ZlZCBhIGxvdCBvZiBkZWNsYXJhdGlvbnMgZm9yIHRoaW5ncyB0aGF0IGFyZQor
ICAgICAgICBlaXRoZXIgdW51c2VkIG9yIG5lZWRlZCBvbmx5IGZvciBjYWxscyBmcm9tIFdlYkNv
cmUgdG8gV2ViS2l0LgorICAgICAgICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToK
KyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRyYWdTb3VyY2VNb3ZlZFRvOl0pOiBHZXQg
d2luZG93IGZyb20gLVtOU1ZpZXcgd2luZG93XSBpbnN0ZWFkCisgICAgICAgIG9mIHRoZSBicmlk
Z2UuCisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBkcmFnU291cmNlRW5kZWRBdDpvcGVy
YXRpb246XSk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKTogTW92ZWQgdGhpcyBo
ZXJlLiBJdCdzIG5vIGxvbmdlciBwbGF0Zm9ybS1zcGVjaWZpYy4KKyAgICAgICAgQWxzbyBzdGFy
dCB0aGUgcmVmY291bnQgYXQgMS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjcmVh
dGUpOiBBZGRlZCBhZG9wdFJlZiBzaW5jZSB0aGUgcmVmY291bnQgbm8gc3RhcnRzIGF0IG9uZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjp+RmlsZUNob29zZXIpOiBNb3ZlZCBoZXJl
LiBObyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oOiBSZW1vdmVkIG1fY29udHJvbGxlciwgd2hpY2ggd2FzIE1hY2ludG9zaC1zcGVj
aWZpYy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6IENoYW5nZWQgY29k
ZSB0byBmaW5kIHRoZSBXZWJDb3JlIGJ1bmRsZSB0byB1c2UKKyAgICAgICAgYSB0YXNrLXNwZWNp
ZmljIGVtcHR5IFdlYkNvcmVCdW5kbGVGaW5kZXIgY2xhc3MgaW5zdGVhZCBvZiB1c2luZyBXZWJD
b3JlRnJhbWVCcmlkZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsu
Y3BwOiBSZW1vdmVkIEZpbGVDaG9vc2VyIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLAorICAg
ICAgICBzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvRmlsZUNob29zZXJRdC5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3d4
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFj
L0ZpbGVDaG9vc2VyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6Om9wZW5G
aWxlQ2hvb3Nlcik6IENhbGwgdGhlIGNocm9tZSBjbGllbnQgaW5zdGVhZCBvZiB0aGUKKyAgICAg
ICAgYnJpZGdlIHRvIHJ1biB0aGUgb3BlbiBwYW5lbC4gQWxsb3dzIHVzIHRvIGdldCByaWQgb2Yg
dGhlIFdlYkNvcmVPcGVuUGFuZWxDb250cm9sbGVyCisgICAgICAgIGNsYXNzIGFuZCBtX2NvbnRy
b2xsZXIgZGF0YSBtZW1iZXIgYW5kIG1vdmUgdGhlIGNvc250cnV0b3IvZGVzdHJ1Y3RvciB0byBw
bGF0Zm9ybS0KKyAgICAgICAgaW5kZXBlbmRlbnQgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9Qb3B1cE1lbnVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cp
OiBDYWxsIHdpbGxQb3BVcE1lbnUgb24gY2hyb21lIGNsaWVudCBpbnN0ZWFkIG9mIGZyYW1lLgor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6IENhbGwgc2V0U2VsZWN0ZWQgb24gY2hyb21lIGNsaWVu
dCBpbnN0ZWFkIG9mIGJyaWRnZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxp
Z2h0KTogQ2FsbCBjaHJvbWUgY2xpZW50IGluc3RlYWQgb2YgZnJhbWUuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50
Q3VzdG9tSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3Zl
cmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3I9PSk6
IEZpeGVkIHRvIGNoZWNrIHRoZSBjbGlwIHJlY3RhbmdsZSB0b28uCisgICAgICAgIChXZWJDb3Jl
OjpEYXNoYm9hcmRSZWdpb25WYWx1ZTo6b3BlcmF0b3IhPSk6IEFkZGVkLiBOZWVkZWQgZm9yIHRo
ZSBjb2RlIHRoYXQgY2hlY2tzCisgICAgICAgIGlmIHR3byB2ZWN0b3JzIG9mIHRoZXNlIGFyZSBp
ZGVudGljYWwgaW4gdXBkYXRlRGFzaGJvYXJkUmVnaW9ucy4KKwogMjAwOC0wMy0wNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKKyNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
SW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsNiArMzUwLDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50Ojpk
YXNoYm9hcmRSZWdpb25zQ2hhbmcKIHsKIH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OnNldFNlbGVj
dGVkKFdpZGdldCosIGJvb2wpCit7Cit9CisKK0Zsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OmN1c3Rv
bUhpZ2hsaWdodFJlY3QoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UmVj
dCYpCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit2b2lkIENocm9tZUNsaWVudDo6
cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wpCit7Cit9CisKIC8vIC0tLS0t
LS0tCiAKIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVyKFBhZ2Uq
IHBhZ2UsIGJvb2wgZGVmZXJTZWxmKQpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA3
NDYpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw2ICsxMjIsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRT
ZWxlY3RlZChXaWRnZXQqLCBib29sKTsKKworICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjdXN0
b21IaWdobGlnaHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgbGluZVJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdo
bGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgICAgICAgICAgYm9vbCBiZWhp
bmRUZXh0LCBib29sIGVudGlyZUxpbmUpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICB2
aXJ0dWFsIEtleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CisgICAgICAgIHZpcnR1YWwg
TlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBtYWtl
Rmlyc3RSZXNwb25kZXIoTlNSZXNwb25kZXIgKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW5P
cGVuUGFuZWwoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOworICAgICAgICB2aXJ0dWFsIHZvaWQg
d2lsbFBvcFVwTWVudShOU01lbnUgKik7CisgICAgICAgIHZpcnR1YWwgam9iamVjdCBqYXZhQXBw
bGV0KE5TVmlldyAqKTsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFs
IH5DaHJvbWVDbGllbnQoKSB7IH0KICAgICB9OwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDMwNzQ2KQorKysg
V2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDIwMDAtMjAwMSBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2Rl
Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMC0yMDAxIERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgogICogICAgICAgICAgICAgICAgICAgICAyMDAwIFN0ZWZhbiBTY2hpbWFu
c2tpIDwxU3RlaW5AZ214LmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI4
LDIxICsyOCwxNSBAQAogI2lmbmRlZiBGcmFtZV9oCiAjZGVmaW5lIEZyYW1lX2gKIAotI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkRyYWdJbWFn
ZS5oIgorI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogc3RydWN0IE5QT2JqZWN0OwogCiBuYW1l
c3BhY2UgS0pTIHsKIAotICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogCiAgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKQEAgLTU0LDE3ICs0OCwxMSBAQCBu
YW1lc3BhY2UgS0pTIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwotQGNs
YXNzIE5TQXJyYXk7Ci1AY2xhc3MgTlNEaWN0aW9uYXJ5OwotQGNsYXNzIE5TTWVudTsKLUBjbGFz
cyBOU011dGFibGVEaWN0aW9uYXJ5OwotQGNsYXNzIE5TU3RyaW5nOwogQGNsYXNzIFdlYkNvcmVG
cmFtZUJyaWRnZTsKIEBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiAjZWxzZQogY2xhc3MgTlNBcnJh
eTsKIGNsYXNzIE5TRGljdGlvbmFyeTsKLWNsYXNzIE5TTWVudTsKIGNsYXNzIE5TTXV0YWJsZURp
Y3Rpb25hcnk7CiBjbGFzcyBOU1N0cmluZzsKIGNsYXNzIFdlYkNvcmVGcmFtZUJyaWRnZTsKQEAg
LTc1LDQwICs2MywyMCBAQCB0eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNzIENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OwotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIERv
Y3VtZW50OwogY2xhc3MgRWRpdG9yOwotY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50SGFuZGxl
cjsKLWNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZyYW1lTG9hZGVyOwogY2xhc3MgRnJhbWVMb2Fk
ZXJDbGllbnQ7CiBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBjbGFzcyBIVE1MVGFibGVD
ZWxsRWxlbWVudDsKLWNsYXNzIEZyYW1lUHJpdmF0ZTsKIGNsYXNzIEZyYW1lVHJlZTsKLWNsYXNz
IEZyYW1lVmlldzsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBLSlNQcm94eTsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBO
b2RlOwotY2xhc3MgUGFnZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVndWxhckV4cHJlc3Npb247
CiBjbGFzcyBSZW5kZXJQYXJ0OwogY2xhc3MgU2VsZWN0aW9uOwogY2xhc3MgU2VsZWN0aW9uQ29u
dHJvbGxlcjsKLWNsYXNzIFNldHRpbmdzOwogY2xhc3MgV2lkZ2V0OwogCi1zdHJ1Y3QgRnJhbWVM
b2FkUmVxdWVzdDsKLQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCiBjbGFz
cyBGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZyYW1lPiB7CkBAIC0zNjAsMjAgKzMyOCwxMiBA
QCBwdWJsaWM6CiAKICAgICBOU011dGFibGVEaWN0aW9uYXJ5KiBkYXNoYm9hcmRSZWdpb25zRGlj
dGlvbmFyeSgpOwogCi0gICAgdm9pZCB3aWxsUG9wdXBNZW51KE5TTWVudSopOwotCiAgICAgTlNJ
bWFnZSogc2VsZWN0aW9uSW1hZ2UoYm9vbCBmb3JjZUJsYWNrVGV4dCA9IGZhbHNlKSBjb25zdDsK
ICAgICBOU0ltYWdlKiBzbmFwc2hvdERyYWdJbWFnZShOb2RlKiwgTlNSZWN0KiBpbWFnZVJlY3Qs
IE5TUmVjdCogZWxlbWVudFJlY3QpIGNvbnN0OwogCiBwcml2YXRlOiAgICAKICAgICBOU0ltYWdl
KiBpbWFnZUZyb21SZWN0KE5TUmVjdCkgY29uc3Q7CiAKLS8vID09PSB0byBiZSBtb3ZlZCBpbnRv
IENocm9tZQotCi1wdWJsaWM6Ci0gICAgRmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodExpbmVSZWN0
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgTm9k
ZSopOwotICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3Qs
IGJvb2wgdGV4dCwgYm9vbCBsaW5lLCBOb2RlKik7Ci0KIC8vID09PSB0byBiZSBtb3ZlZCBpbnRv
IEVkaXRvcgogCiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQkocmV2aXNpb24gMzA3
NDYpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw4ICsyMiw4IEBACiAjaW1wb3J0ICJDaHJvbWUu
aCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2lt
cG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCisjaW1wb3J0ICJGaWxlQ2hv
b3Nlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxLDI1ICszMSw1MCBAQCB2b2lk
IENocm9tZTo6Zm9jdXNOU1ZpZXcoTlNWaWV3KiB2aWV3KQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlID0gbV9wYWdl
LT5tYWluRnJhbWUoKS0+YnJpZGdlKCk7Ci0gICAgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVy
ID0gW2JyaWRnZSBmaXJzdFJlc3BvbmRlcl07CisgICAgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9u
ZGVyID0gY2xpZW50KCktPmZpcnN0UmVzcG9uZGVyKCk7CiAgICAgaWYgKGZpcnN0UmVzcG9uZGVy
ID09IHZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghW3ZpZXcgd2luZG93XSB8fCAh
W3ZpZXcgc3VwZXJ2aWV3XSB8fCAhW3ZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgW2JyaWRnZSBtYWtlRmlyc3RSZXNwb25kZXI6dmlld107CisgICAg
Y2xpZW50KCktPm1ha2VGaXJzdFJlc3BvbmRlcih2aWV3KTsKIAogICAgIC8vIFNldHRpbmcgZm9j
dXMgY2FuIGFjdHVhbGx5IGNhdXNlIGEgc3R5bGUgY2hhbmdlIHdoaWNoIG1pZ2h0CiAgICAgLy8g
cmVtb3ZlIHRoZSB2aWV3IGZyb20gaXRzIHN1cGVydmlldyB3aGlsZSBpdCdzIGJlaW5nIG1hZGUK
ICAgICAvLyBmaXJzdCByZXNwb25kZXIuIFRoaXMgY29uZnVzZXMgQXBwS2l0IHNvIHdlIG11c3Qg
cmVzdG9yZQogICAgIC8vIHRoZSBvbGQgZmlyc3QgcmVzcG9uZGVyLgogICAgIGlmICghW3ZpZXcg
c3VwZXJ2aWV3XSkKLSAgICAgICAgW2JyaWRnZSBtYWtlRmlyc3RSZXNwb25kZXI6Zmlyc3RSZXNw
b25kZXJdOworICAgICAgICBjbGllbnQoKS0+bWFrZUZpcnN0UmVzcG9uZGVyKGZpcnN0UmVzcG9u
ZGVyKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKK0tleWJvYXJkVUlNb2RlIENocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUo
KQoreworICAgIHJldHVybiBLZXlib2FyZEFjY2Vzc0RlZmF1bHQ7Cit9CisKK05TUmVzcG9uZGVy
ICpDaHJvbWVDbGllbnQ6OmZpcnN0UmVzcG9uZGVyKCkKK3sKKyAgICByZXR1cm4gbmlsOworfQog
Cit2b2lkIENocm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKE5TUmVzcG9uZGVyICopCit7
Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwoUGFzc1JlZlB0cjxGaWxlQ2hv
b3Nlcj4pCit7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50Ojp3aWxsUG9wVXBNZW51KE5TTWVudSAq
KQoreworfQorCitqb2JqZWN0IENocm9tZUNsaWVudDo6amF2YUFwcGxldChOU1ZpZXcgKikKK3sK
KyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIkJsb2NrRXhjZXB0aW9ucy5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1hYy5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAg
LTQxLDcgKzQyLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYkNv
cmVGcmFtZUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNSw3ICsxMDUs
MTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaQogCiBib29sIEV2
ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0
CiB7Ci0gICAgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUgPSBbbV9mcmFtZS0+YnJpZGdl
KCkga2V5Ym9hcmRVSU1vZGVdOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLZXlib2FyZFVJTW9k
ZSBrZXlib2FyZFVJTW9kZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+a2V5Ym9hcmRVSU1v
ZGUoKTsKICAgICBib29sIGhhbmRsaW5nT3B0aW9uVGFiID0gaXNLZXlib2FyZE9wdGlvblRhYihl
dmVudCk7CiAKICAgICAvLyBJZiB0YWItdG8tbGlua3MgaXMgb2ZmLCBvcHRpb24tdGFiIGFsd2F5
cyBoaWdobGlnaHRzIGFsbCBjb250cm9scwpAQCAtMjM4LDExICsyNDIsMTUgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvVwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKFttX2ZyYW1lLT5icmlkZ2UoKSBmaXJzdFJlc3BvbmRlcl0gIT0g
dmlldykgeworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPmZpcnN0UmVzcG9uZGVyKCkgIT0gdmlldykgewogICAgICAgICAvLyBOb3JtYWxseSBbTlNX
aW5kb3cgc2VuZEV2ZW50Ol0gaGFuZGxlcyBzZXR0aW5nIHRoZSBmaXJzdCByZXNwb25kZXIuCiAg
ICAgICAgIC8vIEJ1dCBpbiBvdXIgY2FzZSwgdGhlIGV2ZW50IHdhcyBzZW50IHRvIHRoZSB2aWV3
IHJlcHJlc2VudGluZyB0aGUgZW50aXJlIHdlYiBwYWdlLgogICAgICAgICBpZiAoW2N1cnJlbnRF
dmVudCgpLmdldCgpIGNsaWNrQ291bnRdIDw9IDEgJiYgW3ZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9u
ZGVyXSAmJiBbdmlldyBuZWVkc1BhbmVsVG9CZWNvbWVLZXldKQotICAgICAgICAgICAgW21fZnJh
bWUtPmJyaWRnZSgpIG1ha2VGaXJzdFJlc3BvbmRlcjp2aWV3XTsKKyAgICAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+bWFrZUZpcnN0UmVzcG9uZGVyKHZpZXcpOwogICAgIH0KIAog
ICAgIC8vIFdlIG5lZWQgdG8gImRlZmVyIGxvYWRpbmciIHdoaWxlIHRyYWNraW5nIHRoZSBtb3Vz
ZSwgYmVjYXVzZSB0ZWFyaW5nIGRvd24gdGhlCkBAIC0yNTIsOSArMjYwLDkgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvVwogICAgIC8vIG1vdXNlLiBXZSBzaG91bGQg
Y29uZmlybSB0aGF0LCBhbmQgdGhlbiByZW1vdmUgdGhlIGRlZmVycnNMb2FkaW5nCiAgICAgLy8g
aGFjayBlbnRpcmVseS4KICAgICAKLSAgICBib29sIHdhc0RlZmVycmluZ0xvYWRpbmcgPSBtX2Zy
YW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKTsKKyAgICBib29sIHdhc0RlZmVycmluZ0xvYWRp
bmcgPSBwYWdlLT5kZWZlcnNMb2FkaW5nKCk7CiAgICAgaWYgKCF3YXNEZWZlcnJpbmdMb2FkaW5n
KQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAg
ICAgIHBhZ2UtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CiAKICAgICBBU1NFUlQoIW1fc2VuZGlu
Z0V2ZW50VG9TdWJ2aWV3KTsKICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7CkBA
IC0yNjIsNyArMjcwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRv
VwogICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF3
YXNEZWZlcnJpbmdMb2FkaW5nKQotICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPnNldERlZmVyc0xv
YWRpbmcoZmFsc2UpOworICAgICAgICBwYWdlLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKIAog
ICAgIC8vIFJlbWVtYmVyIHdoaWNoIHZpZXcgd2Ugc2VudCB0aGUgZXZlbnQgdG8sIHNvIHdlIGNh
biBkaXJlY3QgdGhlIHJlbGVhc2UgZXZlbnQgcHJvcGVybHkuCiAgICAgbV9tb3VzZURvd25WaWV3
ID0gdmlldzsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJD
b3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAo
QykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAiQ1NT
SGVscGVyLmgiCiAjaW1wb3J0ICJDYWNoZS5oIgogI2ltcG9ydCAiQ2hyb21lLmgiCisjaW1wb3J0
ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNsaXBib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJD
bGlwYm9hcmRNYWMuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCkBAIC01NTcsMjEgKzU1OCw2IEBA
IE5TTXV0YWJsZURpY3Rpb25hcnkqIEZyYW1lOjpkYXNoYm9hcmRSZWcKICAgICByZXR1cm4gd2Vi
UmVnaW9uczsKIH0KIAotdm9pZCBGcmFtZTo6d2lsbFBvcHVwTWVudShOU01lbnUgKiBtZW51KQot
ewotICAgIFtkLT5tX2JyaWRnZSB3aWxsUG9wdXBNZW51Om1lbnVdOwotfQotCi1GbG9hdFJlY3Qg
RnJhbWU6OmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gW2Qt
Pm1fYnJpZGdlIGN1c3RvbUhpZ2hsaWdodFJlY3Q6dHlwZSBmb3JMaW5lOmxpbmVSZWN0IHJlcHJl
c2VudGVkTm9kZTpub2RlXTsKLX0KLQotdm9pZCBGcmFtZTo6cGFpbnRDdXN0b21IaWdobGlnaHQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgbGluZVJlY3QsIGJvb2wgdGV4dCwgYm9vbCBsaW5lLCBOb2RlKiBub2RlKQot
ewotICAgIFtkLT5tX2JyaWRnZSBwYWludEN1c3RvbUhpZ2hsaWdodDp0eXBlIGZvckJveDpib3hS
ZWN0IG9uTGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OnRleHQgZW50aXJlTGluZTpsaW5lIHJlcHJl
c2VudGVkTm9kZTpub2RlXTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JT
ZWxlY3Rpb24oKSAKIHsKICAgICBpZiAoIXNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNSYW5nZSgp
KQpAQCAtNTc5LDI1ICs1NjUsMjYgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JT
ZWxlY3RpbwogICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgpOwogfQogCi0KIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2ViQ29y
ZTo6V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgTlNWaWV3KiBhVmlldyA9IHdpZGdldC0+Z2V0Vmll
dygpOwotICAgIGlmICghYVZpZXcpCisgICAgTlNWaWV3KiB3aWRnZXRWaWV3ID0gd2lkZ2V0LT5n
ZXRWaWV3KCk7CisgICAgaWYgKCF3aWRnZXRWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHZvaWQqIG5hdGl2ZUhhbmRsZSA9IGFWaWV3OworICAgIHZvaWQqIG5hdGl2ZUhhbmRsZSA9IHdp
ZGdldFZpZXc7CiAgICAgQ3JlYXRlUm9vdE9iamVjdEZ1bmN0aW9uIGNyZWF0ZVJvb3RPYmplY3Qg
PSBSb290T2JqZWN0OjpjcmVhdGVSb290T2JqZWN0KCk7CiAgICAgUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmplY3QgPSBjcmVhdGVSb290T2JqZWN0KG5hdGl2ZUhhbmRsZSk7CiAKLSAgICBpZiAo
W2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2JqZWN0Rm9yV2ViU2NyaXB0KV0p
IHsKLSAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW2FWaWV3IG9iamVjdEZvcldlYlNj
cmlwdF07CisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
b2JqZWN0Rm9yV2ViU2NyaXB0KV0pIHsKKyAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0g
W3dpZGdldFZpZXcgb2JqZWN0Rm9yV2ViU2NyaXB0XTsKICAgICAgICAgaWYgKG9iamVjdEZvcldl
YlNjcmlwdCkKICAgICAgICAgICAgIHJldHVybiBJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxh
bmd1YWdlSW5zdGFuY2UoSW5zdGFuY2U6Ok9iamVjdGl2ZUNMYW5ndWFnZSwgb2JqZWN0Rm9yV2Vi
U2NyaXB0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIH0g
ZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2lu
U2NyaXB0YWJsZU9iamVjdCldKSB7CisgICAgfQorCisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCldKSB7
CiAjaWYgVVNFKE5QT0JKRUNUKQotICAgICAgICBOUE9iamVjdCogbnBPYmplY3QgPSBbYVZpZXcg
Y3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdF07CisgICAgICAgIE5QT2JqZWN0KiBucE9iamVj
dCA9IFt3aWRnZXRWaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdOwogICAgICAgICBp
ZiAobnBPYmplY3QpIHsKICAgICAgICAgICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3RhbmNl
OjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShJbnN0YW5jZTo6Q0xhbmd1YWdlLCBu
cE9iamVjdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwogCkBAIC02MDksMjIgKzU5NiwxNyBAQCBL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIGpvYmplY3QgYXBwbGV0OwotICAgIAorICAgIFBhZ2UqIHBhZ2UgPSB0
aGlzLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8v
IEdldCBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBKYXZhIGFwcGxldCBpbnN0YW5jZS4KLSAgICBp
ZiAoW2QtPm1fYnJpZGdlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZ2V0QXBwbGV0SW5W
aWV3OildKQotICAgICAgICBhcHBsZXQgPSBbZC0+bV9icmlkZ2UgZ2V0QXBwbGV0SW5WaWV3OmFW
aWV3XTsKLSAgICBlbHNlCi0gICAgICAgIGFwcGxldCA9IFtkLT5tX2JyaWRnZSBwb2xsRm9yQXBw
bGV0SW5WaWV3OmFWaWV3XTsKLSAgICAKLSAgICBpZiAoYXBwbGV0KSB7Ci0gICAgICAgIC8vIFdy
YXAgdGhlIEphdmEgaW5zdGFuY2UgaW4gYSBsYW5ndWFnZSBuZXV0cmFsIGJpbmRpbmcgYW5kIGhh
bmQKLSAgICAgICAgLy8gb2ZmIG93bmVyc2hpcCB0byB0aGUgQVBQTEVUIGVsZW1lbnQuCi0gICAg
ICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3Vh
Z2VJbnN0YW5jZShJbnN0YW5jZTo6SmF2YUxhbmd1YWdlLCBhcHBsZXQsIHJvb3RPYmplY3QucmVs
ZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gMDsKKyAgICBqb2JqZWN0IGFwcGxldCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+amF2
YUFwcGxldCh3aWRnZXRWaWV3KTsKKyAgICBpZiAoIWFwcGxldCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBXcmFwIHRoZSBKYXZhIGluc3RhbmNlIGluIGEgbGFuZ3VhZ2UgbmV1dHJhbCBi
aW5kaW5nIGFuZCBoYW5kIG9mZiBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICByZXR1cm4g
SW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNlKEluc3RhbmNlOjpKYXZh
TGFuZ3VhZ2UsIGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwogfQogCiBXZWJTY3JpcHRP
YmplY3QqIEZyYW1lOjp3aW5kb3dTY3JpcHRPYmplY3QoKQpJbmRleDogV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIzLDM3ICsyMywxOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KLSNpbXBvcnQgPEphdmFWTS9qbmkuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0VkaXRB
Y3Rpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHRBZmZp
bml0eS5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KIAotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxl
bWVudDsKLSAgICBjbGFzcyBQYWdlOwotICAgIGNsYXNzIFN0cmluZzsKLX0KLQogQGNsYXNzIERP
TUNTU1N0eWxlRGVjbGFyYXRpb247CiBAY2xhc3MgRE9NRG9jdW1lbnQ7CiBAY2xhc3MgRE9NRG9j
dW1lbnRGcmFnbWVudDsKIEBjbGFzcyBET01FbGVtZW50OwotQGNsYXNzIERPTUhUTUxJbnB1dEVs
ZW1lbnQ7Ci1AY2xhc3MgRE9NSFRNTFRleHRBcmVhRWxlbWVudDsKIEBjbGFzcyBET01Ob2RlOwog
QGNsYXNzIERPTVJhbmdlOwotQGNsYXNzIE5TTWVudTsKLQotQHByb3RvY29sIFdlYkNvcmVSZW5k
ZXJUcmVlQ29waWVyOwogCi1AcHJvdG9jb2wgV2ViQ29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
IDxOU09iamVjdD4KLS0gKHZvaWQpY2hvb3NlRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWU7
Ci0tICh2b2lkKWNhbmNlbDsKK0Bwcm90b2NvbCBXZWJDb3JlUmVuZGVyVHJlZUNvcGllciA8TlNP
YmplY3Q+CistIChOU09iamVjdCAqKW5vZGVXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIHBvc2l0
aW9uOihOU1BvaW50KXBvc2l0aW9uIHJlY3Q6KE5TUmVjdClyZWN0IHZpZXc6KE5TVmlldyAqKXZp
ZXcgY2hpbGRyZW46KE5TQXJyYXkgKiljaGlsZHJlbjsKIEBlbmQKIAogLy8gV2ViQ29yZUZyYW1l
QnJpZGdlIG9iamVjdHMgYXJlIHVzZWQgYnkgV2ViQ29yZSB0byBhYnN0cmFjdCBhd2F5IG9wZXJh
dGlvbnMgdGhhdCBuZWVkCkBAIC02NSw4ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gVGhlIFdlYkNvcmVGcmFtZUJyaWRnZSBpbnRlcmZhY2UgY29udGFpbnMgbWV0aG9kcyBmb3Ig
dXNlIGJ5IHRoZSBub24tV2ViQ29yZSBzaWRlIG9mIHRoZSBicmlkZ2UuCiAKLUBpbnRlcmZhY2Ug
V2ViQ29yZUZyYW1lQnJpZGdlIDogTlNPYmplY3QKLXsKK0BpbnRlcmZhY2UgV2ViQ29yZUZyYW1l
QnJpZGdlIDogTlNPYmplY3QgewogQHB1YmxpYwogICAgIFdlYkNvcmU6OkZyYW1lKiBtX2ZyYW1l
OwogICAgIEJPT0wgX3Nob3VsZENyZWF0ZVJlbmRlcmVyczsKQEAgLTE3OSw0MSArMTYwLDMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogLSAodm9pZClyZWNlaXZlZERhdGE6KE5TRGF0YSAqKWRhdGEg
dGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lOwogCiBAZW5kCi0K
LS8vIFRoZSBXZWJDb3JlRnJhbWVCcmlkZ2UgcHJvdG9jb2wgY29udGFpbnMgbWV0aG9kcyBmb3Ig
dXNlIGJ5IHRoZSBXZWJDb3JlIHNpZGUgb2YgdGhlIGJyaWRnZS4KLQotQHByb3RvY29sIFdlYkNv
cmVGcmFtZUJyaWRnZQotCi0tIChOU1Jlc3BvbmRlciAqKWZpcnN0UmVzcG9uZGVyOwotLSAodm9p
ZCltYWtlRmlyc3RSZXNwb25kZXI6KE5TUmVzcG9uZGVyICopcmVzcG9uZGVyOwotCi0tICh2b2lk
KXJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6KGlkIDxXZWJDb3Jl
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+KXJlc3VsdExpc3RlbmVyOwotCi0tIChqb2JqZWN0KWdl
dEFwcGxldEluVmlldzooTlNWaWV3ICopdmlldzsKLQotLy8gRGVwcmVjYXRlZCwgdXNlIGdldEFw
cGxldEluVmlldzogaW5zdGVhZC4KLS0gKGpvYmplY3QpcG9sbEZvckFwcGxldEluVmlldzooTlNW
aWV3ICopdmlldzsKLQotLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQgZm9y
VmlldzooTlNWaWV3ICopdmlldzsKLQotLSAodm9pZCl3aWxsUG9wdXBNZW51OihOU01lbnUgKilt
ZW51OwotCi0tIChOU1JlY3QpY3VzdG9tSGlnaGxpZ2h0UmVjdDooTlNTdHJpbmcqKXR5cGUgZm9y
TGluZTooTlNSZWN0KWxpbmVSZWN0IHJlcHJlc2VudGVkTm9kZTooV2ViQ29yZTo6Tm9kZSAqKW5v
ZGU7Ci0tICh2b2lkKXBhaW50Q3VzdG9tSGlnaGxpZ2h0OihOU1N0cmluZyopdHlwZSBmb3JCb3g6
KE5TUmVjdClib3hSZWN0IG9uTGluZTooTlNSZWN0KWxpbmVSZWN0IGJlaGluZFRleHQ6KEJPT0wp
dGV4dCBlbnRpcmVMaW5lOihCT09MKWxpbmUgcmVwcmVzZW50ZWROb2RlOihXZWJDb3JlOjpOb2Rl
ICopbm9kZTsKLQotLSAoV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUpa2V5Ym9hcmRVSU1vZGU7Ci0K
LUBlbmQKLQotLy8gVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBhbGxvd3MgdGhvc2Ugd2hvIGhv
bGQgYSBXZWJDb3JlRnJhbWVCcmlkZ2UgKiB0byBjYWxsIGFsbCB0aGUgbWV0aG9kcwotLy8gaW4g
dGhlIFdlYkNvcmVGcmFtZUJyaWRnZSBwcm90b2NvbCB3aXRob3V0IHJlcXVpcmluZyB0aGUgYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byBzdXBwbHkgdGhlIG1ldGhvZHMuCi0vLyBUaGlzIGlkaW9tIGlz
IGFwcHJvcHJpYXRlIGJlY2F1c2UgV2ViQ29yZUZyYW1lQnJpZGdlIGlzIGFuIGFic3RyYWN0IGNs
YXNzLgotCi1AaW50ZXJmYWNlIFdlYkNvcmVGcmFtZUJyaWRnZSAoU3ViY2xhc3NSZXNwb25zaWJp
bGl0eSkgPFdlYkNvcmVGcmFtZUJyaWRnZT4KLUBlbmQKLQotLy8gUHJvdG9jb2xzIHRoYXQgbWFr
ZSB1cCBwYXJ0IG9mIHRoZSBpbnRlcmZhY2VzIGFib3ZlLgotCi1AcHJvdG9jb2wgV2ViQ29yZVJl
bmRlclRyZWVDb3BpZXIgPE5TT2JqZWN0PgotLSAoTlNPYmplY3QgKilub2RlV2l0aE5hbWU6KE5T
U3RyaW5nICopbmFtZSBwb3NpdGlvbjooTlNQb2ludClwIHJlY3Q6KE5TUmVjdClyZWN0IHZpZXc6
KE5TVmlldyAqKXZpZXcgY2hpbGRyZW46KE5TQXJyYXkgKiljaGlsZHJlbjsKLUBlbmQKSW5kZXg6
IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDc0NikKKysr
IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCiAjaW1wb3J0ICJDU1NI
ZWxwZXIuaCIKICNpbXBvcnQgIkNhY2hlLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNp
bXBvcnQgIkNsaXBib2FyZE1hYy5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkRP
TUltcGxlbWVudGF0aW9uLmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkocmV2aXNp
b24gMzA3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsOSArMzMsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAoraW5saW5l
IEZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25z
dCBTdHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9maWxl
bmFtZShmaWxlbmFtZSkKKyAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKK3sKK30K
KwogUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShGaWxlQ2hvb3Nl
ckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIHJldHVybiBu
ZXcgRmlsZUNob29zZXIoY2xpZW50LCBmaWxlbmFtZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGaWxlQ2hvb3NlcihjbGllbnQsIGZpbGVuYW1lKSk7Cit9CisKK0ZpbGVDaG9vc2VyOjp+Rmls
ZUNob29zZXIoKQorewogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjbGVhcigpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRmls
ZUNob29zZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTYgKzMxLDYgQEAKICNk
ZWZpbmUgRmlsZUNob29zZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgT3BlblBhbmVsQ29udHJvbGxlcjsK
LSNlbHNlCi1jbGFzcyBPcGVuUGFuZWxDb250cm9sbGVyOwotI2VuZGlmCi0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NCw4ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJ
WE1FOiBJdCdzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIHRoYXQgd2UgcGFzcyBhIERvY3VtZW50IGlu
IGhlcmUuCiAgICAgLy8gVGhlIHBsYXRmb3JtIGRpcmVjdG9yeSBpcyB1bmRlcm5lYXRoIHRoZSBE
T00sIHNvIGl0IGNhbid0IHVzZSB0aGUgRE9NLgotICAgIC8vIEJlY2F1c2Ugb2YgVUkgZGVsZWdh
dGVzLCBpdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMgY2xhc3MgYmVsb25ncyBpbiB0aGUgcGxhdGZv
cm0KLSAgICAvLyBsYXllciBhdCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdzaWRlIHRo
ZSBDaHJvbWUgY2xhc3MgaW5zdGVhZC4KKyAgICAvLyBCZWNhdXNlIG9mIFVJIGRlbGVnYXRlcywg
aXQncyBub3QgY2xlYXIgdGhhdCB0aGUgRmlsZUNob29zZXIgY2xhc3MKKyAgICAvLyBiZWxvbmdz
IGluIHRoZSBwbGF0Zm9ybSBsYXllciBhdCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdz
aWRlCisgICAgLy8gdGhlIENocm9tZSBjbGFzcyBpbnN0ZWFkLgogICAgIHZvaWQgb3BlbkZpbGVD
aG9vc2VyKERvY3VtZW50Kik7CiAKICAgICBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlbmFtZTsgfQpAQCAtODQsMTAgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBG
aWxlQ2hvb3NlckNsaWVudCogbV9jbGllbnQ7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAgICAg
UmVmUHRyPEljb24+IG1faWNvbjsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8
T3BlblBhbmVsQ29udHJvbGxlcj4gbV9jb250cm9sbGVyOwotI2VuZGlmCiB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwCShyZXZpc2lvbiAzMDc0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVDaG9vc2VyR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTggKzU2LDYgQEAgc3RhdGljIGJvb2wgc3RyaW5nQnlBZG9wdGluZ0ZpbGVTeXN0
ZW1SZQogICAgIHJldHVybiB0cnVlOwogfQogCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmls
ZUNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJl
ZkNvdW50ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBt
X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQot
ewotfQotCi1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQogdm9pZCBGaWxlQ2hv
b3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZUNob29zZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmls
ZUNob29zZXJNYWMubW0JKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZUNob29zZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDg2ICszMCwyNiBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJGaWxlQ2hvb3Nlci5oIgogCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIK
ICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9y
dCAiRnJhbWUuaCIKICNpbXBvcnQgIkljb24uaCIKICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0
ICJTdHJpbmdUcnVuY2F0b3IuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJDb3JlT3BlblBhbmVsQ29u
dHJvbGxlciA6IE5TT2JqZWN0IDxXZWJDb3JlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IHsKLSAg
ICBGaWxlQ2hvb3NlciAqX2ZpbGVDaG9vc2VyOwotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqX2Jy
aWRnZTsKLX0KLS0gKGlkKWluaXRXaXRoRmlsZUNob29zZXI6KEZpbGVDaG9vc2VyICopZmlsZUNo
b29zZXI7Ci0tICh2b2lkKWRpc2Nvbm5lY3RGaWxlQ2hvb3NlcjsKLS0gKHZvaWQpYmVnaW5TaGVl
dFdpdGhGcmFtZTooRnJhbWUqKWZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29y
ZU9wZW5QYW5lbENvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhGaWxlQ2hvb3NlcjooRmlsZUNo
b29zZXIgKilmaWxlQ2hvb3NlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX2ZpbGVDaG9vc2VyID0gZmlsZUNo
b29zZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdEZpbGVDaG9v
c2VyCi17Ci0gICAgX2ZpbGVDaG9vc2VyID0gMDsKLX0KLQotLSAodm9pZCliZWdpblNoZWV0V2l0
aEZyYW1lOihGcmFtZSopZnJhbWUKLXsKLSAgICBpZiAoIV9maWxlQ2hvb3NlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIF9icmlkZ2UgPSBmcmFtZS0+YnJpZGdlKCk7Ci0gICAgW19icmlk
Z2UgcmV0YWluXTsKLSAgICBbX2JyaWRnZSBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJl
c3VsdExpc3RlbmVyOnNlbGZdOwotfQotCi0tICh2b2lkKWNob29zZUZpbGVuYW1lOihOU1N0cmlu
ZyAqKWZpbGVuYW1lCi17Ci0gICAgaWYgKF9maWxlQ2hvb3NlcikKLSAgICAgICAgX2ZpbGVDaG9v
c2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lKTsKLSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQot
LSAodm9pZCljYW5jZWwKLXsKLSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQotQGVuZAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNo
b29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNv
dW50ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2Zp
bGVuYW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotICAg
ICwgbV9jb250cm9sbGVyKEFkb3B0TlMsIFtbV2ViQ29yZU9wZW5QYW5lbENvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoRmlsZUNob29zZXI6dGhpc10pCi17Ci19Ci0KLUZpbGVDaG9vc2VyOjp+Rmls
ZUNob29zZXIoKQotewotICAgIFttX2NvbnRyb2xsZXIuZ2V0KCkgZGlzY29ubmVjdEZpbGVDaG9v
c2VyXTsKLX0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBk
b2N1bWVudCkKIHsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0g
ICAgICAgIFttX2NvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TaGVldFdpdGhGcmFtZTpmcmFtZV07Cisg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cnVu
T3BlblBhbmVsKHRoaXMpOwogfQogCiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lk
dGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL1BvcHVwTWVudU1hYy5tbQkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9Qb3B1cE1lbnVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMCwxNCArMjAsMTYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiUG9wdXBNZW51LmgiCiAKKyNpbXBvcnQgIkNocm9tZUNsaWVudC5oIgogI2ltcG9ydCAiRXZl
bnRIYW5kbGVyLmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiRnJhbWUu
aCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0
ICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MT3B0aW9uRWxlbWVudC5oIgog
I2ltcG9ydCAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQg
IlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE1MSw3ICsxNTMsOCBAQCB2b2lkIFBvcHVwTWVudTo6
c2hvdyhjb25zdCBJbnRSZWN0JiByLCBGCiAgICAgW3ZpZXcgYWRkU3VidmlldzpkdW1teVZpZXcu
Z2V0KCldOwogICAgIGxvY2F0aW9uID0gW2R1bW15Vmlldy5nZXQoKSBjb252ZXJ0UG9pbnQ6bG9j
YXRpb24gZnJvbVZpZXc6dmlld107CiAgICAgCi0gICAgZnJhbWUtPndpbGxQb3B1cE1lbnUobWVu
dSk7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPndpbGxQb3BVcE1lbnUobWVudSk7CiAgICAgd2tQb3B1cE1lbnUo
bWVudSwgbG9jYXRpb24sIHJvdW5kZihOU1dpZHRoKHIpKSwgZHVtbXlWaWV3LmdldCgpLCBpbmRl
eCwgZm9udCk7CiAKICAgICBbbV9wb3B1cC5nZXQoKSBkaXNtaXNzUG9wVXBdOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV2lkZ2V0LmgiCiAKICNpbXBv
cnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0
ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJGb250LmgiCkBAIC0z
NCw3ICszNSw2IEBACiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBhZ2Uu
aCIKICNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2ltcG9ydCAiV2ViQ29yZUZyYW1l
QnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJDb3Jl
Vmlldy5oIgogI2ltcG9ydCAiV2lkZ2V0Q2xpZW50LmgiCkBAIC0yMzUsMTEgKzIzNSwxNiBAQCB2
b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIH0KIAotLy8gRklYTUU6IFNob3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21l
OyBiYWQgbGF5ZXJpbmcgdGhhdCB0aGlzIGtub3dzIGFib3V0IEZyYW1lLgorLy8gRklYTUU6IFNo
b3VsZCBtb3ZlIHRoaXMgdG8gQ2hyb21lOyBiYWQgbGF5ZXJpbmcgdGhhdCB0aGlzIGtub3dzIGFi
b3V0IEZyYW1lIGFuZCBQYWdlLgogdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1Nl
bGVjdGVkKQogewotICAgIGlmIChGcmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JXaWRnZXQo
dGhpcykpCi0gICAgICAgIFtmcmFtZS0+YnJpZGdlKCkgc2V0SXNTZWxlY3RlZDppc1NlbGVjdGVk
IGZvclZpZXc6Z2V0VmlldygpXTsKKyAgICBGcmFtZSogZnJhbWUgPSBGcmFtZTo6ZnJhbWVGb3JX
aWRnZXQodGhpcyk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2V0U2VsZWN0ZWQodGhpcywgaXNTZWxlY3Rl
ZCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjphZGRUb1N1cGVydmlldyhOU1ZpZXcgKnZpZXcpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVDaG9vc2VyUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vcXQvRmlsZUNob29zZXJRdC5jcHAJKHJldmlzaW9uIDMwNzQ2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlQ2hvb3NlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTggKzMxLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlQ2hvb3Nlcjo6Rmls
ZUNob29zZXIoRmlsZUNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSkKLSAgICA6IFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGll
bnQpCi0gICAgLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24o
ZmlsZW5hbWUpKQotewotfQotCi1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQog
dm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2MpCiB7CiAgICAg
UGFnZSAqcGFnZSA9IGRvYy0+cGFnZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmls
ZUNob29zZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVD
aG9vc2VyV2luLmNwcAkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9G
aWxlQ2hvb3Nlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2Vy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBSZWZDb3VudGVk
PEZpbGVDaG9vc2VyPigwKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9maWxlbmFt
ZShmaWxlbmFtZSkKLSAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKLXsKLX0KLQot
RmlsZUNob29zZXI6On5GaWxlQ2hvb3NlcigpCi17Ci19Ci0KIHZvaWQgRmlsZUNob29zZXI6Om9w
ZW5GaWxlQ2hvb3NlcihEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gZG9jdW1lbnQtPnZpZXcoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDYgQEAg
dm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdAogdm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2
b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KIAotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVDaG9vc2VyQ2xpZW50
KiwgY29uc3QgU3RyaW5nJiBpbml0aWFsRmlsZW5hbWUpIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nl
cj4oMCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0vL1Bhc3NSZWZQdHI8RmlsZUNob29zZXI+IEZp
bGVDaG9vc2VyOjpjcmVhdGUoRmlsZUNob29zZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIGluaXRp
YWxGaWxlbmFtZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGFzc1JlZlB0cjxGaWxlQ2hv
b3Nlcj4oKTsgfQotRmlsZUNob29zZXI6On5GaWxlQ2hvb3NlcigpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29u
c3QgRm9udCYsIGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDMwNzQ2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIzLDExICsyMywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVRl
eHRCb3guaCIKIAorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtNTMwLDE0ICs1MzIsMjMgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFjawogfQogCiAjaWYgUExBVEZPUk0oTUFD
KQorCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50
IHR5LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gb2Jq
ZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgUm9vdElubGluZUJveCogciA9IHJvb3QoKTsKICAgICBGbG9h
dFJlY3Qgcm9vdFJlY3QodHggKyByLT54UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHItPndp
ZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGV4dFJlY3QodHggKyB4
UG9zKCksIHJvb3RSZWN0LnkoKSwgd2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogCi0gICAg
b2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR5cGUs
IHRleHRSZWN0LCByb290UmVjdCwgdHJ1ZSwgZmFsc2UsIG9iamVjdCgpLT5ub2RlKCkpOworICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCkt
Pm5vZGUoKSwgdHlwZSwgdGV4dFJlY3QsIHJvb3RSZWN0LCB0cnVlLCBmYWxzZSk7CiB9CisKICNl
bmRpZgogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgZGVjbykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDkgQEAKLS8qKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAg
ICAgICAgICAgKEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEyICsyNiwxNCBAQAogI2luY2x1ZGUg
IlJlbmRlckJveC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJs
ZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC03MDMsMTkgKzcwMywyOCBAQCB2
b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiB9CiAKICNpZiBQTEFURk9S
TShNQUMpCisKIHZvaWQgUmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChpbnQgdHgsIGlu
dCB0eSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpCiB7CisgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm47CisKICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVC
b3hXcmFwcGVyKCk7CiAgICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5y
b290KCkgOiAwOwogICAgIGlmIChyKSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCAr
IHItPnhQb3MoKSwgdHkgKyByLT5zZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0
aW9uSGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290
UmVjdC55KCksIHdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCByb290UmVj
dCwgYmVoaW5kVGV4dCwgZmFsc2UsIG5vZGUoKSk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJv
b3RSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRS
ZWN0IGltYWdlUmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1h
Z2VSZWN0LCBpbWFnZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlLCBub2RlKCkpOworICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KG5vZGUoKSwgdHlw
ZSwgaW1hZ2VSZWN0LCBpbWFnZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlKTsKICAgICB9CiB9CisK
ICNlbmRpZgogCiBJbnRSZWN0IFJlbmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgs
IGludCB0eSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAz
MDc0NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNSBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaHRt
bCByZW5kZXJlciBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIz
LDExICsyMSwxMyBAQAogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAogI2luY2x1ZGUgIkJp
ZGlSZXNvbHZlci5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5k
ZXJCbG9jay5oIgogCkBAIC0xMzYsMTEgKzEzNiwxOSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBh
aW50RWxsaXBzaXNCb3goUmVuCiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgUm9vdElu
bGluZUJveDo6YWRkSGlnaGxpZ2h0T3ZlcmZsb3coKQogeworICAgIEZyYW1lKiBmcmFtZSA9IG9i
amVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisg
ICAgICAgIHJldHVybjsKKwogICAgIC8vIEhpZ2hsaWdodCBhY3RzIGFzIGEgc2VsZWN0aW9uIGlu
ZmxhdGlvbi4KICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCksIHdpZHRo
KCksIHNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3Qob2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdo
dExpbmVSZWN0KG9iamVjdCgpLT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QsIG9iamVj
dCgpLT5ub2RlKCkpKTsKKyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KG9iamVjdCgp
LT5ub2RlKCksIG9iamVjdCgpLT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QpKTsKICAg
ICBzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMobWluKGxlZnRPdmVyZmxvdygpLCBpbmZs
YXRlZFJlY3QueCgpKSwgbWF4KHJpZ2h0T3ZlcmZsb3coKSwgaW5mbGF0ZWRSZWN0LnJpZ2h0KCkp
KTsKICAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKG1pbih0b3BPdmVyZmxvdygpLCBp
bmZsYXRlZFJlY3QueSgpKSwgbWF4KGJvdHRvbU92ZXJmbG93KCksIGluZmxhdGVkUmVjdC5ib3R0
b20oKSkpOwogfQpAQCAtMTUwLDEyICsxNTgsMjAgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWlu
dEN1c3RvbUhpZ2hsaWdodAogICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9v
dChwYWludEluZm8pIHx8IG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEdl
dCB0aGUgaW5mbGF0ZWQgcmVjdCBzbyB0aGF0IHdlIGNhbiBwcm9wZXJseSBoaXQgdGVzdC4KICAg
ICBGbG9hdFJlY3Qgcm9vdFJlY3QodHggKyB4UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHdp
ZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0g
b2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KGhp
Z2hsaWdodFR5cGUsIHJvb3RSZWN0LCBvYmplY3QoKS0+bm9kZSgpKTsKKyAgICBGbG9hdFJlY3Qg
aW5mbGF0ZWRSZWN0ID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRS
ZWN0KG9iamVjdCgpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKICAgICBpZiAo
aW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQotICAgICAgICBvYmplY3Qo
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQoaGlnaGxpZ2h0VHlw
ZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSwgb2JqZWN0KCktPm5vZGUoKSk7Cisg
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2Jq
ZWN0KCktPm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwg
dHJ1ZSk7CiB9CisKICNlbmRpZgogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDMwNzQ2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw4MiBAQAorMjAwOC0wMy0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY0MAorICAgICAgICAgIGVsaW1pbmF0
ZSBXZWJDb3JlRnJhbWVCcmlkZ2UKKworICAgICAgICBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgdGhl
IHBhcnRzIG9mIHRoZSBicmlkZ2UgdXNlZCBmb3IgY2FsbHMgKnRvKiBXZWJLaXQuCisgICAgICAg
IE1vdmVkIHRoZSBjb2RlIGludG8gV2ViVmlldywgV2ViRnJhbWVMb2FkZXJDbGllbnQsIGFuZCBX
ZWJDaHJvbWVDbGllbnQgZm9yCisgICAgICAgIG5vdywgYnV0IHRoZXJlIG1pZ2h0IGJlIGFuIGV2
ZW4gYmV0dGVyIGhvbWUgZm9yIHNvbWUgb2YgaXQgbG9uZyB0ZXJtLgorCisgICAgICAgICogU3Rv
cmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW06IFR3ZWFrZWQgaW5jbHVkZXMuCisgICAgICAgICog
U3RvcmFnZS9XZWJEYXRhYmFzZVRyYWNrZXJDbGllbnQubW06IERpdHRvLgorICAgICAgICAqIFN0
b3JhZ2UvV2ViU2VjdXJpdHlPcmlnaW4ubW06IERpdHRvLgorICAgICAgICAqIFN0b3JhZ2UvV2Vi
U2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oOiBEaXR0by4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOiBBZGRlZCBuZXcgdmlydHVhbCBmdW5jdGlvbnMgdGhhdCBy
ZXBsYWNlCisgICAgICAgIGJyaWRnZSBtZXRob2RzLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZGFzaGJvYXJk
UmVnaW9uc0NoYW5nZWQpOiBNb3ZlZCBjb2RlIGhlcmUgZnJvbSB0aGUgYnJpZGdlLgorICAgICAg
ICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRTZWxlY3RlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDaHJv
bWVDbGllbnQ6OmtleWJvYXJkVUlNb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OmZpcnN0UmVzcG9uZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1h
a2VGaXJzdFJlc3BvbmRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpydW5P
cGVuUGFuZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d2lsbFBvcFVwTWVu
dSk6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpqYXZhQXBwbGV0KTogRGl0dG8u
CisgICAgICAgICgtW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIGluaXRXaXRoQ2hvb3Nlcjpd
KTogQWRkZWQuIFVzZWQgdG8gd3JhcCB0aGUKKyAgICAgICAgRmlsZUNob29zZXIgc28gaXQgY2Fu
IGdldCBhIHJlc3VsdCBmcm9tIHRoZSBVSSBkZWxlZ2F0ZS4KKyAgICAgICAgKC1bV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIgZGVhbGxvY10pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIgZmluYWxpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyIGNhbmNlbF0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIgY2hvb3NlRmlsZW5hbWU6XSk6IEFkZGVkLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCBhbG1vc3QgZXZlcnl0aGlu
Zy4gV2hhdCdzIGxlZnQKKyAgICAgICAgaXMgcmVsYXRlZCB0byBjcmVhdGluZyB0aGUgYnJpZGdl
IGFuZCBjb25uZWN0ZWQgaXQgdG8gV2ViQ29yZSwgd2hpY2ggd2lsbAorICAgICAgICBnbyBsYXRl
ciB3aGVuIHdlIGVsaW1pbmF0ZSB0aGUgV2ViS2l0IHRvIFdlYkNvcmUgcGFydCBvZiB0aGUgYnJp
ZGdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tOgorICAgICAg
ICAoLVtXZWJGcmFtZUJyaWRnZSBpbml0TWFpbkZyYW1lV2l0aFBhZ2U6ZnJhbWVOYW1lOmZyYW1l
VmlldzpdKTogQ2hhbmdlZCB0bworICAgICAgICB0YWtlIGEgY29uc3QgU3RyaW5nJiBpbnN0ZWFk
IG9mIGEgTlNTdHJpbmcgKi4KKyAgICAgICAgKC1bV2ViRnJhbWVCcmlkZ2UgaW5pdFN1YmZyYW1l
V2l0aE93bmVyRWxlbWVudDpmcmFtZU5hbWU6ZnJhbWVWaWV3Ol0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRnJhbWVCcmlkZ2UgY2xvc2VdKTogTW92ZWQgdGhlIGNvZGUgdG8gdHJhY2sgdGhlIGJy
aWRnZSBjb3VudCBoZXJlCisgICAgICAgIGluc3RlYWQgb2YgdGhlIGRlYWxsb2MgYW5kIGZpbmFs
aXplIG1ldGhvZHMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0T3JpZ2luYWxVUkxGb3JE
b3dubG9hZCk6IFJlbW92ZWQgc29tZSBkZWFkIGNvZGUuCisgICAgICAgIEl0IHdhcyBjYWxsaW5n
IGEgbWV0aG9kIG9uIFdlYkhpc3RvcnlJdGVtIHRoYXQgZG9lcyBub3QgZXhpc3QuIEFkZGVkIGEg
RklYTUUuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOiBNb3Zl
ZCBjb2RlIGZyb20gdGhlIGJyaWRnZSBoZXJlLgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6Om9iamVjdENvbnRlbnRUeXBlKTogRGl0dG8uCisgICAgICAgIChwYXJhbWV0ZXJWYWx1ZSk6
IEFkZGVkLgorICAgICAgICAocGx1Z2luVmlldyk6IE1vdmVkIGNvZGUgZnJvbSB0aGUgYnJpZGdl
IGhlcmUuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKTogRGl0
dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoY29yZSk6IFJl
d3JvdGUgdGhpcyB0byB1c2UgYSBzd2l0Y2ggc28gdGhhdCB0aGUgZW51bXMgaW4gV2ViQ29yZSBh
bmQKKyAgICAgICAgV2ViS2l0IFNQSSBkb24ndCBoYXZlIHRvIG1hdGNoIGV4YWN0bHkuCisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFJlbW92ZWQgZGVjbGFyYXRpb24gb2Yg
YW4gdW51c2VkIGZ1bmN0aW9uLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbTog
TW92ZWQgV2ViSFRNTFZpZXdQcml2YXRlIGluIGhlcmUuIFRoZXJlJ3Mgbm8KKyAgICAgICAgcmVh
c29uIHRvIGhhdmUgaXQgaW4gYSBoZWFkZXIgZmlsZS4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFZpZXdJbnRlcm5hbC5oOiBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZgorICAgICAgICBXZWJI
VE1MVmlld1ByaXZhdGUgb3V0IG9mIHRoaXMgZmlsZS4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFZpZXdQcml2YXRlLmg6IFR3ZWFrZWQgZm9ybWF0dGluZyBhIGJpdCBhbmQgcmVtb3ZlZCB1
bm5lZWRlZAorICAgICAgICBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oOiBSZW1vdmVkIGNvbW1lbnQgYWJvdXQgc3RheWluZyBpbiBzeW5j
IHdpdGgKKyAgICAgICAgV2ViQ29yZTsgaXQncyBub3QgcmVhbGx5IHRoZSBraW5kIG9mIHRoaW5n
IHRoYXQgYmVsb25ncyBpbiBhbiBTUEkgaGVhZGVyLCBhbmQKKyAgICAgICAgYWxzbywgSSBmaXhl
ZCBpdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHN0YXkgaW4gc3luYy4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogQWRkZWQgY29kZSB0
byBzdG9wIG9ic2VydmluZyBVSSBtb2RlLgorICAgICAgICAoLVtXZWJWaWV3IF9yZXRyaWV2ZUtl
eWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOl0pOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisg
ICAgICAgIHRoZSBicmlkZ2UuCisgICAgICAgICgtW1dlYlZpZXcgX2tleWJvYXJkVUlNb2RlXSk6
IEFkZGVkLiBNb3ZlZCBoZXJlIGZyb20gdGhlIGJyaWRnZS4KKyAgICAgICAgKiBXZWJWaWV3L1dl
YlZpZXdJbnRlcm5hbC5oOiBBZGRlZCBfa2V5Ym9hcmRVSU1vZGUgbWV0aG9kLgorCiAyMDA4LTAz
LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMjEgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2VsZWN0ZWQoV2ViQ29yZTo6V2lkZ2V0KiwgYm9vbCk7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUq
LCBjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHR5cGUsCisgICAgICAgIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgbGluZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhp
Z2hsaWdodChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiB0eXBl
LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgbGluZVJlY3QsCisgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBl
bnRpcmVMaW5lKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5Ym9h
cmRVSU1vZGUoKTsKKyAgICB2aXJ0dWFsIE5TUmVzcG9uZGVyICpmaXJzdFJlc3BvbmRlcigpOwor
ICAgIHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoTlNSZXNwb25kZXIgKik7CisgICAg
dmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2Vy
Pik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQb3BVcE1lbnUoTlNNZW51ICopOworICAgIHZpcnR1
YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyAqKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3
ICptX3dlYlZpZXc7CiB9OwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNyBA
QAogI2ltcG9ydCAiV2ViRWxlbWVudERpY3Rpb25hcnkuaCIKICNpbXBvcnQgIldlYkZyYW1lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgotI2ltcG9ydCAiV2ViSFRNTFZpZXcu
aCIKLSNpbXBvcnQgIldlYkhUTUxWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSFRNTFZpZXdJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSmF2YVBsdWdJbi5oIgogI2ltcG9ydCAiV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJOU1VSTFJlcXVlc3RFeHRyYXMuaCIKLSNpbXBv
cnQgIldlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViUGx1Z2luLmgiCiAj
aW1wb3J0ICJXZWJTZWN1cml0eU9yaWdpbkludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJVSURlbGVn
YXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViVmll
dy5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2Nr
RXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgpAQCAtNTIsMTUgKzUyLDMxIEBACiAjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3Ry
aW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9XaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbXBv
cnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLUBpbnRlcmZhY2UgTlNWaWV3IChBcHBLaXRTZWNyZXRz
V2ViQnJpZGdlS25vd3NBYm91dCkKK0BpbnRlcmZhY2UgTlNWaWV3IChOU1ZpZXdEZXRhaWxzKQog
LSAoTlNWaWV3ICopX2ZpbmRMYXN0Vmlld0luS2V5Vmlld0xvb3A7CiBAZW5kCiAKK0BpbnRlcmZh
Y2UgTlNWaWV3IChKYXZhUGx1Z2luRGV0YWlscykKKy0gKGpvYmplY3QpcG9sbEZvckFwcGxldElu
V2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKK0BlbmQKKworLy8gRm9yIGNvbXBhdGliaWxpdHkg
d2l0aCBvbGQgU1BJLgorQGludGVyZmFjZSBOU1ZpZXcgKE9sZFdlYktpdFBsdWdJbkRldGFpbHMp
CistICh2b2lkKXNldElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZDsKK0BlbmQKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKK0BpbnRlcmZhY2UgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXIgOiBOU09iamVjdCA8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IHsKKyAgICBGaWxlQ2hv
b3NlciogX2Nob29zZXI7Cit9CistIChpZClpbml0V2l0aENob29zZXI6KFBhc3NSZWZQdHI8Rmls
ZUNob29zZXI+KWNob29zZXI7CitAZW5kCisKIFdlYkNocm9tZUNsaWVudDo6V2ViQ2hyb21lQ2xp
ZW50KFdlYlZpZXcgKndlYlZpZXcpIAogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiB7CkBAIC00
MzMsMyArNDQ5LDEyOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGFzaGJvYXJkUmVnaW9uc0No
CiAKICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRhc2hi
b2FyZFJlZ2lvbnNDaGFuZ2VkOiksIHJlZ2lvbnMpOwogfQorCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2V0U2VsZWN0ZWQoV2lkZ2V0KiB3aWRnZXQsIGJvb2wgaXNTZWxlY3RlZCkKK3sKKyAgICBO
U1ZpZXcgKnZpZXcgPSB3aWRnZXQtPmdldFZpZXcoKTsKKyAgICBpZiAoW3ZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOildKQorICAgICAgICBb
dmlldyB3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOmlzU2VsZWN0ZWRdOworICAgIGVsc2UgaWYgKFt2
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0SXNTZWxlY3RlZDopXSkKKyAgICAg
ICAgW3ZpZXcgc2V0SXNTZWxlY3RlZDppc1NlbGVjdGVkXTsKK30KKworRmxvYXRSZWN0IFdlYkNo
cm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QpCit7CisgICAgTlNWaWV3ICpk
b2N1bWVudFZpZXcgPSBbW2tpdChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dl
YkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOU1plcm9SZWN0OworCisgICAgV2Vi
SFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3OworICAg
IGlkPFdlYkhUTUxIaWdobGlnaHRlcj4gaGlnaGxpZ2h0ZXIgPSBbd2ViSFRNTFZpZXcgX2hpZ2hs
aWdodGVyRm9yVHlwZTp0eXBlXTsKKyAgICBpZiAoWyhOU09iamVjdCAqKWhpZ2hsaWdodGVyIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaGlnaGxpZ2h0UmVjdEZvckxpbmU6cmVwcmVzZW50
ZWROb2RlOildKQorICAgICAgICByZXR1cm4gW2hpZ2hsaWdodGVyIGhpZ2hsaWdodFJlY3RGb3JM
aW5lOmxpbmVSZWN0IHJlcHJlc2VudGVkTm9kZTpraXQobm9kZSldOworICAgIHJldHVybiBbaGln
aGxpZ2h0ZXIgaGlnaGxpZ2h0UmVjdEZvckxpbmU6bGluZVJlY3RdOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSogbm9kZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
bGluZVJlY3QsCisgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxpbmUpCit7CisgICAg
TlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW2tpdChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkhU
TUxWaWV3ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKKyAgICBp
ZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVyID0gW3dlYkhUTUxWaWV3IF9oaWdobGln
aHRlckZvclR5cGU6dHlwZV07CisgICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBhaW50SGlnaGxpZ2h0Rm9yQm94Om9uTGluZTpiZWhp
bmRUZXh0OmVudGlyZUxpbmU6cmVwcmVzZW50ZWROb2RlOildKQorICAgICAgICBbaGlnaGxpZ2h0
ZXIgcGFpbnRIaWdobGlnaHRGb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVoaW5kVGV4
dDpiZWhpbmRUZXh0IGVudGlyZUxpbmU6ZW50aXJlTGluZSByZXByZXNlbnRlZE5vZGU6a2l0KG5v
ZGUpXTsKKyAgICBlbHNlCisgICAgICAgIFtoaWdobGlnaHRlciBwYWludEhpZ2hsaWdodEZvckJv
eDpib3hSZWN0IG9uTGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OmJlaGluZFRleHQgZW50aXJlTGlu
ZTplbnRpcmVMaW5lXTsKK30KKworS2V5Ym9hcmRVSU1vZGUgV2ViQ2hyb21lQ2xpZW50OjprZXli
b2FyZFVJTW9kZSgpCit7CisgICAgcmV0dXJuIFttX3dlYlZpZXcgX2tleWJvYXJkVUlNb2RlXTsK
K30KKworTlNSZXNwb25kZXIgKldlYkNocm9tZUNsaWVudDo6Zmlyc3RSZXNwb25kZXIoKQorewor
ICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZpcnN0
UmVzcG9uZGVyOm1fd2ViVmlld107Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjptYWtlRmly
c3RSZXNwb25kZXIoTlNSZXNwb25kZXIgKnJlc3BvbmRlcikKK3sKKyAgICBbbV93ZWJWaWV3IF9w
dXNoUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgbWFrZUZpcnN0UmVzcG9uZGVyOnJlc3Bv
bmRlcl07CisgICAgW21fd2ViVmlldyBfcG9wUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXTsK
K30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVD
aG9vc2VyPiBjaG9vc2VyKQoreworICAgIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyICpsaXN0
ZW5lciA9IFtbV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgYWxsb2NdIGluaXRXaXRoQ2hvb3Nl
cjpjaG9vc2VyXTsKKyAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJW
aWV3OnJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6KSwgbGlzdGVu
ZXIpOworICAgIFtsaXN0ZW5lciByZWxlYXNlXTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OndpbGxQb3BVcE1lbnUoTlNNZW51ICptZW51KQoreworICAgIENhbGxVSURlbGVnYXRlKG1fd2Vi
VmlldywgQHNlbGVjdG9yKHdlYlZpZXc6d2lsbFBvcHVwTWVudTopLCBtZW51KTsKK30KKworam9i
amVjdCBXZWJDaHJvbWVDbGllbnQ6OmphdmFBcHBsZXQoTlNWaWV3ICp2aWV3KQoreworICAgIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkdldEFwcGxldCld
KQorICAgICAgICByZXR1cm4gWyhpZCl2aWV3IHdlYlBsdWdJbkdldEFwcGxldF07CisKKyAgICBp
ZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihwb2xsRm9yQXBwbGV0SW5XaW5k
b3c6KV0pIHsKKyAgICAgICAgLy8gVGhlIEphdmEgVk0gbmVlZHMgdGhlIGNvbnRhaW5pbmcgd2lu
ZG93IG9mIHRoZSB2aWV3IHRvCisgICAgICAgIC8vIGluaXRpYWxpemUuIFRoZSB2aWV3IG1heSBu
b3QgeWV0IGJlIGluIHRoZSB3aW5kb3cncyB2aWV3IAorICAgICAgICAvLyBoaWVyYXJjaHksIHNv
IHdlIGhhdmUgdG8gcGFzcyB0aGUgd2luZG93IHdoZW4gcmVxdWVzdGluZworICAgICAgICAvLyB0
aGUgYXBwbGV0LgorICAgICAgICByZXR1cm4gWyhpZCl2aWV3IHBvbGxGb3JBcHBsZXRJbldpbmRv
dzpbbV93ZWJWaWV3IHdpbmRvd11dOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitAaW1w
bGVtZW50YXRpb24gV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIKKworLSAoaWQpaW5pdFdpdGhD
aG9vc2VyOihQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiljaG9vc2VyCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2No
b29zZXIgPSBjaG9vc2VyLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgQVNTRVJUKCFfY2hvb3Nlcik7CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgQVNTRVJUKCFfY2hvb3Nlcik7Cisg
ICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLSAodm9pZCljYW5jZWwKK3sKKyAgICBBU1NFUlQo
X2Nob29zZXIpOworICAgIGlmICghX2Nob29zZXIpCisgICAgICAgIHJldHVybjsKKyAgICBfY2hv
b3Nlci0+ZGVyZWYoKTsKKyAgICBfY2hvb3NlciA9IDA7Cit9CisKKy0gKHZvaWQpY2hvb3NlRmls
ZW5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUKK3sKKyAgICBBU1NFUlQoX2Nob29zZXIpOworICAg
IGlmICghX2Nob29zZXIpCisgICAgICAgIHJldHVybjsKKyAgICBfY2hvb3Nlci0+Y2hvb3NlRmls
ZShmaWxlbmFtZSk7CisgICAgX2Nob29zZXItPmRlcmVmKCk7CisgICAgX2Nob29zZXIgPSAwOwor
fQorCitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRn
ZS5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjEgKzM2LDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIEBjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJGcmFtZVZpZXc7CiAKLUBwcm90
b2NvbCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKLQotQGludGVyZmFjZSBXZWJGcmFtZUJy
aWRnZSA6IFdlYkNvcmVGcmFtZUJyaWRnZSA8V2ViQ29yZUZyYW1lQnJpZGdlPiB7CitAaW50ZXJm
YWNlIFdlYkZyYW1lQnJpZGdlIDogV2ViQ29yZUZyYW1lQnJpZGdlIHsKIEBwdWJsaWMKICAgICBX
ZWJGcmFtZSAqX2ZyYW1lOwotCi1AcHJpdmF0ZQotICAgIFdlYkNvcmU6OktleWJvYXJkVUlNb2Rl
IF9rZXlib2FyZFVJTW9kZTsKLSAgICBCT09MIF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkOwogfQot
CiAtIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFdlYkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVO
YW1lOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcg
KilmcmFtZVZpZXc7CiAtIChpZClpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihXZWJDb3Jl
OjpIVE1MRnJhbWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldzsK
IC0gKHZvaWQpY2xvc2U7Ci0KIC0gKFdlYkZyYW1lICopd2ViRnJhbWU7Ci0KIEBlbmQKSW5kZXg6
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24g
MzA3NDYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCwxMDYgKzI4LDE5IEBACiAKICNpbXBvcnQgIldlYkZyYW1lQnJp
ZGdlLmgiCiAKLSNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgotI2ltcG9ydCAiV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2ViQmFzZVBsdWdpblBhY2thZ2UuaCIK
LSNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJ
RGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYkVkaXRpbmdEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2Vi
Rm9ybURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCi0jaW1wb3J0ICJX
ZWJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIK
LSNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIVE1MUmVwcmVz
ZW50YXRpb25Qcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCi0jaW1w
b3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRlbVBy
aXZhdGUuaCIKLSNpbXBvcnQgIldlYkphdmFQbHVnSW4uaCIKLSNpbXBvcnQgIldlYkphdmFTY3Jp
cHRUZXh0SW5wdXRQYW5lbC5oIgotI2ltcG9ydCAiV2ViS2l0RXJyb3JzUHJpdmF0ZS5oIgotI2lt
cG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIK
LSNpbXBvcnQgIldlYktpdFBsdWdpbkNvbnRhaW5lclZpZXcuaCIKICNpbXBvcnQgIldlYktpdFN0
YXRpc3RpY3NQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJLaXRTeXN0ZW1CaXRzLmgiCi0jaW1wb3J0
ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgi
Ci0jaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5ldHNjYXBl
UGx1Z2luRW1iZWRkZWRWaWV3LmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Uu
aCIKLSNpbXBvcnQgIldlYk51bGxQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJXZWJQbHVnaW4uaCIK
LSNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlBsdWdpbkRhdGFi
YXNlLmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5W
aWV3RmFjdG9yeVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgot
I2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z1Nl
cnZlclByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0
ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9u
Lmg+Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVxdWVzdC5oPgotI2ltcG9ydCA8Rm91bmRh
dGlvbi9OU1VSTFJlc3BvbnNlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL29iamVjdC5oPgotI2ltcG9ydCA8SmF2YVZNL2puaS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9DYWNoZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25F
eHRyYXMuaD4KKyNpbXBvcnQgIldlYlZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVM
b2FkZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1N1
YnJlc291cmNlTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+
Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBvcnQgPHd0Zi9SZWZQdHIu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotCi0vLyBGb3IgY29tcGF0
aWJpbGl0eSB3aXRoIG9sZCBTUEkuIAotQGludGVyZmFjZSBOU1ZpZXcgKE9sZFdlYlBsdWdpbikK
LS0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClmOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVmll
dyAoSmF2YVBsdWdpblNlY3JldHMpCi0tIChqb2JqZWN0KXBvbGxGb3JBcHBsZXRJbldpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0j
ZGVmaW5lIEtleWJvYXJkVUlNb2RlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIEAiY29tLmFwcGxlLktl
eWJvYXJkVUlNb2RlRGlkQ2hhbmdlIgotI2RlZmluZSBBcHBsZUtleWJvYXJkVUlNb2RlIENGU1RS
KCJBcHBsZUtleWJvYXJkVUlNb2RlIikKLSNkZWZpbmUgVW5pdmVyc2FsQWNjZXNzRG9tYWluIENG
U1RSKCJjb20uYXBwbGUudW5pdmVyc2FsYWNjZXNzIikKLQogQGltcGxlbWVudGF0aW9uIFdlYkZy
YW1lQnJpZGdlCiAKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSsgKHZvaWQpaW5pdGlhbGl6
ZQotewotICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7Ci19Ci0jZW5k
aWYKLQotLSAoV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIGtpdChtX2ZyYW1lLT5wYWdlKCkpOwotfQot
Ci0tICh2b2lkKWZpbmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lTmFt
ZTooY29uc3QgV2ViQ29yZTo6U3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICop
ZnJhbWVWaWV3IG93bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1l
bnQKKy0gKHZvaWQpZmluaXNoSW5pdGlhbGl6aW5nV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVO
YW1lOihjb25zdCBTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZp
ZXcgb3duZXJFbGVtZW50OihIVE1MRnJhbWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVudAogewog
ICAgICsrV2ViQnJpZGdlQ291bnQ7CiAKQEAgLTEzOSwyMjMgKzUyLDM3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIG1fZnJhbWUtPnNldEJyaWRnZShzZWxmKTsKICAgICBtX2ZyYW1l
LT50cmVlKCktPnNldE5hbWUobmFtZSk7CiAgICAgbV9mcmFtZS0+aW5pdCgpOwotICAgIAorCiAg
ICAgW3NlbGYgc2V0VGV4dFNpemVNdWx0aXBsaWVyOlt3ZWJWaWV3IHRleHRTaXplTXVsdGlwbGll
cl1dOwogfQogCi0tIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVO
YW1lOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcg
KilmcmFtZVZpZXcKKy0gKGlkKWluaXRNYWluRnJhbWVXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFt
ZU5hbWU6KGNvbnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1l
VmlldwogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgW3NlbGYgZmluaXNoSW5pdGlh
bGl6aW5nV2l0aFBhZ2U6cGFnZSBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6ZnJhbWVWaWV3IG93
bmVyRWxlbWVudDowXTsKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoaWQpaW5pdFN1YmZyYW1l
V2l0aE93bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1lbnQgZnJh
bWVOYW1lOihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZp
ZXcgKilmcmFtZVZpZXcKKy0gKGlkKWluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6KEhUTUxG
cmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50IGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJilu
YW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CiB7CiAgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKICAgICBbc2VsZiBmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTpvd25lckVs
ZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKSBmcmFtZU5hbWU6bmFtZSBmcmFtZVZp
ZXc6ZnJhbWVWaWV3IG93bmVyRWxlbWVudDpvd25lckVsZW1lbnRdOwogICAgIHJldHVybiBzZWxm
OwogfQogCi0tICh2b2lkKWZpbmkKLXsKLSAgICBpZiAoX2tleWJvYXJkVUlNb2RlQWNjZXNzZWQp
IHsKLSAgICAgICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIAotICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOktleWJvYXJkVUlNb2Rl
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAotICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXI6c2Vs
ZiBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoX2ZyYW1lID09IG5pbCk7Ci0gICAgLS1XZWJCcmlkZ2VDb3VudDsK
LX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19mcmFtZSByZWxlYXNlXTsKLSAgICAKLSAg
ICBbc2VsZiBmaW5pXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxp
emUKLXsKLSAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICBbc2VsZiBmaW5pXTsKLSAgICBb
c3VwZXIgZmluYWxpemVdOwotfQotCi0tIChXZWJQcmVmZXJlbmNlcyAqKV9wcmVmZXJlbmNlcwot
ewotICAgIHJldHVybiBbW3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNdOwotfQotCi0tICh2b2lk
KV9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgotewotICAgIENGUHJlZmVyZW5jZXNBcHBTeW5jaHJvbml6ZShVbml2ZXJz
YWxBY2Nlc3NEb21haW4pOwotCi0gICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1h
dDsKLSAgICBpbnQgbW9kZSA9IENGUHJlZmVyZW5jZXNHZXRBcHBJbnRlZ2VyVmFsdWUoQXBwbGVL
ZXlib2FyZFVJTW9kZSwgVW5pdmVyc2FsQWNjZXNzRG9tYWluLCAma2V5RXhpc3RzQW5kSGFzVmFs
aWRGb3JtYXQpOwotICAgIAotICAgIC8vIFRoZSBrZXlib2FyZCBhY2Nlc3MgbW9kZSBpcyByZXBv
cnRlZCBieSB0d28gYml0czoKLSAgICAvLyBCaXQgMCBpcyBzZXQgaWYgZmVhdHVyZSBpcyBvbgot
ICAgIC8vIEJpdCAxIGlzIHNldCBpZiBmdWxsIGtleWJvYXJkIGFjY2VzcyB3b3JrcyBmb3IgYW55
IGNvbnRyb2wsIG5vdCBqdXN0IHRleHQgYm94ZXMgYW5kIGxpc3RzCi0gICAgLy8gV2UgcmVxdWly
ZSBib3RoIGJpdHMgdG8gYmUgb24uCi0gICAgLy8gSSBkbyBub3Qga25vdyB0aGF0IHdlIHdvdWxk
IGV2ZXIgZ2V0IG9uZSBiaXQgb24gYW5kIHRoZSBvdGhlciBvZmYgc2luY2UKLSAgICAvLyBjaGVj
a2luZyB0aGUgY2hlY2tib3ggaW4gc3lzdGVtIHByZWZlcmVuY2VzIHdoaWNoIGlzIG1hcmtlZCBh
cyAiVHVybiBvbiBmdWxsIGtleWJvYXJkIGFjY2VzcyIKLSAgICAvLyB0dXJucyBvbiBib3RoIGJp
dHMuCi0gICAgX2tleWJvYXJkVUlNb2RlID0gKG1vZGUgJiAweDIpID8gS2V5Ym9hcmRBY2Nlc3NG
dWxsIDogS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OwotICAgIAotICAgIC8vIGNoZWNrIGZvciB0YWJi
aW5nIHRvIGxpbmtzCi0gICAgaWYgKFtbc2VsZiBfcHJlZmVyZW5jZXNdIHRhYnNUb0xpbmtzXSkK
LSAgICAgICAgX2tleWJvYXJkVUlNb2RlID0gKEtleWJvYXJkVUlNb2RlKShfa2V5Ym9hcmRVSU1v
ZGUgfCBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzKTsKLX0KLQotLSAoS2V5Ym9hcmRVSU1vZGUp
a2V5Ym9hcmRVSU1vZGUKLXsKLSAgICBpZiAoIV9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7Ci0g
ICAgICAgIF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkID0gWUVTOwotICAgICAgICBbc2VsZiBfcmV0
cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczpuaWxdOwotICAgICAgICAKLSAgICAg
ICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAotICAg
ICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJpZXZlS2V5
Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKLSAgICAgICAgICAgIG5hbWU6S2V5Ym9hcmRV
SU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0KLSAgICAgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKLSAgICAgICAgICAgIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZl
cmVuY2VzOikgCi0gICAgICAgICAgICAgICAgICAgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWRO
b3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQotICAgIHJldHVybiBfa2V5Ym9hcmRVSU1v
ZGU7Ci19Ci0KIC0gKFdlYkZyYW1lICopd2ViRnJhbWUKIHsKICAgICByZXR1cm4gX2ZyYW1lOwog
fQogCi0tIChXZWJDb3JlRnJhbWVCcmlkZ2UgKiltYWluRnJhbWUKLXsKLSAgICBBU1NFUlQoX2Zy
YW1lICE9IG5pbCk7Ci0gICAgcmV0dXJuIFtbW3NlbGYgd2ViVmlld10gbWFpbkZyYW1lXSBfYnJp
ZGdlXTsKLX0KLQotLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcgotewotICAgIEFTU0VS
VChfZnJhbWUgIT0gbmlsKTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgd2ViVmlld107
Ci0gICAgcmV0dXJuIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZpcnN0
UmVzcG9uZGVyOndlYlZpZXddOwotfQotCi0tICh2b2lkKW1ha2VGaXJzdFJlc3BvbmRlcjooTlNS
ZXNwb25kZXIgKil2aWV3Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICBBU1NFUlQoW3ZpZXcgaXNLaW5kT2ZD
bGFzczpbTlNWaWV3IGNsYXNzXV0pOwotICAgIEFTU0VSVChbKE5TVmlldyAqKXZpZXcgd2luZG93
XSk7Ci0gICAgQVNTRVJUKFsoTlNWaWV3ICopdmlldyB3aW5kb3ddID09IFt3ZWJWaWV3IHdpbmRv
d10pOwotICAgIFt3ZWJWaWV3IF9wdXNoUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXTsKLSAg
ICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBtYWtlRmly
c3RSZXNwb25kZXI6dmlld107Ci0gICAgW3dlYlZpZXcgX3BvcFBlcmZvcm1pbmdQcm9ncmFtbWF0
aWNGb2N1c107Ci19Ci0KLS0gKHZvaWQpcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1
bHRMaXN0ZW5lcjooaWQ8V2ViQ29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0
ZW5lcgotewotICAgIFdlYlZpZXcgKnd2ID0gW3NlbGYgd2ViVmlld107Ci0gICAgW1t3diBfVUlE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3diBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0
aFJlc3VsdExpc3RlbmVyOihpZDxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4pcmVzdWx0TGlz
dGVuZXJdOwotfQotCi0tIChXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQotewotICAgIEFTU0VS
VChfZnJhbWUgIT0gbmlsKTsKLSAgICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlID0gW19mcmFt
ZSBfZGF0YVNvdXJjZV07Ci0KLSAgICBBU1NFUlQoZGF0YVNvdXJjZSAhPSBuaWwpOwotCi0gICAg
cmV0dXJuIGRhdGFTb3VyY2U7Ci19Ci0KIC0gKHZvaWQpY2xvc2UKIHsKICAgICBbc3VwZXIgY2xv
c2VdOworICAgIGlmICghX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgLS1XZWJCcmlkZ2VD
b3VudDsKICAgICBbX2ZyYW1lIHJlbGVhc2VdOwogICAgIF9mcmFtZSA9IG5pbDsKIH0KIAotLSAo
am9iamVjdClnZXRBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXcKLXsKLSAgICBpZiAoW3ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5HZXRBcHBsZXQpXSkKLSAgICAg
ICAgcmV0dXJuIFt2aWV3IHdlYlBsdWdJbkdldEFwcGxldF07Ci0gICAgcmV0dXJuIFtzZWxmIHBv
bGxGb3JBcHBsZXRJblZpZXc6dmlld107Ci19Ci0KLS8vIE5PVEU6IHBvbGxGb3JBcHBsZXRJblZp
ZXc6IHdpbGwgYmxvY2sgdW50aWwgdGhlIGJsb2NrIGlzIHJlYWR5IHRvIHVzZSwgb3IKLS8vIHVu
dGlsIGEgdGltZW91dCBpcyBleGNlZWRlZC4gIEl0IHdpbGwgcmV0dXJuIG5pbCBpZiB0aGUgdGlt
ZW91dCBpcwotLy8gZXhjZWVkZWQuCi0vLyBEZXByZWNhdGVkLCB1c2UgZ2V0QXBwbGV0SW5WaWV3
Oi4KLS0gKGpvYmplY3QpcG9sbEZvckFwcGxldEluVmlldzooTlNWaWV3ICopdmlldwotewotICAg
IGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBvbGxGb3JBcHBsZXRJbldp
bmRvdzopXSkKLSAgICAgICAgLy8gVGhlIEphdmEgVk0gbmVlZHMgdGhlIGNvbnRhaW5pbmcgd2lu
ZG93IG9mIHRoZSB2aWV3IHRvCi0gICAgICAgIC8vIGluaXRpYWxpemUuIFRoZSB2aWV3IG1heSBu
b3QgeWV0IGJlIGluIHRoZSB3aW5kb3cncyB2aWV3IAotICAgICAgICAvLyBoaWVyYXJjaHksIHNv
IHdlIGhhdmUgdG8gcGFzcyB0aGUgd2luZG93IHdoZW4gcmVxdWVzdGluZwotICAgICAgICAvLyB0
aGUgYXBwbGV0LgotICAgICAgICByZXR1cm4gW3ZpZXcgcG9sbEZvckFwcGxldEluV2luZG93Oltb
c2VsZiB3ZWJWaWV3XSB3aW5kb3ddXTsKLSAgICByZXR1cm4gMDsKLX0KLQotLSAodm9pZClyZXNw
b25kVG9DaGFuZ2VkQ29udGVudHMKLXsKLSAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKnZp
ZXcgPSBbW19mcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgaWYgKFt2aWV3IGlz
S2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAgIFsoV2ViSFRNTFZpZXcg
Kil2aWV3IF91cGRhdGVGb250UGFuZWxdOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6W3NlbGYgd2ViVmlld11dOwotfQotCi0tIChOU1VuZG9NYW5hZ2VyICopdW5k
b01hbmFnZXIKLXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYlZpZXddIHVuZG9NYW5hZ2VyXTsKLX0K
LQotLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQgZm9yVmlldzooTlNWaWV3
ICopdmlldwotewotICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlBsdWdJblNldElzU2VsZWN0ZWQ6KV0pCi0gICAgICAgIFt2aWV3IHdlYlBsdWdJblNldElzU2Vs
ZWN0ZWQ6aXNTZWxlY3RlZF07Ci0gICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRJc1NlbGVjdGVkOildKQotICAgICAgICBbdmlldyBzZXRJc1NlbGVjdGVk
OmlzU2VsZWN0ZWRdOwotfQotCi0tICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1lbnUK
LXsKLSAgICBDYWxsVUlEZWxlZ2F0ZShbc2VsZiB3ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6
d2lsbFBvcHVwTWVudTopLCBtZW51KTsKLX0KLQotLSAoTlNSZWN0KWN1c3RvbUhpZ2hsaWdodFJl
Y3Q6KE5TU3RyaW5nKil0eXBlIGZvckxpbmU6KE5TUmVjdClsaW5lUmVjdCByZXByZXNlbnRlZE5v
ZGU6KFdlYkNvcmU6Ok5vZGUgKilub2RlCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwot
ICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tfZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZp
ZXddOwotICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKQotICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKLQotICAgIFdlYkhUTUxWaWV3ICp3
ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKLSAgICBpZDxXZWJIVE1M
SGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVyID0gW3dlYkhUTUxWaWV3IF9oaWdobGlnaHRlckZvclR5
cGU6dHlwZV07Ci0gICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGhpZ2hsaWdodFJlY3RGb3JMaW5lOnJlcHJlc2VudGVkTm9kZTopXSkK
LSAgICAgICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTpsaW5lUmVj
dCByZXByZXNlbnRlZE5vZGU6a2l0KG5vZGUpXTsKLSAgICByZXR1cm4gW2hpZ2hsaWdodGVyIGhp
Z2hsaWdodFJlY3RGb3JMaW5lOmxpbmVSZWN0XTsKLX0KLQotLSAodm9pZClwYWludEN1c3RvbUhp
Z2hsaWdodDooTlNTdHJpbmcqKXR5cGUgZm9yQm94OihOU1JlY3QpYm94UmVjdCBvbkxpbmU6KE5T
UmVjdClsaW5lUmVjdCBiZWhpbmRUZXh0OihCT09MKXRleHQgZW50aXJlTGluZTooQk9PTClsaW5l
IHJlcHJlc2VudGVkTm9kZTooV2ViQ29yZTo6Tm9kZSAqKW5vZGUKLXsKLSAgICBBU1NFUlQoX2Zy
YW1lICE9IG5pbCk7Ci0gICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW19mcmFtZSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld107Ci0gICAgaWYgKCFbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkhUTUxWaWV3
ICp3ZWJIVE1MVmlldyA9IChXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldzsKLSAgICBpZDxXZWJI
VE1MSGlnaGxpZ2h0ZXI+IGhpZ2hsaWdodGVyID0gW3dlYkhUTUxWaWV3IF9oaWdobGlnaHRlckZv
clR5cGU6dHlwZV07Ci0gICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHBhaW50SGlnaGxpZ2h0Rm9yQm94Om9uTGluZTpiZWhpbmRUZXh0
OmVudGlyZUxpbmU6cmVwcmVzZW50ZWROb2RlOildKQotICAgICAgICBbaGlnaGxpZ2h0ZXIgcGFp
bnRIaWdobGlnaHRGb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVoaW5kVGV4dDp0ZXh0
IGVudGlyZUxpbmU6bGluZSByZXByZXNlbnRlZE5vZGU6a2l0KG5vZGUpXTsKLSAgICBlbHNlCi0g
ICAgICAgIFtoaWdobGlnaHRlciBwYWludEhpZ2hsaWdodEZvckJveDpib3hSZWN0IG9uTGluZTps
aW5lUmVjdCBiZWhpbmRUZXh0OnRleHQgZW50aXJlTGluZTpsaW5lXTsKLX0KLQogQGVuZApJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MSw2ICsyNjEsMTAgQEAgbWFjcm8o
eWFua0FuZFNlbGVjdCkgXAogI2RlZmluZSBXZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2lu
S2V5IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iCiAjZGVmaW5lIFdlYktpdE9yaWdpbmFsQm90
dG9tUHJpbnRpbmdNYXJnaW5LZXkgQCJXZWJLaXRPcmlnaW5hbEJvdHRvbU1hcmdpbiIKIAorI2Rl
ZmluZSBLZXlib2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNhdGlvbiBAImNvbS5hcHBsZS5LZXli
b2FyZFVJTW9kZURpZENoYW5nZSIKKyNkZWZpbmUgQXBwbGVLZXlib2FyZFVJTW9kZSBDRlNUUigi
QXBwbGVLZXlib2FyZFVJTW9kZSIpCisjZGVmaW5lIFVuaXZlcnNhbEFjY2Vzc0RvbWFpbiBDRlNU
UigiY29tLmFwcGxlLnVuaXZlcnNhbGFjY2VzcyIpCisKIHN0YXRpYyBCT09MIHNfZGlkU2V0Q2Fj
aGVNb2RlbDsKIHN0YXRpYyBXZWJDYWNoZU1vZGVsIHNfY2FjaGVNb2RlbCA9IFdlYkNhY2hlTW9k
ZWxEb2N1bWVudFZpZXdlcjsKIApAQCAtMjk0LDggKzI5OCw3IEBAIHN0YXRpYyBpbnQgcGx1Z2lu
RGF0YWJhc2VDbGllbnRDb3VudCA9IDAKIC0gKGlkKWluaXRXaXRoVGFyZ2V0OihpZCl0YXJnZXQg
ZGVmYXVsdFRhcmdldDooaWQpZGVmYXVsdFRhcmdldCBjYXRjaEV4Y2VwdGlvbnM6KEJPT0wpY2F0
Y2hFeGNlcHRpb25zOwogQGVuZAogCi1AaW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmpl
Y3QKLXsKK0BpbnRlcmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVjdCB7CiBAcHVibGljCiAg
ICAgUGFnZSogcGFnZTsKICAgICAKQEAgLTM2NSw2ICszNjgsOSBAQCBzdGF0aWMgaW50IHBsdWdp
bkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwCiAgICAgV2ViUGx1Z2luRGF0YWJhc2UgKnBsdWdpbkRh
dGFiYXNlOwogICAgIAogICAgIEhhc2hNYXA8dW5zaWduZWQgbG9uZywgUmV0YWluUHRyPGlkPiA+
KiBpZGVudGlmaWVyTWFwOworCisgICAgQk9PTCBfa2V5Ym9hcmRVSU1vZGVBY2Nlc3NlZDsKKyAg
ICBLZXlib2FyZFVJTW9kZSBfa2V5Ym9hcmRVSU1vZGU7CiB9CiBAZW5kCiAKQEAgLTc0NCw2ICs3
NTAsMTMgQEAgc3RhdGljIGJvb2wgZGVidWdXaWRnZXQgPSB0cnVlOwogICAgIC8vIEtlZXAgdGhl
IGdsb2JhbCBwbHVnLWluIGRhdGFiYXNlIGFjdGl2ZSB1bnRpbCB0aGUgYXBwIHRlcm1pbmF0ZXMg
dG8gYXZvaWQgaGF2aW5nIHRvIHJlbG9hZCBwbHVnLWluIGJ1bmRsZXMuCiAgICAgaWYgKCFwbHVn
aW5EYXRhYmFzZUNsaWVudENvdW50ICYmIGFwcGxpY2F0aW9uSXNUZXJtaW5hdGluZykKICAgICAg
ICAgW1dlYlBsdWdpbkRhdGFiYXNlIGNsb3NlU2hhcmVkRGF0YWJhc2VdOworCisgICAgaWYgKF9w
cml2YXRlLT5fa2V5Ym9hcmRVSU1vZGVBY2Nlc3NlZCkgeworICAgICAgICBbW05TRGlzdHJpYnV0
ZWROb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCisgICAgICAgICAgICByZW1vdmVP
YnNlcnZlcjpzZWxmIG5hbWU6S2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
CisgICAgICAgICAgICByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V2ViUHJlZmVyZW5jZXNDaGFu
Z2VkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIH0KIH0KIAogKyAoTlNTdHJpbmcgKilf
TUlNRVR5cGVGb3JGaWxlOihOU1N0cmluZyAqKXBhdGgKQEAgLTQxNjgsNiArNDE4MSw0NCBAQCBz
dGF0aWMgTlNTdHJpbmcgKmNyZWF0ZU1hY09TWFZlcnNpb25TdHJpCiAgICAgICAgIENGUmVsZWFz
ZShzZWxmKTsKIH0KIAorLSAodm9pZClfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJl
bmNlczooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBDRlByZWZlcmVuY2Vz
QXBwU3luY2hyb25pemUoVW5pdmVyc2FsQWNjZXNzRG9tYWluKTsKKworICAgIEJvb2xlYW4ga2V5
RXhpc3RzQW5kSGFzVmFsaWRGb3JtYXQ7CisgICAgaW50IG1vZGUgPSBDRlByZWZlcmVuY2VzR2V0
QXBwSW50ZWdlclZhbHVlKEFwcGxlS2V5Ym9hcmRVSU1vZGUsIFVuaXZlcnNhbEFjY2Vzc0RvbWFp
biwgJmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKKyAgICAKKyAgICAvLyBUaGUga2V5Ym9h
cmQgYWNjZXNzIG1vZGUgaXMgcmVwb3J0ZWQgYnkgdHdvIGJpdHM6CisgICAgLy8gQml0IDAgaXMg
c2V0IGlmIGZlYXR1cmUgaXMgb24KKyAgICAvLyBCaXQgMSBpcyBzZXQgaWYgZnVsbCBrZXlib2Fy
ZCBhY2Nlc3Mgd29ya3MgZm9yIGFueSBjb250cm9sLCBub3QganVzdCB0ZXh0IGJveGVzIGFuZCBs
aXN0cworICAgIC8vIFdlIHJlcXVpcmUgYm90aCBiaXRzIHRvIGJlIG9uLgorICAgIC8vIEkgZG8g
bm90IGtub3cgdGhhdCB3ZSB3b3VsZCBldmVyIGdldCBvbmUgYml0IG9uIGFuZCB0aGUgb3RoZXIg
b2ZmIHNpbmNlCisgICAgLy8gY2hlY2tpbmcgdGhlIGNoZWNrYm94IGluIHN5c3RlbSBwcmVmZXJl
bmNlcyB3aGljaCBpcyBtYXJrZWQgYXMgIlR1cm4gb24gZnVsbCBrZXlib2FyZCBhY2Nlc3MiCisg
ICAgLy8gdHVybnMgb24gYm90aCBiaXRzLgorICAgIF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGUg
PSAobW9kZSAmIDB4MikgPyBLZXlib2FyZEFjY2Vzc0Z1bGwgOiBLZXlib2FyZEFjY2Vzc0RlZmF1
bHQ7CisgICAgCisgICAgLy8gY2hlY2sgZm9yIHRhYmJpbmcgdG8gbGlua3MKKyAgICBpZiAoW19w
cml2YXRlLT5wcmVmZXJlbmNlcyB0YWJzVG9MaW5rc10pCisgICAgICAgIF9wcml2YXRlLT5fa2V5
Ym9hcmRVSU1vZGUgPSAoS2V5Ym9hcmRVSU1vZGUpKF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGUg
fCBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzKTsKK30KKworLSAoS2V5Ym9hcmRVSU1vZGUpX2tl
eWJvYXJkVUlNb2RlCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlQWNjZXNz
ZWQpIHsKKyAgICAgICAgX3ByaXZhdGUtPl9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkID0gWUVTOwor
ICAgICAgICBbc2VsZiBfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczpuaWxd
OworICAgICAgICAKKyAgICAgICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIAorICAgICAgICAgICAgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KSAKKyAgICAgICAg
ICAgIG5hbWU6S2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
CisKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKKyAgICAg
ICAgICAgIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9yZXRyaWV2ZUtleWJv
YXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOikgCisgICAgICAgICAgICAgICAgICAgbmFtZTpXZWJQ
cmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgfQorICAgIHJl
dHVybiBfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlOworfQorCiBAZW5kCiAKIC8vIFdlIHVzZSB0
aGVzZSBmdW5jdGlvbnMgdG8gY2FsbCB0aGUgZGVsZWdhdGVzIGFuZCBibG9jayBleGNlcHRpb25z
LiBUaGVzZSBmdW5jdGlvbnMgYXJlCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0lu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5h
bC5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDE3IEBACiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLS8vIFRoaXMgaGVhZGVyIGNvbnRhaW5zIFdlYlZpZXcgZGVjbGFyYXRpb25zIHRoYXQgY2Fu
IGJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIFdlYiBLaXQsIGJ1dCBhcmUgbmVpdGhlciBTUEkgbm9y
IEFQSS4KKy8vIFRoaXMgaGVhZGVyIGNvbnRhaW5zIFdlYlZpZXcgZGVjbGFyYXRpb25zIHRoYXQg
Y2FuIGJlIHVzZWQgYW55d2hlcmUgaW4gV2ViS2l0LCBidXQgYXJlIG5laXRoZXIgU1BJIG5vciBB
UEkuCiAKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCiAjaW1wb3J0ICJXZWJWaWV3UHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMK
KyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUtleWJvYXJkVUlNb2RlLmg+CisjZW5kaWYKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS2V5Ym9hcmRF
dmVudDsKICAgICBjbGFzcyBLVVJMOwpAQCAtNjMsNiArNjcsNyBAQCB0eXBlZGVmIFdlYkNvcmU6
OlBhZ2UgV2ViQ29yZVBhZ2U7CiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdJbnRlcm5hbCkK
ICNpZmRlZiBfX2NwbHVzcGx1cwogLSAoV2ViQ29yZTo6U3RyaW5nKV91c2VyQWdlbnRGb3JVUkw6
KGNvbnN0IFdlYkNvcmU6OktVUkwmKXVybDsKKy0gKFdlYkNvcmU6OktleWJvYXJkVUlNb2RlKV9r
ZXlib2FyZFVJTW9kZTsKICNlbmRpZgogQGVuZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19525</attachid>
            <date>2008-03-04 08:54:46 -0800</date>
            <delta_ts>2008-03-07 19:41:10 -0800</delta_ts>
            <desc>patch for runOpenPanel</desc>
            <filename>FilePanelPatch.txt</filename>
            <type>text/plain</type>
            <size>15498</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDc0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlZCBXZWJDb3JlRnJhbWVCcmlkZ2UgcnVuT3BlblBhbmVsCisKKyAgICAgICAgKiBwYWdl
L0Nocm9tZUNsaWVudC5oOiBBZGRlZCBydW5PcGVuUGFuZWwgZnVuY3Rpb24uCisgICAgICAgICog
cGFnZS9tYWMvQ2hyb21lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpy
dW5PcGVuUGFuZWwpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIpOiBNb3ZlZCB0aGlz
IGhlcmUuIEl0J3Mgbm8gbG9uZ2VyIHBsYXRmb3JtLXNwZWNpZmljLgorICAgICAgICBBbHNvIHN0
YXJ0IHRoZSByZWZjb3VudCBhdCAxLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNy
ZWF0ZSk6IEFkZGVkIGFkb3B0UmVmIHNpbmNlIHRoZSByZWZjb3VudCBubyBzdGFydHMgYXQgb25l
LgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6On5GaWxlQ2hvb3Nlcik6IE1vdmVkIGhl
cmUuIE5vIGxvbmdlciBwbGF0Zm9ybS1zcGVjaWZpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxl
Q2hvb3Nlci5oOiBSZW1vdmVkIG1fY29udHJvbGxlciwgd2hpY2ggd2FzIE1hY2ludG9zaC1zcGVj
aWZpYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwOiBSZW1vdmVk
IEZpbGVDaG9vc2VyIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yLAorICAgICAgICBzaW5jZSB0
aGV5IGFyZSBubyBsb25nZXIgcGxhdGZvcm0tc3BlY2lmaWMuCisgICAgICAgICogcGxhdGZvcm0v
cXQvRmlsZUNob29zZXJRdC5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9GaWxl
Q2hvb3Nlcldpbi5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3d4L1RlbXBvcmFyeUxp
bmtTdHVicy5jcHA6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9GaWxlQ2hvb3Nlck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIpOiBD
YWxsIHRoZSBjaHJvbWUgY2xpZW50IGluc3RlYWQgb2YgdGhlCisgICAgICAgIGJyaWRnZSB0byBy
dW4gdGhlIG9wZW4gcGFuZWwuIEFsbG93cyB1cyB0byBnZXQgcmlkIG9mIHRoZSBXZWJDb3JlT3Bl
blBhbmVsQ29udHJvbGxlcgorICAgICAgICBjbGFzcyBhbmQgbV9jb250cm9sbGVyIGRhdGEgbWVt
YmVyIGFuZCBtb3ZlIHRoZSBjb3NudHJ1dG9yL2Rlc3RydWN0b3IgdG8gcGxhdGZvcm0tCisgICAg
ICAgIGluZGVwZW5kZW50IGNvZGUuCisKIDIwMDgtMDMtMDQgIEFscCBUb2tlciAgPGFscEBhdG9r
ZXIuY29tPgogCiAgICAgICAgIEdUSysgYnVpbGQgZml4IHN1Z2dlc3RlZCBieSBhcm9iZW4uIFJl
bW92ZSBhbiB1bnVzZWQgTWFjLXNwZWNpZmljCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lv
biAzMDc0NikKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIyLDYgKzEyMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4p
OworI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgfkNocm9tZUNsaWVu
dCgpIHsgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQkocmV2aXNpb24gMzA3NDYp
CisrKyBXZWJDb3JlL3BhZ2UvbWFjL0Nocm9tZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw2ICsyMiw3IEBACiAjaW1wb3J0ICJDaHJvbWUuaCIK
IAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIK
ICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAKQEAgLTUxLDUgKzUyLDggQEAg
dm9pZCBDaHJvbWU6OmZvY3VzTlNWaWV3KE5TVmlldyogdmlldykKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit2b2lkIENocm9tZUNs
aWVudDo6cnVuT3BlblBhbmVsKFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KQoreworfQogCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkocmV2aXNp
b24gMzA3NDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzMsOSArMzMsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAoraW5saW5l
IEZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25z
dCBTdHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9maWxl
bmFtZShmaWxlbmFtZSkKKyAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKK3sKK30K
KwogUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShGaWxlQ2hvb3Nl
ckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIHJldHVybiBu
ZXcgRmlsZUNob29zZXIoY2xpZW50LCBmaWxlbmFtZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGaWxlQ2hvb3NlcihjbGllbnQsIGZpbGVuYW1lKSk7Cit9CisKK0ZpbGVDaG9vc2VyOjp+Rmls
ZUNob29zZXIoKQorewogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjbGVhcigpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5oCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRmls
ZUNob29zZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTYgKzMxLDYgQEAKICNk
ZWZpbmUgRmlsZUNob29zZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgT3BlblBhbmVsQ29udHJvbGxlcjsK
LSNlbHNlCi1jbGFzcyBPcGVuUGFuZWxDb250cm9sbGVyOwotI2VuZGlmCi0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NCw4ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJ
WE1FOiBJdCdzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIHRoYXQgd2UgcGFzcyBhIERvY3VtZW50IGlu
IGhlcmUuCiAgICAgLy8gVGhlIHBsYXRmb3JtIGRpcmVjdG9yeSBpcyB1bmRlcm5lYXRoIHRoZSBE
T00sIHNvIGl0IGNhbid0IHVzZSB0aGUgRE9NLgotICAgIC8vIEJlY2F1c2Ugb2YgVUkgZGVsZWdh
dGVzLCBpdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMgY2xhc3MgYmVsb25ncyBpbiB0aGUgcGxhdGZv
cm0KLSAgICAvLyBsYXllciBhdCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdzaWRlIHRo
ZSBDaHJvbWUgY2xhc3MgaW5zdGVhZC4KKyAgICAvLyBCZWNhdXNlIG9mIFVJIGRlbGVnYXRlcywg
aXQncyBub3QgY2xlYXIgdGhhdCB0aGUgRmlsZUNob29zZXIgY2xhc3MKKyAgICAvLyBiZWxvbmdz
IGluIHRoZSBwbGF0Zm9ybSBsYXllciBhdCBhbGwuIEl0IG1pZ2h0IG5lZWQgdG8gZ28gYWxvbmdz
aWRlCisgICAgLy8gdGhlIENocm9tZSBjbGFzcyBpbnN0ZWFkLgogICAgIHZvaWQgb3BlbkZpbGVD
aG9vc2VyKERvY3VtZW50Kik7CiAKICAgICBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlbmFtZTsgfQpAQCAtODQsMTAgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBG
aWxlQ2hvb3NlckNsaWVudCogbV9jbGllbnQ7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAgICAg
UmVmUHRyPEljb24+IG1faWNvbjsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8
T3BlblBhbmVsQ29udHJvbGxlcj4gbV9jb250cm9sbGVyOwotI2VuZGlmCiB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwCShyZXZpc2lvbiAzMDc0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVDaG9vc2VyR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTggKzU2LDYgQEAgc3RhdGljIGJvb2wgc3RyaW5nQnlBZG9wdGluZ0ZpbGVTeXN0
ZW1SZQogICAgIHJldHVybiB0cnVlOwogfQogCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmls
ZUNob29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJl
ZkNvdW50ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBt
X2ZpbGVuYW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQot
ewotfQotCi1GaWxlQ2hvb3Nlcjo6fkZpbGVDaG9vc2VyKCkKLXsKLX0KLQogdm9pZCBGaWxlQ2hv
b3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZUNob29zZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRmls
ZUNob29zZXJNYWMubW0JKHJldmlzaW9uIDMwNzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RmlsZUNob29zZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDg2ICszMCwyNiBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJGaWxlQ2hvb3Nlci5oIgogCisjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIK
ICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9y
dCAiRnJhbWUuaCIKICNpbXBvcnQgIkljb24uaCIKICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0
ICJTdHJpbmdUcnVuY2F0b3IuaCIKLSNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJDb3JlT3BlblBhbmVsQ29u
dHJvbGxlciA6IE5TT2JqZWN0IDxXZWJDb3JlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IHsKLSAg
ICBGaWxlQ2hvb3NlciAqX2ZpbGVDaG9vc2VyOwotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqX2Jy
aWRnZTsKLX0KLS0gKGlkKWluaXRXaXRoRmlsZUNob29zZXI6KEZpbGVDaG9vc2VyICopZmlsZUNo
b29zZXI7Ci0tICh2b2lkKWRpc2Nvbm5lY3RGaWxlQ2hvb3NlcjsKLS0gKHZvaWQpYmVnaW5TaGVl
dFdpdGhGcmFtZTooRnJhbWUqKWZyYW1lOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29y
ZU9wZW5QYW5lbENvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhGaWxlQ2hvb3NlcjooRmlsZUNo
b29zZXIgKilmaWxlQ2hvb3NlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX2ZpbGVDaG9vc2VyID0gZmlsZUNo
b29zZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdEZpbGVDaG9v
c2VyCi17Ci0gICAgX2ZpbGVDaG9vc2VyID0gMDsKLX0KLQotLSAodm9pZCliZWdpblNoZWV0V2l0
aEZyYW1lOihGcmFtZSopZnJhbWUKLXsKLSAgICBpZiAoIV9maWxlQ2hvb3NlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIF9icmlkZ2UgPSBmcmFtZS0+YnJpZGdlKCk7Ci0gICAgW19icmlk
Z2UgcmV0YWluXTsKLSAgICBbX2JyaWRnZSBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJl
c3VsdExpc3RlbmVyOnNlbGZdOwotfQotCi0tICh2b2lkKWNob29zZUZpbGVuYW1lOihOU1N0cmlu
ZyAqKWZpbGVuYW1lCi17Ci0gICAgaWYgKF9maWxlQ2hvb3NlcikKLSAgICAgICAgX2ZpbGVDaG9v
c2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lKTsKLSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQot
LSAodm9pZCljYW5jZWwKLXsKLSAgICBbX2JyaWRnZSByZWxlYXNlXTsKLX0KLQotQGVuZAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1GaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNo
b29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKLSAgICA6IFJlZkNv
dW50ZWQ8RmlsZUNob29zZXI+KDApCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2Zp
bGVuYW1lKGZpbGVuYW1lKQotICAgICwgbV9pY29uKGNob29zZUljb24oZmlsZW5hbWUpKQotICAg
ICwgbV9jb250cm9sbGVyKEFkb3B0TlMsIFtbV2ViQ29yZU9wZW5QYW5lbENvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoRmlsZUNob29zZXI6dGhpc10pCi17Ci19Ci0KLUZpbGVDaG9vc2VyOjp+Rmls
ZUNob29zZXIoKQotewotICAgIFttX2NvbnRyb2xsZXIuZ2V0KCkgZGlzY29ubmVjdEZpbGVDaG9v
c2VyXTsKLX0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KiBk
b2N1bWVudCkKIHsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0g
ICAgICAgIFttX2NvbnRyb2xsZXIuZ2V0KCkgYmVnaW5TaGVldFdpdGhGcmFtZTpmcmFtZV07Cisg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cnVu
T3BlblBhbmVsKHRoaXMpOwogfQogCiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lk
dGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9GaWxlQ2hvb3NlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0ZpbGVDaG9vc2VyUXQuY3BwCShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvRmlsZUNob29zZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKEZpbGVD
aG9vc2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBSZWZD
b3VudGVkPEZpbGVDaG9vc2VyPigwKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9m
aWxlbmFtZShmaWxlbmFtZSkKLSAgICAsIG1faWNvbihjaG9vc2VJY29uKGZpbGVuYW1lKSkKLXsK
LX0KLQotRmlsZUNob29zZXI6On5GaWxlQ2hvb3NlcigpCi17Ci19Ci0KIHZvaWQgRmlsZUNob29z
ZXI6Om9wZW5GaWxlQ2hvb3NlcihEb2N1bWVudCogZG9jKQogewogICAgIFBhZ2UgKnBhZ2UgPSBk
b2MtPnBhZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVDaG9vc2VyV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlQ2hvb3Nlcldpbi5jcHAJ
KHJldmlzaW9uIDMwNzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZUNob29zZXJXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOCArNDAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCogY2xpZW50
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQotICAgIDogUmVmQ291bnRlZDxGaWxlQ2hvb3Nlcj4o
MCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fZmlsZW5hbWUoZmlsZW5hbWUpCi0g
ICAgLCBtX2ljb24oY2hvb3NlSWNvbihmaWxlbmFtZSkpCi17Ci19Ci0KLUZpbGVDaG9vc2VyOjp+
RmlsZUNob29zZXIoKQotewotfQotCiB2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIo
RG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52
aWV3KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CShyZXZpc2lvbiAzMDc0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDkgKzE1Nyw2IEBAIHZvaWQgUGxhdGZvcm1T
Y3JvbGxiYXI6OnVwZGF0ZVRodW1iUG9zaXQKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0
ZVRodW1iUHJvcG9ydGlvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAK
LUZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCosIGNvbnN0IFN0cmlu
ZyYgaW5pdGlhbEZpbGVuYW1lKSA6IFJlZkNvdW50ZWQ8RmlsZUNob29zZXI+KDApIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotLy9QYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBGaWxlQ2hvb3Nlcjo6Y3Jl
YXRlKEZpbGVDaG9vc2VyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiBpbml0aWFsRmlsZW5hbWUpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KCk7IH0KLUZp
bGVDaG9vc2VyOjp+RmlsZUNob29zZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRmls
ZUNob29zZXI6Om9wZW5GaWxlQ2hvb3NlcihEb2N1bWVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQogU3RyaW5nIEZpbGVDaG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9CiAKSW5k
ZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAzMDc0OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDMtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0gZWxpbWluYXRlZCBXZWJDb3JlRnJhbWVCcmlkZ2UgcnVuT3BlblBhbmVsCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkZWQgcnVuT3BlblBhbmVsLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdl
YkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKTogQWRkZWQuCisgICAgICAgICgtW1dlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyIGluaXRXaXRoQ2hvb3NlcjpdKTogQWRkZWQuIFVzZWQgdG8gd3Jh
cCB0aGUKKyAgICAgICAgRmlsZUNob29zZXIgc28gaXQgY2FuIGdldCBhIHJlc3VsdCBmcm9tIHRo
ZSBVSSBkZWxlZ2F0ZS4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgZGVh
bGxvY10pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgZmlu
YWxpemVdKTogQWRkZWQuCisgICAgICAgICgtW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIGNh
bmNlbF0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgY2hv
b3NlRmlsZW5hbWU6XSk6IEFkZGVkLgorCiAyMDA4LTAzLTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAzMDc0NikKKysr
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGFzaGJv
YXJkUmVnaW9uc0NoYW5nZWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoUGFz
c1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOworCiBwcml2YXRlOgogICAgIFdlYlZpZXcg
Km1fd2ViVmlldzsKIH07CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkocmV2aXNpb24gMzA3NDYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDE3IEBA
CiAjaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJXZWJIVE1MVmlldy5o
IgotI2ltcG9ydCAiV2ViSFRNTFZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXZWJKYXZhUGx1Z0luLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9y
dCAiV2ViU2VjdXJpdHlPcmlnaW5Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWJQbHVnaW4uaCIKICNp
bXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdh
dGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3
LmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tF
eGNlcHRpb25zLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CkBAIC01MiwxNSArNTIsMzEgQEAKICNpbXBvcnQg
PFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJp
bmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL1dpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2ltcG9y
dCA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotQGludGVyZmFjZSBOU1ZpZXcgKEFwcEtpdFNlY3JldHNX
ZWJCcmlkZ2VLbm93c0Fib3V0KQorQGludGVyZmFjZSBOU1ZpZXcgKE5TVmlld0RldGFpbHMpCiAt
IChOU1ZpZXcgKilfZmluZExhc3RWaWV3SW5LZXlWaWV3TG9vcDsKIEBlbmQKIAorQGludGVyZmFj
ZSBOU1ZpZXcgKEphdmFQbHVnaW5EZXRhaWxzKQorLSAoam9iamVjdClwb2xsRm9yQXBwbGV0SW5X
aW5kb3c6KE5TV2luZG93ICopd2luZG93OworQGVuZAorCisvLyBGb3IgY29tcGF0aWJpbGl0eSB3
aXRoIG9sZCBTUEkuCitAaW50ZXJmYWNlIE5TVmlldyAoT2xkV2ViS2l0UGx1Z0luRGV0YWlscykK
Ky0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1NlbGVjdGVkOworQGVuZAorCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAorQGludGVyZmFjZSBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ciA6IE5TT2JqZWN0IDxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4geworICAgIEZpbGVDaG9v
c2VyKiBfY2hvb3NlcjsKK30KKy0gKGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxl
Q2hvb3Nlcj4pY2hvb3NlcjsKK0BlbmQKKwogV2ViQ2hyb21lQ2xpZW50OjpXZWJDaHJvbWVDbGll
bnQoV2ViVmlldyAqd2ViVmlldykgCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKIHsKQEAgLTQz
MywzICs0NDksNTggQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaAog
CiAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkYXNoYm9h
cmRSZWdpb25zQ2hhbmdlZDopLCByZWdpb25zKTsKIH0KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKQoreworICAgIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyICpsaXN0ZW5lciA9IFtbV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIgYWxsb2NdIGluaXRXaXRoQ2hvb3NlcjpjaG9vc2VyXTsKKyAgICBDYWxsVUlEZWxl
Z2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0
b25XaXRoUmVzdWx0TGlzdGVuZXI6KSwgbGlzdGVuZXIpOworICAgIFtsaXN0ZW5lciByZWxlYXNl
XTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyCisKKy0g
KGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pY2hvb3Nlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIF9jaG9vc2VyID0gY2hvb3Nlci5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VS
VCghX2Nob29zZXIpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6
ZQoreworICAgIEFTU0VSVCghX2Nob29zZXIpOworICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisK
KyNlbmRpZgorCistICh2b2lkKWNhbmNlbAoreworICAgIEFTU0VSVChfY2hvb3Nlcik7CisgICAg
aWYgKCFfY2hvb3NlcikKKyAgICAgICAgcmV0dXJuOworICAgIF9jaG9vc2VyLT5kZXJlZigpOwor
ICAgIF9jaG9vc2VyID0gMDsKK30KKworLSAodm9pZCljaG9vc2VGaWxlbmFtZTooTlNTdHJpbmcg
KilmaWxlbmFtZQoreworICAgIEFTU0VSVChfY2hvb3Nlcik7CisgICAgaWYgKCFfY2hvb3NlcikK
KyAgICAgICAgcmV0dXJuOworICAgIF9jaG9vc2VyLT5jaG9vc2VGaWxlKGZpbGVuYW1lKTsKKyAg
ICBfY2hvb3Nlci0+ZGVyZWYoKTsKKyAgICBfY2hvb3NlciA9IDA7Cit9CisKK0BlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19606</attachid>
            <date>2008-03-07 19:41:30 -0800</date>
            <delta_ts>2008-03-08 06:11:05 -0800</delta_ts>
            <desc>patch for custom highlight calls</desc>
            <filename>CustomHighlightPatch.txt</filename>
            <type>text/plain</type>
            <size>17433</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDg4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDgtMDMtMDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlIGN1c3RvbSBoaWdobGlnaHQgbWV0aG9kcyBmcm9tIFdlYkNvcmVGcmFtZUJyaWRnZQor
CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KTogQWRkZWQuCisgICAgICAgICogcGFnZS9D
aHJvbWVDbGllbnQuaDogQWRkZWQgY3VzdG9tIGhpZ2hsaWdodCBmdW5jdGlvbnMuCisgICAgICAg
ICogcGFnZS9GcmFtZS5oOiBSZW1vdmVkIGN1c3RvbSBoaWdobGlnaHQgZnVuY3Rpb25zLgorICAg
ICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCBjdXN0b20gaGlnaGxpZ2h0IG1ldGhvZHMuCisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQpOiBDaGFuZ2VkIGNvZGUgdG8gdXNl
CisgICAgICAgIHRoZSBDaHJvbWVDbGllbnQgaW5zdGVhZCBvZiBXZWJDb3JlRnJhbWVCcmlkZ2Ug
dG8gZG8gdGhlIGN1c3RvbSBoaWdobGlnaHQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3ZlcmZsb3cpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KTog
RGl0dG8uCisKIDIwMDgtMDMtMDcgIFNhbXVlbCBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAz
MDg4OSkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQs
NiArMzU0LDE1IEBAIHZvaWQgQ2hyb21lQ2xpZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygKIHsK
IH0KIAorRmxvYXRSZWN0IENocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwg
Y29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gRmxv
YXRSZWN0KCk7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChO
b2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCwgYm9vbCkKK3sKK30KKwogLy8gLS0tLS0tLS0KIAogUGFnZUdyb3VwTG9hZERl
ZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSogcGFnZSwgYm9vbCBkZWZlclNlbGYp
CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAzMDg4OSkKKysrIFdlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoUGFzc1JlZlB0
cjxGaWxlQ2hvb3Nlcj4pOwogI2VuZGlmCiAKKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY3Vz
dG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBG
bG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGln
aGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgICAgIGJvb2wgYmVo
aW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmly
dHVhbCB+Q2hyb21lQ2xpZW50KCkgeyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAzMDg4OSkK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsMTIgKzM2OCw2
IEBAIHB1YmxpYzoKIHByaXZhdGU6ICAgIAogICAgIE5TSW1hZ2UqIGltYWdlRnJvbVJlY3QoTlNS
ZWN0KSBjb25zdDsKIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8gQ2hyb21lCi0KLXB1YmxpYzoK
LSAgICBGbG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0TGluZVJlY3QoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LCBOb2RlKik7Ci0gICAgdm9pZCBwYWlu
dEN1c3RvbUhpZ2hsaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwgYm9vbCB0ZXh0LCBib29sIGxp
bmUsIE5vZGUqKTsKLQogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRWRpdG9yCiAKIHB1YmxpYzoK
SW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMzA4ODkpCisrKyBXZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsMTYgKzU2MSw2IEBAIHZvaWQg
RnJhbWU6OndpbGxQb3B1cE1lbnUoTlNNZW51ICogbWVudSkKICAgICBbZC0+bV9icmlkZ2Ugd2ls
bFBvcHVwTWVudTptZW51XTsKIH0KIAotRmxvYXRSZWN0IEZyYW1lOjpjdXN0b21IaWdobGlnaHRM
aW5lUmVjdChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJl
Y3QsIE5vZGUqIG5vZGUpCi17Ci0gICAgcmV0dXJuIFtkLT5tX2JyaWRnZSBjdXN0b21IaWdobGln
aHRSZWN0OnR5cGUgZm9yTGluZTpsaW5lUmVjdCByZXByZXNlbnRlZE5vZGU6bm9kZV07Ci19Ci0K
LXZvaWQgRnJhbWU6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LCBi
b29sIHRleHQsIGJvb2wgbGluZSwgTm9kZSogbm9kZSkKLXsKLSAgICBbZC0+bV9icmlkZ2UgcGFp
bnRDdXN0b21IaWdobGlnaHQ6dHlwZSBmb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJlY3QgYmVo
aW5kVGV4dDp0ZXh0IGVudGlyZUxpbmU6bGluZSByZXByZXNlbnRlZE5vZGU6bm9kZV07Ci19Ci0K
IERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCiB7CiAgICAgaWYg
KCFzZWxlY3Rpb25Db250cm9sbGVyKCktPmlzUmFuZ2UoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMzA4ODkpCisrKyBXZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsOSArMTk4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAtICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1l
bnU7CiAKLS0gKE5TUmVjdCljdXN0b21IaWdobGlnaHRSZWN0OihOU1N0cmluZyopdHlwZSBmb3JM
aW5lOihOU1JlY3QpbGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOihXZWJDb3JlOjpOb2RlICopbm9k
ZTsKLS0gKHZvaWQpcGFpbnRDdXN0b21IaWdobGlnaHQ6KE5TU3RyaW5nKil0eXBlIGZvckJveDoo
TlNSZWN0KWJveFJlY3Qgb25MaW5lOihOU1JlY3QpbGluZVJlY3QgYmVoaW5kVGV4dDooQk9PTCl0
ZXh0IGVudGlyZUxpbmU6KEJPT0wpbGluZSByZXByZXNlbnRlZE5vZGU6KFdlYkNvcmU6Ok5vZGUg
Kilub2RlOwotCiAtIChXZWJDb3JlOjpLZXlib2FyZFVJTW9kZSlrZXlib2FyZFVJTW9kZTsKIAog
QGVuZApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDMwODg5
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDEx
ICsyMywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3gu
aCIKIAorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtNTMwLDE0ICs1MzIsMjMgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFjawogfQogCiAjaWYgUExBVEZPUk0oTUFDKQorCiB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGludCB0eCwgaW50IHR5LCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCiB7CisgICAgRnJhbWUqIGZyYW1lID0gb2JqZWN0KCkt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgUm9vdElubGluZUJveCogciA9IHJvb3QoKTsKICAgICBGbG9hdFJlY3Qg
cm9vdFJlY3QodHggKyByLT54UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHItPndpZHRoKCks
IHNlbGVjdGlvbkhlaWdodCgpKTsKICAgICBGbG9hdFJlY3QgdGV4dFJlY3QodHggKyB4UG9zKCks
IHJvb3RSZWN0LnkoKSwgd2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogCi0gICAgb2JqZWN0
KCktPmRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR5cGUsIHRleHRS
ZWN0LCByb290UmVjdCwgdHJ1ZSwgZmFsc2UsIG9iamVjdCgpLT5ub2RlKCkpOworICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCktPm5vZGUo
KSwgdHlwZSwgdGV4dFJlY3QsIHJvb3RSZWN0LCB0cnVlLCBmYWxzZSk7CiB9CisKICNlbmRpZgog
CiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgZGVjbykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkocmV2aXNpb24gMzA4ODkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDkgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAg
ICAgKEMpIDIwMDUsIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEyICsyNiwxNCBAQAogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC03MDMsMTkgKzcwMywyOCBAQCB2b2lkIFJl
bmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiB9CiAKICNpZiBQTEFURk9STShNQUMp
CisKIHZvaWQgUmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChpbnQgdHgsIGludCB0eSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpCiB7CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm47CisKICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFw
cGVyKCk7CiAgICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkg
OiAwOwogICAgIGlmIChyKSB7CiAgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPnhQ
b3MoKSwgdHkgKyByLT5zZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgci0+c2VsZWN0aW9uSGVp
Z2h0KCkpOwogICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHR4ICsgbV94LCByb290UmVjdC55
KCksIHdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0LCByb290UmVjdCwgYmVo
aW5kVGV4dCwgZmFsc2UsIG5vZGUoKSk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0
LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQodHlwZSwgaW1hZ2VSZWN0
LCBpbWFnZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlLCBub2RlKCkpOworICAgICAgICBwYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KG5vZGUoKSwgdHlwZSwgaW1h
Z2VSZWN0LCBpbWFnZVJlY3QsIGJlaGluZFRleHQsIGZhbHNlKTsKICAgICB9CiB9CisKICNlbmRp
ZgogCiBJbnRSZWN0IFJlbmRlckJveDo6Z2V0T3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0
eSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAzMDg4OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNSBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaHRtbCByZW5k
ZXJlciBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDExICsy
MSwxMyBAQAogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNv
bHZlci5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgogCkBAIC0xMzYsMTEgKzEzNiwxOSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxs
aXBzaXNCb3goUmVuCiB9CiAKICNpZiBQTEFURk9STShNQUMpCisKIHZvaWQgUm9vdElubGluZUJv
eDo6YWRkSGlnaGxpZ2h0T3ZlcmZsb3coKQogeworICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdCgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAg
IHJldHVybjsKKwogICAgIC8vIEhpZ2hsaWdodCBhY3RzIGFzIGEgc2VsZWN0aW9uIGluZmxhdGlv
bi4KICAgICBGbG9hdFJlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCksIHdpZHRoKCksIHNl
bGVjdGlvbkhlaWdodCgpKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3Qob2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdodExpbmVS
ZWN0KG9iamVjdCgpLT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QsIG9iamVjdCgpLT5u
b2RlKCkpKTsKKyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KG9iamVjdCgpLT5ub2Rl
KCksIG9iamVjdCgpLT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QpKTsKICAgICBzZXRI
b3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMobWluKGxlZnRPdmVyZmxvdygpLCBpbmZsYXRlZFJl
Y3QueCgpKSwgbWF4KHJpZ2h0T3ZlcmZsb3coKSwgaW5mbGF0ZWRSZWN0LnJpZ2h0KCkpKTsKICAg
ICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKG1pbih0b3BPdmVyZmxvdygpLCBpbmZsYXRl
ZFJlY3QueSgpKSwgbWF4KGJvdHRvbU92ZXJmbG93KCksIGluZmxhdGVkUmVjdC5ib3R0b20oKSkp
OwogfQpAQCAtMTUwLDEyICsxNTgsMjAgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEN1c3Rv
bUhpZ2hsaWdodAogICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWlu
dEluZm8pIHx8IG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsK
IAorICAgIEZyYW1lKiBmcmFtZSA9IG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEdldCB0aGUg
aW5mbGF0ZWQgcmVjdCBzbyB0aGF0IHdlIGNhbiBwcm9wZXJseSBoaXQgdGVzdC4KICAgICBGbG9h
dFJlY3Qgcm9vdFJlY3QodHggKyB4UG9zKCksIHR5ICsgc2VsZWN0aW9uVG9wKCksIHdpZHRoKCks
IHNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gb2JqZWN0
KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmN1c3RvbUhpZ2hsaWdodExpbmVSZWN0KGhpZ2hsaWdo
dFR5cGUsIHJvb3RSZWN0LCBvYmplY3QoKS0+bm9kZSgpKTsKKyAgICBGbG9hdFJlY3QgaW5mbGF0
ZWRSZWN0ID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KG9i
amVjdCgpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKICAgICBpZiAoaW5mbGF0
ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQotICAgICAgICBvYmplY3QoKS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQoaGlnaGxpZ2h0VHlwZSwgcm9v
dFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSwgb2JqZWN0KCktPm5vZGUoKSk7CisgICAgICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQob2JqZWN0KCkt
Pm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSk7
CiB9CisKICNlbmRpZgogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMw
ODg5KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOC0wMy0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBlbGltaW5hdGUgY3Vz
dG9tIGhpZ2hsaWdodCBtZXRob2RzIGZyb20gV2ViQ29yZUZyYW1lQnJpZGdlCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkZWQgY3VzdG9tIGhpZ2hsaWdo
dCBmdW5jdGlvbnMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KTogTW92ZWQg
Y29kZSBoZXJlIGZyb20gYnJpZGdlLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1
c3RvbUhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
QnJpZGdlLm1tOiBSZW1vdmVkIGNvZGUgaGVyZS4KKwogMjAwOC0wMy0wNyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMzA4
ODkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBydW5PcGVuUGFuZWwoUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwogCisgICAg
dmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChXZWJDb3JlOjpO
b2RlKiwgY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiB0eXBlLAorICAgICAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0
b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYg
dHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgICAgICBib29sIGJlaGluZFRleHQsIGJv
b2wgZW50aXJlTGluZSk7CisKIHByaXZhdGU6CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogfTsK
SW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShy
ZXZpc2lvbiAzMDg4OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsNiArNDU2LDM0IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpkYXNoYm9hcmRSZWdpb25zQ2gKICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcs
IEBzZWxlY3Rvcih3ZWJWaWV3OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkOiksIHJlZ2lvbnMpOwog
fQogCitGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUq
IG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVj
dCkKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtba2l0KG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCkpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5T
WmVyb1JlY3Q7CisKKyAgICBXZWJIVE1MVmlldyAqd2ViSFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcg
Kilkb2N1bWVudFZpZXc7CisgICAgaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiBoaWdobGlnaHRlciA9
IFt3ZWJIVE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5cGVdOworICAgIGlmIChbKE5TT2Jq
ZWN0ICopaGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihoaWdobGlnaHRS
ZWN0Rm9yTGluZTpyZXByZXNlbnRlZE5vZGU6KV0pCisgICAgICAgIHJldHVybiBbaGlnaGxpZ2h0
ZXIgaGlnaGxpZ2h0UmVjdEZvckxpbmU6bGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOmtpdChub2Rl
KV07CisgICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTpsaW5lUmVj
dF07Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2Rl
KiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICBib29sIGJlaGluZFRleHQsIGJvb2wg
ZW50aXJlTGluZSkKK3sKKyAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtba2l0KG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCkpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBpZiAoIVtk
b2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViSFRNTFZpZXcgKndlYkhUTUxWaWV3ID0gKFdlYkhUTUxWaWV3ICop
ZG9jdW1lbnRWaWV3OworICAgIGlkPFdlYkhUTUxIaWdobGlnaHRlcj4gaGlnaGxpZ2h0ZXIgPSBb
d2ViSFRNTFZpZXcgX2hpZ2hsaWdodGVyRm9yVHlwZTp0eXBlXTsKKyAgICBpZiAoWyhOU09iamVj
dCAqKWhpZ2hsaWdodGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGFpbnRIaWdobGln
aHRGb3JCb3g6b25MaW5lOmJlaGluZFRleHQ6ZW50aXJlTGluZTpyZXByZXNlbnRlZE5vZGU6KV0p
CisgICAgICAgIFtoaWdobGlnaHRlciBwYWludEhpZ2hsaWdodEZvckJveDpib3hSZWN0IG9uTGlu
ZTpsaW5lUmVjdCBiZWhpbmRUZXh0OmJlaGluZFRleHQgZW50aXJlTGluZTplbnRpcmVMaW5lIHJl
cHJlc2VudGVkTm9kZTpraXQobm9kZSldOworICAgIGVsc2UKKyAgICAgICAgW2hpZ2hsaWdodGVy
IHBhaW50SGlnaGxpZ2h0Rm9yQm94OmJveFJlY3Qgb25MaW5lOmxpbmVSZWN0IGJlaGluZFRleHQ6
YmVoaW5kVGV4dCBlbnRpcmVMaW5lOmVudGlyZUxpbmVdOworfQorCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6cnVuT3BlblBhbmVsKFBhc3NSZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIpCiB7CiAg
ICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgKmxpc3RlbmVyID0gW1tXZWJPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lciBhbGxvY10gaW5pdFdpdGhDaG9vc2VyOmNob29zZXJdOwpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAzMDg4
OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMyOSwzMyArMzI5LDQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAg
ICAgQ2FsbFVJRGVsZWdhdGUoW3NlbGYgd2ViVmlld10sIEBzZWxlY3Rvcih3ZWJWaWV3OndpbGxQ
b3B1cE1lbnU6KSwgbWVudSk7CiB9CiAKLS0gKE5TUmVjdCljdXN0b21IaWdobGlnaHRSZWN0OihO
U1N0cmluZyopdHlwZSBmb3JMaW5lOihOU1JlY3QpbGluZVJlY3QgcmVwcmVzZW50ZWROb2RlOihX
ZWJDb3JlOjpOb2RlICopbm9kZQotewotICAgIEFTU0VSVChfZnJhbWUgIT0gbmlsKTsKLSAgICBO
U1ZpZXcgKmRvY3VtZW50VmlldyA9IFtbX2ZyYW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsK
LSAgICBpZiAoIVtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSkKLSAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Ci0KLSAgICBXZWJIVE1MVmlldyAqd2ViSFRN
TFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7Ci0gICAgaWQ8V2ViSFRNTEhpZ2hs
aWdodGVyPiBoaWdobGlnaHRlciA9IFt3ZWJIVE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBlOnR5
cGVdOwotICAgIGlmIChbKE5TT2JqZWN0ICopaGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihoaWdobGlnaHRSZWN0Rm9yTGluZTpyZXByZXNlbnRlZE5vZGU6KV0pCi0gICAg
ICAgIHJldHVybiBbaGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0UmVjdEZvckxpbmU6bGluZVJlY3QgcmVw
cmVzZW50ZWROb2RlOmtpdChub2RlKV07Ci0gICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGln
aHRSZWN0Rm9yTGluZTpsaW5lUmVjdF07Ci19Ci0KLS0gKHZvaWQpcGFpbnRDdXN0b21IaWdobGln
aHQ6KE5TU3RyaW5nKil0eXBlIGZvckJveDooTlNSZWN0KWJveFJlY3Qgb25MaW5lOihOU1JlY3Qp
bGluZVJlY3QgYmVoaW5kVGV4dDooQk9PTCl0ZXh0IGVudGlyZUxpbmU6KEJPT0wpbGluZSByZXBy
ZXNlbnRlZE5vZGU6KFdlYkNvcmU6Ok5vZGUgKilub2RlCi17Ci0gICAgQVNTRVJUKF9mcmFtZSAh
PSBuaWwpOwotICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tfZnJhbWUgZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOwotICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJI
VE1MVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJIVE1MVmlldyAqd2Vi
SFRNTFZpZXcgPSAoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXc7Ci0gICAgaWQ8V2ViSFRNTEhp
Z2hsaWdodGVyPiBoaWdobGlnaHRlciA9IFt3ZWJIVE1MVmlldyBfaGlnaGxpZ2h0ZXJGb3JUeXBl
OnR5cGVdOwotICAgIGlmIChbKE5TT2JqZWN0ICopaGlnaGxpZ2h0ZXIgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihwYWludEhpZ2hsaWdodEZvckJveDpvbkxpbmU6YmVoaW5kVGV4dDplbnRp
cmVMaW5lOnJlcHJlc2VudGVkTm9kZTopXSkKLSAgICAgICAgW2hpZ2hsaWdodGVyIHBhaW50SGln
aGxpZ2h0Rm9yQm94OmJveFJlY3Qgb25MaW5lOmxpbmVSZWN0IGJlaGluZFRleHQ6dGV4dCBlbnRp
cmVMaW5lOmxpbmUgcmVwcmVzZW50ZWROb2RlOmtpdChub2RlKV07Ci0gICAgZWxzZQotICAgICAg
ICBbaGlnaGxpZ2h0ZXIgcGFpbnRIaWdobGlnaHRGb3JCb3g6Ym94UmVjdCBvbkxpbmU6bGluZVJl
Y3QgYmVoaW5kVGV4dDp0ZXh0IGVudGlyZUxpbmU6bGluZV07Ci19Ci0KIEBlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19609</attachid>
            <date>2008-03-08 07:17:40 -0800</date>
            <delta_ts>2008-03-10 10:02:35 -0700</delta_ts>
            <desc>patch that moves Java applet loading off the bridge</desc>
            <filename>JavaAppletPatch.txt</filename>
            <type>text/plain</type>
            <size>14544</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMDMtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlIEphdmEgYXBwbGV0IG1ldGhvZHMgZnJvbSBXZWJDb3JlRnJhbWVCcmlkZ2UKKworICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOiBBZGRlZCBhIGphdmFBcHBsZXQgZnVu
Y3Rpb24uCisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQpOiBTdHJlYW1saW5lZCB0aGUg
Y29kZS4KKyAgICAgICAgVXNlIHRoZSBsb2FkZXIgY2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRn
ZSB0byBnZXQgdGhlIGFwcGxldC4KKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UuaDogUmVtb3ZlZCB0aGUgZ2V0QXBwbGV0SW5WaWV3IGFuZAorICAgICAgICBwb2xsRm9yQXBw
bGV0SW5WaWV3IG1ldGhvZHMuIEFsc28gcmVtb3ZlZCBvdGhlciB1bnVzZWQgdGhpbmdzLgorCiAy
MDA4LTAzLTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGVsZS4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNp
b24gMzA5MDApCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDIwICsyNSwyMCBAQAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRfaAogI2Rl
ZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
Ci0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExB
VEZPUk0oTUFDKQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNDYWNoZWRVUkxSZXNwb25zZTsK
LSNlbHNlCit0eXBlZGVmIGNsYXNzIF9qb2JqZWN0KiBqb2JqZWN0OworCisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChfX09CSkNfXykKIGNsYXNzIE5TQ2FjaGVkVVJMUmVzcG9uc2U7Ci0j
ZW5kaWYKK2NsYXNzIE5TVmlldzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03
MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lTG9hZGVy
Q2xpZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZyYW1lTG9hZGVyQ2xpZW50
KCkgeyAgfQorICAgICAgICB2aXJ0dWFsIH5GcmFtZUxvYWRlckNsaWVudCgpIHsgfQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKSA9IDA7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0ID0gMDsgLy8gbWFpbmx5IGZvciBh
c3NlcnRpb25zCkBAIC0yMTAsNiArMjEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVuID0g
dHJ1ZSkgPSAwOwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHZpcnR1YWwg
am9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyAqKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHZpcnR1
YWwgTlNDYWNoZWRVUkxSZXNwb25zZSogd2lsbENhY2hlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIE5TQ2FjaGVkVVJMUmVzcG9uc2UqKSBjb25zdCA9
IDA7CiAjZW5kaWYKICAgICB9OwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiAzMDkw
MCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICog
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqCkBAIC01NjgsNTEgKzU2OCwzOSBA
QCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvCiAgICAgcmV0dXJuIHNl
bGVjdGlvbkltYWdlKCk7CiB9CiAKLQotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lOjpj
cmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXZWJDb3JlOjpXaWRnZXQqIHdpZGdldCkKK0tK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgTlNWaWV3KiBhVmlldyA9IHdpZGdldC0+Z2V0Vmll
dygpOwotICAgIGlmICghYVZpZXcpCisgICAgTlNWaWV3KiB3aWRnZXRWaWV3ID0gd2lkZ2V0LT5n
ZXRWaWV3KCk7CisgICAgaWYgKCF3aWRnZXRWaWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHZvaWQqIG5hdGl2ZUhhbmRsZSA9IGFWaWV3OwotICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290
T2JqZWN0ID0gY3JlYXRlUm9vdE9iamVjdChuYXRpdmVIYW5kbGUsIHNjcmlwdFByb3h5KCktPmds
b2JhbE9iamVjdCgpKTsKKyAgICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IGNyZWF0
ZVJvb3RPYmplY3Qod2lkZ2V0Vmlldywgc2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOwog
Ci0gICAgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKG9iamVjdEZvcldl
YlNjcmlwdCldKSB7Ci0gICAgICAgIGlkIG9iamVjdEZvcldlYlNjcmlwdCA9IFthVmlldyBvYmpl
Y3RGb3JXZWJTY3JpcHRdOwotICAgICAgICBpZiAob2JqZWN0Rm9yV2ViU2NyaXB0KQotICAgICAg
ICAgICAgcmV0dXJuIEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShJ
bnN0YW5jZTo6T2JqZWN0aXZlQ0xhbmd1YWdlLCBvYmplY3RGb3JXZWJTY3JpcHQsIHJvb3RPYmpl
Y3QucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIGlmIChbYVZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0
KV0pIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmplY3Qq
IG5wT2JqZWN0ID0gW2FWaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdOwotICAgICAg
ICBpZiAobnBPYmplY3QpIHsKLSAgICAgICAgICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3Rh
bmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShJbnN0YW5jZTo6Q0xhbmd1YWdl
LCBucE9iamVjdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotCi0gICAgICAgICAgICAvLyAtY3Jl
YXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5zIGEgcmV0YWluZWQgTlBPYmplY3QuICBU
aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2UgaXQuCi0gICAgICAgICAgICBfTlBOX1Jl
bGVhc2VPYmplY3QobnBPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKFt3aWRnZXRWaWV3IHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2JqZWN0Rm9yV2ViU2NyaXB0KV0pIHsKKyAgICAg
ICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW3dpZGdldFZpZXcgb2JqZWN0Rm9yV2ViU2NyaXB0
XTsKKyAgICAgICAgaWYgKCFvYmplY3RGb3JXZWJTY3JpcHQpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0
YW5jZShJbnN0YW5jZTo6T2JqZWN0aXZlQ0xhbmd1YWdlLCBvYmplY3RGb3JXZWJTY3JpcHQsIHJv
b3RPYmplY3QucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBqb2JqZWN0IGFwcGxldDsKLSAgICAK
LSAgICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSBhY3R1YWwgSmF2YSBhcHBsZXQgaW5zdGFuY2Uu
Ci0gICAgaWYgKFtkLT5tX2JyaWRnZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGdldEFw
cGxldEluVmlldzopXSkKLSAgICAgICAgYXBwbGV0ID0gW2QtPm1fYnJpZGdlIGdldEFwcGxldElu
VmlldzphVmlld107Ci0gICAgZWxzZQotICAgICAgICBhcHBsZXQgPSBbZC0+bV9icmlkZ2UgcG9s
bEZvckFwcGxldEluVmlldzphVmlld107Ci0gICAgCi0gICAgaWYgKGFwcGxldCkgewotICAgICAg
ICAvLyBXcmFwIHRoZSBKYXZhIGluc3RhbmNlIGluIGEgbGFuZ3VhZ2UgbmV1dHJhbCBiaW5kaW5n
IGFuZCBoYW5kCi0gICAgICAgIC8vIG9mZiBvd25lcnNoaXAgdG8gdGhlIEFQUExFVCBlbGVtZW50
LgotICAgICAgICBJbnN0YW5jZSogaW5zdGFuY2UgPSBJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zv
ckxhbmd1YWdlSW5zdGFuY2UoSW5zdGFuY2U6OkphdmFMYW5ndWFnZSwgYXBwbGV0LCByb290T2Jq
ZWN0LnJlbGVhc2UoKSk7CisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCldKSB7CisjaWYgIUVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgICAgIE5Q
T2JqZWN0KiBucE9iamVjdCA9IFt3aWRnZXRWaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmpl
Y3RdOworICAgICAgICBpZiAoIW5wT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IEluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3Vh
Z2VJbnN0YW5jZShJbnN0YW5jZTo6Q0xhbmd1YWdlLCBucE9iamVjdCwgcm9vdE9iamVjdC5yZWxl
YXNlKCkpOworICAgICAgICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5z
IGEgcmV0YWluZWQgTlBPYmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2Ug
aXQuCisgICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKKyNlbmRpZgogICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKKworICAgIGpv
YmplY3QgYXBwbGV0ID0gbG9hZGVyKCktPmNsaWVudCgpLT5qYXZhQXBwbGV0KHdpZGdldFZpZXcp
OworICAgIGlmICghYXBwbGV0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSW5zdGFu
Y2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNlKEluc3RhbmNlOjpKYXZhTGFuZ3Vh
Z2UsIGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwogfQogCiBXZWJTY3JpcHRPYmplY3Qq
IEZyYW1lOjp3aW5kb3dTY3JpcHRPYmplY3QoKQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29y
ZUZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbXBvcnQg
PENvY29hL0NvY29hLmg+CiAjaW1wb3J0IDxKYXZhVk0vam5pLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVLZXlib2FyZFVJTW9kZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+
CkBAIC0zNCwyOCArMzMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZy
YW1lOwotICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKLSAgICBjbGFzcyBQYWdlOwot
ICAgIGNsYXNzIFN0cmluZzsKIH0KIAogQGNsYXNzIERPTUNTU1N0eWxlRGVjbGFyYXRpb247CiBA
Y2xhc3MgRE9NRG9jdW1lbnQ7CiBAY2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKIEBjbGFzcyBE
T01FbGVtZW50OwotQGNsYXNzIERPTUhUTUxJbnB1dEVsZW1lbnQ7Ci1AY2xhc3MgRE9NSFRNTFRl
eHRBcmVhRWxlbWVudDsKIEBjbGFzcyBET01Ob2RlOwogQGNsYXNzIERPTVJhbmdlOwotQGNsYXNz
IE5TTWVudTsKIAogQHByb3RvY29sIFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyOwogCi1AcHJvdG9j
b2wgV2ViQ29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIDxOU09iamVjdD4KLS0gKHZvaWQpY2hv
b3NlRmlsZW5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWU7Ci0tICh2b2lkKWNhbmNlbDsKLUBlbmQK
LQogLy8gV2ViQ29yZUZyYW1lQnJpZGdlIG9iamVjdHMgYXJlIHVzZWQgYnkgV2ViQ29yZSB0byBh
YnN0cmFjdCBhd2F5IG9wZXJhdGlvbnMgdGhhdCBuZWVkCiAvLyB0byBiZSBpbXBsZW1lbnRlZCBi
eSBsaWJyYXJ5IGNsaWVudHMsIGZvciBleGFtcGxlIFdlYktpdC4gVGhlIG9iamVjdHMgYXJlIGFs
c28KIC8vIHVzZWQgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwgZm9yIHNpbXBsZSBhY2Nlc3Mg
dG8gV2ViQ29yZSBmdW5jdGlvbnMgd2l0aG91dCBkZWFsaW5nCkBAIC02NSw4ICs1Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlIFdlYkNvcmVGcmFtZUJyaWRnZSBpbnRlcmZhY2Ug
Y29udGFpbnMgbWV0aG9kcyBmb3IgdXNlIGJ5IHRoZSBub24tV2ViQ29yZSBzaWRlIG9mIHRoZSBi
cmlkZ2UuCiAKLUBpbnRlcmZhY2UgV2ViQ29yZUZyYW1lQnJpZGdlIDogTlNPYmplY3QKLXsKK0Bp
bnRlcmZhY2UgV2ViQ29yZUZyYW1lQnJpZGdlIDogTlNPYmplY3QgewogQHB1YmxpYwogICAgIFdl
YkNvcmU6OkZyYW1lKiBtX2ZyYW1lOwogICAgIEJPT0wgX3Nob3VsZENyZWF0ZVJlbmRlcmVyczsK
QEAgLTE4NywxMyArMTc0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLSAoTlNSZXNwb25kZXIg
KilmaXJzdFJlc3BvbmRlcjsKIC0gKHZvaWQpbWFrZUZpcnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRl
ciAqKXJlc3BvbmRlcjsKIAotLSAodm9pZClydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJl
c3VsdExpc3RlbmVyOihpZCA8V2ViQ29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRM
aXN0ZW5lcjsKLQotLSAoam9iamVjdClnZXRBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXc7Ci0K
LS8vIERlcHJlY2F0ZWQsIHVzZSBnZXRBcHBsZXRJblZpZXc6IGluc3RlYWQuCi0tIChqb2JqZWN0
KXBvbGxGb3JBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXc7Ci0KIC0gKHZvaWQpc2V0SXNTZWxl
Y3RlZDooQk9PTClpc1NlbGVjdGVkIGZvclZpZXc6KE5TVmlldyAqKXZpZXc7CiAKIC0gKHZvaWQp
d2lsbFBvcHVwTWVudTooTlNNZW51ICopbWVudTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDkwMCkKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MDgtMDMtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxpbWluYXRlIEphdmEgYXBwbGV0
IG1ldGhvZHMgZnJvbSBXZWJDb3JlRnJhbWVCcmlkZ2UKKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbTogUmVtb3ZlZCB1bm5lZWRlZCBoZWFkZXJzIGFuZCBkZWNs
YXJhdGlvbnMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06IERp
dHRvLiBBbHNvIHJlbW92ZWQgdW5uZWVkZWQgbWV0aG9kcywgaW5jbHVkaW5nCisgICAgICAgIHRo
ZSBvbmVzIHRoYXQgbG9hZCBKYXZhIGFwcGxldHMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuaDogQWRkZWQgamF2YUFwcGxldCBmdW5jdGlvbi4KKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbTogRGl0dG8uCisKIDIw
MDgtMDMtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFkZWxlLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHJldmlzaW9uIDMwOTAwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNp
bXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgogI2lt
cG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSmF2YVBsdWdJbi5oIgog
I2ltcG9ydCAiV2ViSGlzdG9yeUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgIldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgpAQCAtNjEsMTAgKzYw
LDYgQEAKIC0gKE5TVmlldyAqKV9maW5kTGFzdFZpZXdJbktleVZpZXdMb29wOwogQGVuZAogCi1A
aW50ZXJmYWNlIE5TVmlldyAoSmF2YVBsdWdpbkRldGFpbHMpCi0tIChqb2JqZWN0KXBvbGxGb3JB
cHBsZXRJbldpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7Ci1AZW5kCi0KIC8vIEZvciBjb21wYXRp
YmlsaXR5IHdpdGggb2xkIFNQSS4KIEBpbnRlcmZhY2UgTlNWaWV3IChPbGRXZWJLaXRQbHVnSW5E
ZXRhaWxzKQogLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQ7CkluZGV4OiBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMw
OTAwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsNiBAQAogLSAodm9pZClzZXRJc1NlbGVjdGVkOihC
T09MKWY7CiBAZW5kCiAKLUBpbnRlcmZhY2UgTlNWaWV3IChKYXZhUGx1Z2luU2VjcmV0cykKLS0g
KGpvYmplY3QpcG9sbEZvckFwcGxldEluV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdzsKLUBlbmQK
LQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgS2V5Ym9hcmRVSU1vZGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24gQCJjb20uYXBwbGUuS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2UiCkBA
IC0yODEsNDEgKzI3Nyw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIF9mcmFtZSA9
IG5pbDsKIH0KIAotLSAoam9iamVjdClnZXRBcHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXcKLXsK
LSAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5HZXRB
cHBsZXQpXSkKLSAgICAgICAgcmV0dXJuIFt2aWV3IHdlYlBsdWdJbkdldEFwcGxldF07Ci0gICAg
cmV0dXJuIFtzZWxmIHBvbGxGb3JBcHBsZXRJblZpZXc6dmlld107Ci19Ci0KLS8vIE5PVEU6IHBv
bGxGb3JBcHBsZXRJblZpZXc6IHdpbGwgYmxvY2sgdW50aWwgdGhlIGJsb2NrIGlzIHJlYWR5IHRv
IHVzZSwgb3IKLS8vIHVudGlsIGEgdGltZW91dCBpcyBleGNlZWRlZC4gIEl0IHdpbGwgcmV0dXJu
IG5pbCBpZiB0aGUgdGltZW91dCBpcwotLy8gZXhjZWVkZWQuCi0vLyBEZXByZWNhdGVkLCB1c2Ug
Z2V0QXBwbGV0SW5WaWV3Oi4KLS0gKGpvYmplY3QpcG9sbEZvckFwcGxldEluVmlldzooTlNWaWV3
ICopdmlldwotewotICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBv
bGxGb3JBcHBsZXRJbldpbmRvdzopXSkKLSAgICAgICAgLy8gVGhlIEphdmEgVk0gbmVlZHMgdGhl
IGNvbnRhaW5pbmcgd2luZG93IG9mIHRoZSB2aWV3IHRvCi0gICAgICAgIC8vIGluaXRpYWxpemUu
IFRoZSB2aWV3IG1heSBub3QgeWV0IGJlIGluIHRoZSB3aW5kb3cncyB2aWV3IAotICAgICAgICAv
LyBoaWVyYXJjaHksIHNvIHdlIGhhdmUgdG8gcGFzcyB0aGUgd2luZG93IHdoZW4gcmVxdWVzdGlu
ZwotICAgICAgICAvLyB0aGUgYXBwbGV0LgotICAgICAgICByZXR1cm4gW3ZpZXcgcG9sbEZvckFw
cGxldEluV2luZG93Oltbc2VsZiB3ZWJWaWV3XSB3aW5kb3ddXTsKLSAgICByZXR1cm4gMDsKLX0K
LQotLSAodm9pZClyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMKLXsKLSAgICBOU1ZpZXcgPFdlYkRv
Y3VtZW50Vmlldz4gKnZpZXcgPSBbW19mcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0g
ICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAg
IFsoV2ViSFRNTFZpZXcgKil2aWV3IF91cGRhdGVGb250UGFuZWxdOwotICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6W3NlbGYgd2ViVmlld11dOwotfQotCi0tIChOU1Vu
ZG9NYW5hZ2VyICopdW5kb01hbmFnZXIKLXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYlZpZXddIHVu
ZG9NYW5hZ2VyXTsKLX0KLQogLSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQg
Zm9yVmlldzooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlBsdWdJblNldElzU2VsZWN0ZWQ6KV0pCkluZGV4OiBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAz
MDkwMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTgsNiArMTk4LDggQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBs
aXN0ZW4pOwogCisgICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNWaWV3ICopOworCiAg
ICAgdm9pZCBkZWxpdmVyQXJjaGl2ZWRSZXNvdXJjZXNBZnRlckRlbGF5KCkgY29uc3Q7CiAgICAg
dm9pZCBkZWxpdmVyQXJjaGl2ZWRSZXNvdXJjZXMoV2ViQ29yZTo6VGltZXI8V2ViRnJhbWVMb2Fk
ZXJDbGllbnQ+Kik7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gMzA5MDApCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw3IEBACiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCiAjaW1wb3J0
ICJXZWJIaXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkljb25EYXRhYmFzZUludGVybmFs
LmgiCisjaW1wb3J0ICJXZWJKYXZhUGx1Z0luLmgiCiAjaW1wb3J0ICJXZWJLaXRFcnJvcnNQcml2
YXRlLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmlu
Z0V4dHJhcy5oIgpAQCAtMTEwLDcgKzExMSwxMCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotLy8gU1BJIGZvciBOU1VSTERvd25sb2FkCitAaW50ZXJmYWNlIE5TVmlldyAoV2ViSmF2
YVBsdWdpbkRldGFpbHMpCistIChqb2JqZWN0KXBvbGxGb3JBcHBsZXRJbldpbmRvdzooTlNXaW5k
b3cgKil3aW5kb3c7CitAZW5kCisKIC8vIE5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxMjE4
NTA+IAogQGludGVyZmFjZSBOU1VSTERvd25sb2FkIChXZWJOU1VSTERvd25sb2FkRGV0YWlscykK
IC0gKHZvaWQpX3NldE9yaWdpbmF0aW5nVVJMOihOU1VSTCAqKW9yaWdpbmF0aW5nVVJMOwpAQCAt
MTUwMyw2ICsxNTA3LDE5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFBlcmZvcm1G
aXIKICAgICAgICAgW3ByZWZlcmVuY2VzIHNldENhY2hlTW9kZWw6V2ViQ2FjaGVNb2RlbERvY3Vt
ZW50QnJvd3Nlcl07CiB9CiAKK2pvYmplY3QgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmphdmFBcHBs
ZXQoTlNWaWV3ICp2aWV3KQoreworICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlBsdWdJbkdldEFwcGxldCldKQorICAgICAgICByZXR1cm4gW3ZpZXcgd2ViUGx1
Z0luR2V0QXBwbGV0XTsKKworICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9u
cyBvZiBKYXZhLgorICAgIC8vIEZJWE1FOiBEbyB3ZSBzdGlsbCBuZWVkIHRoaXM/CisgICAgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocG9sbEZvckFwcGxldEluV2luZG93
OildKQorICAgICAgICByZXR1cm4gW3ZpZXcgcG9sbEZvckFwcGxldEluV2luZG93OltbbV93ZWJG
cmFtZS5nZXQoKSBmcmFtZVZpZXddIHdpbmRvd11dOworCisgICAgcmV0dXJuIDA7Cit9CisKIEBp
bXBsZW1lbnRhdGlvbiBXZWJGcmFtZVBvbGljeUxpc3RlbmVyCiAKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19610</attachid>
            <date>2008-03-08 07:29:35 -0800</date>
            <delta_ts>2008-03-10 10:38:52 -0700</delta_ts>
            <desc>patch that moves keyboard mode off the bridge</desc>
            <filename>KeyboardModePatch.txt</filename>
            <type>text/plain</type>
            <size>16242</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlIGtleWJvYXJkIFVJIG1vZGUgbWV0aG9kIGZyb20gV2ViQ29yZUZyYW1lQnJpZGdlCisK
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiBBZGRlZCBrZXlib2FyZFVJTW9kZSBmdW5j
dGlvbi4KKyAgICAgICAgKiBwYWdlL21hYy9DaHJvbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWVDbGllbnQ6OmtleWJvYXJkVUlNb2RlKTogRGl0dG8uCisgICAgICAgICogcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0
YWJzVG9BbGxDb250cm9scyk6IENhbGwgY2hyb21lIGNsaWVudCBmdW5jdGlvbiBpbnN0ZWFkCisg
ICAgICAgIG9mIGJyaWRnZSBmdW5jdGlvbi4KKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJh
bWVCcmlkZ2UuaDogUmVtb3ZlZCBrZXlib2FyZFVJTW9kZSBtZXRob2QsIGFuZCBvdGhlciB1bnVz
ZWQKKyAgICAgICAgb25lcy4KKwogMjAwOC0wMy0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUuCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEzIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLXR5cGVkZWYgY2xhc3MgX2pvYmplY3QqIGpvYmplY3Q7
CisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIldlYkNvcmVLZXlib2FyZFVJTW9kZS5oIgor
I2VuZGlmCiAKICNpZm5kZWYgX19PQkpDX18KIGNsYXNzIE5TTWVudTsKIGNsYXNzIE5TUmVzcG9u
ZGVyOwotY2xhc3MgTlNWaWV3OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEy
MywxNCArMTI0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAg
dmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7Ci0jZW5k
aWYKLQogICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUq
LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGxpbmVSZWN0LAogICAgICAgICAgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxp
bmUpOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBh
bmVsKFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KTsKKworICAgICAgICB2aXJ0dWFsIEtleWJvYXJk
VUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CisjZW5kaWYKKwogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50KCkgeyB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9tYWMvQ2hyb21lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21l
TWFjLm1tCShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw0ICs1Niw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5P
cGVuUGFuZWwoUGFzc1JlZlAKIHsKIH0KIAorS2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50Ojpr
ZXlib2FyZFVJTW9kZSgpCit7CisgICAgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHJldmlzaW9uIDMwOTAwKQorKysgV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKIAogI2luY2x1ZGUgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1hYy5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAgLTEwNSw3ICsxMDYsMTEgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaQogCiBib29sIEV2ZW50SGFu
ZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7Ci0g
ICAgS2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUgPSBbbV9mcmFtZS0+YnJpZGdlKCkga2V5
Ym9hcmRVSU1vZGVdOworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLZXlib2FyZFVJTW9kZSBrZXli
b2FyZFVJTW9kZSA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+a2V5Ym9hcmRVSU1vZGUoKTsK
ICAgICBib29sIGhhbmRsaW5nT3B0aW9uVGFiID0gaXNLZXlib2FyZE9wdGlvblRhYihldmVudCk7
CiAKICAgICAvLyBJZiB0YWItdG8tbGlua3MgaXMgb2ZmLCBvcHRpb24tdGFiIGFsd2F5cyBoaWdo
bGlnaHRzIGFsbCBjb250cm9scwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRn
ZS5oCShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDExICs1MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQHByb3RvY29sIFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyOwogCi1AcHJvdG9jb2wgV2Vi
Q29yZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIDxOU09iamVjdD4KLS0gKHZvaWQpY2hvb3NlRmls
ZW5hbWU6KE5TU3RyaW5nICopZmlsZU5hbWU7Ci0tICh2b2lkKWNhbmNlbDsKLUBlbmQKLQogLy8g
V2ViQ29yZUZyYW1lQnJpZGdlIG9iamVjdHMgYXJlIHVzZWQgYnkgV2ViQ29yZSB0byBhYnN0cmFj
dCBhd2F5IG9wZXJhdGlvbnMgdGhhdCBuZWVkCiAvLyB0byBiZSBpbXBsZW1lbnRlZCBieSBsaWJy
YXJ5IGNsaWVudHMsIGZvciBleGFtcGxlIFdlYktpdC4gVGhlIG9iamVjdHMgYXJlIGFsc28KIC8v
IHVzZWQgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiwgZm9yIHNpbXBsZSBhY2Nlc3MgdG8gV2Vi
Q29yZSBmdW5jdGlvbnMgd2l0aG91dCBkZWFsaW5nCkBAIC0xODcsOCArMTgyLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcjsKIC0gKHZvaWQp
bWFrZUZpcnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRlciAqKXJlc3BvbmRlcjsKIAotLSAodm9pZCly
dW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3RlbmVyOihpZCA8V2ViQ29yZU9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lcjsKLQogLSAoam9iamVjdClnZXRB
cHBsZXRJblZpZXc6KE5TVmlldyAqKXZpZXc7CiAKIC8vIERlcHJlY2F0ZWQsIHVzZSBnZXRBcHBs
ZXRJblZpZXc6IGluc3RlYWQuCkBAIC0xOTgsOCArMTkxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAtICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1lbnU7CiAKLS0gKFdlYkNvcmU6
OktleWJvYXJkVUlNb2RlKWtleWJvYXJkVUlNb2RlOwotCiBAZW5kCiAKIC8vIFRoaXMgaW50ZXJm
YWNlIGRlZmluaXRpb24gYWxsb3dzIHRob3NlIHdobyBob2xkIGEgV2ViQ29yZUZyYW1lQnJpZGdl
ICogdG8gY2FsbCBhbGwgdGhlIG1ldGhvZHMKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDkwMCkKKysrIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgt
MDMtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxpbWluYXRlIGtleWJvYXJkIFVJIG1v
ZGUgbWV0aG9kIGZyb20gV2ViQ29yZUZyYW1lQnJpZGdlCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkZWQga2V5Ym9hcmRVSU1vZGUgZnVuY3Rpb24uCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
Q2hyb21lQ2xpZW50OjprZXlib2FyZFVJTW9kZSk6IERpdHRvLiBDYWxscyBXZWJWaWV3LgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmg6IFJlbW92ZWQgdW51c2VkIHRo
aW5ncywgaW5jbHVkaW5nIHRoZQorICAgICAgICBmaWVsZHMgZm9yIGtleWJvYXJkIFVJIG1vZGUu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgt
W1dlYkZyYW1lQnJpZGdlIGRlYWxsb2NdKTogUmVtb3ZlZCB1bm5lZWRlZCBjb2RlOyBlbGltaW5h
dGVkIHRoZSBmaW5pCisgICAgICAgIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViRnJhbWVCcmlkZ2Ug
ZmluYWxpemVdKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOiBNb3ZlZCB0
aGUga2V5Ym9hcmQgbW9kZSBjb2RlIGluIGhlcmUuCisgICAgICAgICgtW1dlYlZpZXcgX2Nsb3Nl
XSk6IFJlbW92ZSBvYnNlcnZlciBmcm9tIHRoZSBkaXN0cmlidXRlZCBub3RpZmljYXRpb24KKyAg
ICAgICAgY2VudGVyIGFzIHdlbGwgYXMgdGhlIG5vcm1hbCBvbmUuCisgICAgICAgICgtW1dlYlZp
ZXcgX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6XSk6IEFkZGVkLiBDb2Rl
IG1vdmVkCisgICAgICAgIGhlcmUgZnJvbSB0aGUgYnJpZGdlLgorICAgICAgICAoLVtXZWJWaWV3
IF9rZXlib2FyZFVJTW9kZV0pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRl
cm5hbC5oOiBBZGRlZCBfa2V5Ym9hcmRVSU1vZGUgbWV0aG9kLgorCiAyMDA4LTAzLTA4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZS4K
SW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gMzA5MDApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGljOgogICAgICAgICBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgbGluZVJlY3QsCiAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsK
IAorICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsK
KwogcHJpdmF0ZToKICAgICBXZWJWaWV3ICptX3dlYlZpZXc7CiB9OwpJbmRleDogV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDMwOTAwKQor
KysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ5MSw2ICs0OTEsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5Q
YW5lbChQYXNzUgogICAgIFtsaXN0ZW5lciByZWxlYXNlXTsKIH0KIAorS2V5Ym9hcmRVSU1vZGUg
V2ViQ2hyb21lQ2xpZW50OjprZXlib2FyZFVJTW9kZSgpCit7CisgICAgcmV0dXJuIFttX3dlYlZp
ZXcgX2tleWJvYXJkVUlNb2RlXTsKK30KKwogQGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyCiAKIC0gKGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxlQ2hv
b3Nlcj4pY2hvb3NlcgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJy
aWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVC
cmlkZ2UuaAkocmV2aXNpb24gMzA5MDApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIxICszNiwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBAY2xhc3MgV2ViRnJhbWU7CiBAY2xhc3MgV2ViRnJhbWVWaWV3OwogCi1A
cHJvdG9jb2wgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7Ci0KIEBpbnRlcmZhY2UgV2ViRnJh
bWVCcmlkZ2UgOiBXZWJDb3JlRnJhbWVCcmlkZ2UgPFdlYkNvcmVGcmFtZUJyaWRnZT4gewogQHB1
YmxpYwogICAgIFdlYkZyYW1lICpfZnJhbWU7Ci0KLUBwcml2YXRlCi0gICAgV2ViQ29yZTo6S2V5
Ym9hcmRVSU1vZGUgX2tleWJvYXJkVUlNb2RlOwotICAgIEJPT0wgX2tleWJvYXJkVUlNb2RlQWNj
ZXNzZWQ7CiB9Ci0KIC0gKGlkKWluaXRNYWluRnJhbWVXaXRoUGFnZTooV2ViQ29yZTo6UGFnZSop
cGFnZSBmcmFtZU5hbWU6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdl
YkZyYW1lVmlldyAqKWZyYW1lVmlldzsKIC0gKGlkKWluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1l
bnQ6KFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50IGZyYW1lTmFt
ZTooY29uc3QgV2ViQ29yZTo6U3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICop
ZnJhbWVWaWV3OwogLSAodm9pZCljbG9zZTsKLQogLSAoV2ViRnJhbWUgKil3ZWJGcmFtZTsKLQog
QGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1t
CShyZXZpc2lvbiAzMDkwMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVC
cmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMCArMTA2LDYgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLSNkZWZpbmUgS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmlj
YXRpb24gQCJjb20uYXBwbGUuS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2UiCi0jZGVmaW5lIEFwcGxl
S2V5Ym9hcmRVSU1vZGUgQ0ZTVFIoIkFwcGxlS2V5Ym9hcmRVSU1vZGUiKQotI2RlZmluZSBVbml2
ZXJzYWxBY2Nlc3NEb21haW4gQ0ZTVFIoImNvbS5hcHBsZS51bml2ZXJzYWxhY2Nlc3MiKQotCiBA
aW1wbGVtZW50YXRpb24gV2ViRnJhbWVCcmlkZ2UKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgpAQCAtMTU3LDg4ICsxNTMsMjUgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgcmV0
dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZmluaQorLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgaWYg
KF9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7Ci0gICAgICAgIFtbTlNEaXN0cmlidXRlZE5vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKLSAgICAgICAgICAgIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpLZXlib2FyZFVJTW9kZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
XTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKLSAgICAg
ICAgICAgIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXZWJQcmVmZXJlbmNlc0NoYW5nZWROb3Rp
ZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgfQotCiAgICAgQVNTRVJUKF9mcmFtZSA9PSBuaWwp
OwogICAgIC0tV2ViQnJpZGdlQ291bnQ7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtf
ZnJhbWUgcmVsZWFzZV07Ci0gICAgCi0gICAgW3NlbGYgZmluaV07CiAgICAgW3N1cGVyIGRlYWxs
b2NdOwogfQogCiAtICh2b2lkKWZpbmFsaXplCiB7Ci0gICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7
Ci0gICAgW3NlbGYgZmluaV07CisgICAgQVNTRVJUKF9mcmFtZSA9PSBuaWwpOworICAgIC0tV2Vi
QnJpZGdlQ291bnQ7CiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KIAotLSAoV2ViUHJlZmVyZW5j
ZXMgKilfcHJlZmVyZW5jZXMKLXsKLSAgICByZXR1cm4gW1tzZWxmIHdlYlZpZXddIHByZWZlcmVu
Y2VzXTsKLX0KLQotLSAodm9pZClfcmV0cmlldmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXJlbmNl
czooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBDRlByZWZlcmVuY2VzQXBw
U3luY2hyb25pemUoVW5pdmVyc2FsQWNjZXNzRG9tYWluKTsKLQotICAgIEJvb2xlYW4ga2V5RXhp
c3RzQW5kSGFzVmFsaWRGb3JtYXQ7Ci0gICAgaW50IG1vZGUgPSBDRlByZWZlcmVuY2VzR2V0QXBw
SW50ZWdlclZhbHVlKEFwcGxlS2V5Ym9hcmRVSU1vZGUsIFVuaXZlcnNhbEFjY2Vzc0RvbWFpbiwg
JmtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KTsKLSAgICAKLSAgICAvLyBUaGUga2V5Ym9hcmQg
YWNjZXNzIG1vZGUgaXMgcmVwb3J0ZWQgYnkgdHdvIGJpdHM6Ci0gICAgLy8gQml0IDAgaXMgc2V0
IGlmIGZlYXR1cmUgaXMgb24KLSAgICAvLyBCaXQgMSBpcyBzZXQgaWYgZnVsbCBrZXlib2FyZCBh
Y2Nlc3Mgd29ya3MgZm9yIGFueSBjb250cm9sLCBub3QganVzdCB0ZXh0IGJveGVzIGFuZCBsaXN0
cwotICAgIC8vIFdlIHJlcXVpcmUgYm90aCBiaXRzIHRvIGJlIG9uLgotICAgIC8vIEkgZG8gbm90
IGtub3cgdGhhdCB3ZSB3b3VsZCBldmVyIGdldCBvbmUgYml0IG9uIGFuZCB0aGUgb3RoZXIgb2Zm
IHNpbmNlCi0gICAgLy8gY2hlY2tpbmcgdGhlIGNoZWNrYm94IGluIHN5c3RlbSBwcmVmZXJlbmNl
cyB3aGljaCBpcyBtYXJrZWQgYXMgIlR1cm4gb24gZnVsbCBrZXlib2FyZCBhY2Nlc3MiCi0gICAg
Ly8gdHVybnMgb24gYm90aCBiaXRzLgotICAgIF9rZXlib2FyZFVJTW9kZSA9IChtb2RlICYgMHgy
KSA/IEtleWJvYXJkQWNjZXNzRnVsbCA6IEtleWJvYXJkQWNjZXNzRGVmYXVsdDsKLSAgICAKLSAg
ICAvLyBjaGVjayBmb3IgdGFiYmluZyB0byBsaW5rcwotICAgIGlmIChbW3NlbGYgX3ByZWZlcmVu
Y2VzXSB0YWJzVG9MaW5rc10pCi0gICAgICAgIF9rZXlib2FyZFVJTW9kZSA9IChLZXlib2FyZFVJ
TW9kZSkoX2tleWJvYXJkVUlNb2RlIHwgS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyk7Ci19Ci0K
LS0gKEtleWJvYXJkVUlNb2RlKWtleWJvYXJkVUlNb2RlCi17Ci0gICAgaWYgKCFfa2V5Ym9hcmRV
SU1vZGVBY2Nlc3NlZCkgewotICAgICAgICBfa2V5Ym9hcmRVSU1vZGVBY2Nlc3NlZCA9IFlFUzsK
LSAgICAgICAgW3NlbGYgX3JldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6bmls
XTsKLSAgICAgICAgCi0gICAgICAgIFtbTlNEaXN0cmlidXRlZE5vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSAKLSAgICAgICAgICAgIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOikgCi0gICAgICAg
ICAgICBuYW1lOktleWJvYXJkVUlNb2RlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxd
OwotCi0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gCi0gICAg
ICAgICAgICBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfcmV0cmlldmVLZXli
b2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczopIAotICAgICAgICAgICAgICAgICAgIG5hbWU6V2Vi
UHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIH0KLSAgICBy
ZXR1cm4gX2tleWJvYXJkVUlNb2RlOwotfQotCiAtIChXZWJGcmFtZSAqKXdlYkZyYW1lCiB7CiAg
ICAgcmV0dXJuIF9mcmFtZTsKIH0KIAotLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopbWFpbkZyYW1l
Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwpOwotICAgIHJldHVybiBbW1tzZWxmIHdlYlZp
ZXddIG1haW5GcmFtZV0gX2JyaWRnZV07Ci19Ci0KIC0gKE5TUmVzcG9uZGVyICopZmlyc3RSZXNw
b25kZXIKIHsKICAgICBBU1NFUlQoX2ZyYW1lICE9IG5pbCk7CkBAIC0yNTgsMjIgKzE5MSw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIFt3ZWJWaWV3IF9wb3BQZXJmb3JtaW5nUHJv
Z3JhbW1hdGljRm9jdXNdOwogfQogCi0tICh2b2lkKXJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0b25X
aXRoUmVzdWx0TGlzdGVuZXI6KGlkPFdlYkNvcmVPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4pcmVz
dWx0TGlzdGVuZXIKLXsKLSAgICBXZWJWaWV3ICp3diA9IFtzZWxmIHdlYlZpZXddOwotICAgIFtb
d3YgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d3YgcnVuT3BlblBhbmVsRm9yRmlsZUJ1
dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjooaWQ8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+KXJl
c3VsdExpc3RlbmVyXTsKLX0KLQotLSAoV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKLXsKLSAg
ICBBU1NFUlQoX2ZyYW1lICE9IG5pbCk7Ci0gICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSA9
IFtfZnJhbWUgX2RhdGFTb3VyY2VdOwotCi0gICAgQVNTRVJUKGRhdGFTb3VyY2UgIT0gbmlsKTsK
LQotICAgIHJldHVybiBkYXRhU291cmNlOwotfQotCiAtICh2b2lkKWNsb3NlCiB7CiAgICAgW3N1
cGVyIGNsb3NlXTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAzMDkwMCkKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNiAr
MjYwLDEwIEBAIG1hY3JvKHlhbmtBbmRTZWxlY3QpIFwKICNkZWZpbmUgV2ViS2l0T3JpZ2luYWxU
b3BQcmludGluZ01hcmdpbktleSBAIldlYktpdE9yaWdpbmFsVG9wTWFyZ2luIgogI2RlZmluZSBX
ZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5IEAiV2ViS2l0T3JpZ2luYWxCb3R0
b21NYXJnaW4iCiAKKyNkZWZpbmUgS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
QCJjb20uYXBwbGUuS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2UiCisjZGVmaW5lIEFwcGxlS2V5Ym9h
cmRVSU1vZGUgQ0ZTVFIoIkFwcGxlS2V5Ym9hcmRVSU1vZGUiKQorI2RlZmluZSBVbml2ZXJzYWxB
Y2Nlc3NEb21haW4gQ0ZTVFIoImNvbS5hcHBsZS51bml2ZXJzYWxhY2Nlc3MiKQorCiBzdGF0aWMg
Qk9PTCBzX2RpZFNldENhY2hlTW9kZWw7CiBzdGF0aWMgV2ViQ2FjaGVNb2RlbCBzX2NhY2hlTW9k
ZWwgPSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI7CiAKQEAgLTI5Myw4ICsyOTcsNyBAQCBz
dGF0aWMgaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQgPSAwCiAtIChpZClpbml0V2l0aFRh
cmdldDooaWQpdGFyZ2V0IGRlZmF1bHRUYXJnZXQ6KGlkKWRlZmF1bHRUYXJnZXQgY2F0Y2hFeGNl
cHRpb25zOihCT09MKWNhdGNoRXhjZXB0aW9uczsKIEBlbmQKIAotQGludGVyZmFjZSBXZWJWaWV3
UHJpdmF0ZSA6IE5TT2JqZWN0Ci17CitAaW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmpl
Y3QgewogQHB1YmxpYwogICAgIFBhZ2UqIHBhZ2U7CiAgICAgCkBAIC0zNjQsNiArMzY3LDkgQEAg
c3RhdGljIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0gMAogICAgIFdlYlBsdWdpbkRh
dGFiYXNlICpwbHVnaW5EYXRhYmFzZTsKICAgICAKICAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcs
IFJldGFpblB0cjxpZD4gPiogaWRlbnRpZmllck1hcDsKKworICAgIEJPT0wgX2tleWJvYXJkVUlN
b2RlQWNjZXNzZWQ7CisgICAgS2V5Ym9hcmRVSU1vZGUgX2tleWJvYXJkVUlNb2RlOwogfQogQGVu
ZAogCkBAIC03MjAsNiArNzI2LDcgQEAgc3RhdGljIGJvb2wgZGVidWdXaWRnZXQgPSB0cnVlOwog
ICAgICAgICBfcHJpdmF0ZS0+aGFzU3BlbGxDaGVja2VyRG9jdW1lbnRUYWcgPSBOTzsKICAgICB9
CiAgICAgCisgICAgW1tOU0Rpc3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CiAKICAgICBbV2ViUHJlZmVyZW5jZXMg
X3JlbW92ZVJlZmVyZW5jZUZvcklkZW50aWZpZXI6W3NlbGYgcHJlZmVyZW5jZXNJZGVudGlmaWVy
XV07CkBAIC00MTg5LDYgKzQxOTYsNDUgQEAgc3RhdGljIE5TU3RyaW5nICpjcmVhdGVNYWNPU1hW
ZXJzaW9uU3RyaQogICAgICAgICBDRlJlbGVhc2Uoc2VsZik7CiB9CiAKKy0gKHZvaWQpX3JldHJp
ZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgQ0ZQcmVmZXJlbmNlc0FwcFN5bmNocm9uaXplKFVuaXZlcnNhbEFjY2Vz
c0RvbWFpbik7CisKKyAgICBCb29sZWFuIGtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0OworICAg
IGludCBtb2RlID0gQ0ZQcmVmZXJlbmNlc0dldEFwcEludGVnZXJWYWx1ZShBcHBsZUtleWJvYXJk
VUlNb2RlLCBVbml2ZXJzYWxBY2Nlc3NEb21haW4sICZrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1h
dCk7CisgICAgCisgICAgLy8gVGhlIGtleWJvYXJkIGFjY2VzcyBtb2RlIGlzIHJlcG9ydGVkIGJ5
IHR3byBiaXRzOgorICAgIC8vIEJpdCAwIGlzIHNldCBpZiBmZWF0dXJlIGlzIG9uCisgICAgLy8g
Qml0IDEgaXMgc2V0IGlmIGZ1bGwga2V5Ym9hcmQgYWNjZXNzIHdvcmtzIGZvciBhbnkgY29udHJv
bCwgbm90IGp1c3QgdGV4dCBib3hlcyBhbmQgbGlzdHMKKyAgICAvLyBXZSByZXF1aXJlIGJvdGgg
Yml0cyB0byBiZSBvbi4KKyAgICAvLyBJIGRvIG5vdCBrbm93IHRoYXQgd2Ugd291bGQgZXZlciBn
ZXQgb25lIGJpdCBvbiBhbmQgdGhlIG90aGVyIG9mZiBzaW5jZQorICAgIC8vIGNoZWNraW5nIHRo
ZSBjaGVja2JveCBpbiBzeXN0ZW0gcHJlZmVyZW5jZXMgd2hpY2ggaXMgbWFya2VkIGFzICJUdXJu
IG9uIGZ1bGwga2V5Ym9hcmQgYWNjZXNzIgorICAgIC8vIHR1cm5zIG9uIGJvdGggYml0cy4KKyAg
ICBfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlID0gKG1vZGUgJiAweDIpID8gS2V5Ym9hcmRBY2Nl
c3NGdWxsIDogS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OworICAgIAorICAgIC8vIGNoZWNrIGZvciB0
YWJiaW5nIHRvIGxpbmtzCisgICAgaWYgKFtfcHJpdmF0ZS0+cHJlZmVyZW5jZXMgdGFic1RvTGlu
a3NdKQorICAgICAgICBfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlID0gKEtleWJvYXJkVUlNb2Rl
KShfcHJpdmF0ZS0+X2tleWJvYXJkVUlNb2RlIHwgS2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyk7
Cit9CisKKy0gKEtleWJvYXJkVUlNb2RlKV9rZXlib2FyZFVJTW9kZQoreworICAgIGlmICghX3By
aXZhdGUtPl9rZXlib2FyZFVJTW9kZUFjY2Vzc2VkKSB7CisgICAgICAgIF9wcml2YXRlLT5fa2V5
Ym9hcmRVSU1vZGVBY2Nlc3NlZCA9IFlFUzsKKworICAgICAgICBbc2VsZiBfcmV0cmlldmVLZXli
b2FyZFVJTW9kZUZyb21QcmVmZXJlbmNlczpuaWxdOworICAgICAgICAKKyAgICAgICAgW1tOU0Rp
c3RyaWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIAorICAgICAgICAgICAg
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3JldHJpZXZlS2V5Ym9hcmRVSU1v
ZGVGcm9tUHJlZmVyZW5jZXM6KSAKKyAgICAgICAgICAgIG5hbWU6S2V5Ym9hcmRVSU1vZGVEaWRD
aGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisKKyAgICAgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSAKKyAgICAgICAgICAgIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKF9yZXRyaWV2ZUtleWJvYXJkVUlNb2RlRnJvbVByZWZlcmVuY2VzOikg
CisgICAgICAgICAgICBuYW1lOldlYlByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiBvYmpl
Y3Q6bmlsXTsKKyAgICB9CisgICAgcmV0dXJuIF9wcml2YXRlLT5fa2V5Ym9hcmRVSU1vZGU7Cit9
CisKIEBlbmQKIAogLy8gV2UgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBjYWxsIHRoZSBkZWxlZ2F0
ZXMgYW5kIGJsb2NrIGV4Y2VwdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDMwOTAwKQorKysgV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYs
MTcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotLy8gVGhpcyBoZWFkZXIgY29udGFpbnMgV2ViVmll
dyBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgV2ViIEtpdCwg
YnV0IGFyZSBuZWl0aGVyIFNQSSBub3IgQVBJLgorLy8gVGhpcyBoZWFkZXIgY29udGFpbnMgV2Vi
VmlldyBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiBXZWJLaXQsIGJ1
dCBhcmUgbmVpdGhlciBTUEkgbm9yIEFQSS4KIAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIK
ICNpbXBvcnQgIldlYlZpZXdQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgi
CiAKICNpZmRlZiBfX2NwbHVzcGx1cworI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlS2V5Ym9hcmRV
SU1vZGUuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIEtVUkw7CkBAIC02Myw2ICs2
Nyw3IEBAIHR5cGVkZWYgV2ViQ29yZTo6UGFnZSBXZWJDb3JlUGFnZTsKIEBpbnRlcmZhY2UgV2Vi
VmlldyAoV2ViVmlld0ludGVybmFsKQogI2lmZGVmIF9fY3BsdXNwbHVzCiAtIChXZWJDb3JlOjpT
dHJpbmcpX3VzZXJBZ2VudEZvclVSTDooY29uc3QgV2ViQ29yZTo6S1VSTCYpdXJsOworLSAoV2Vi
Q29yZTo6S2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlOwogI2VuZGlmCiBAZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19656</attachid>
            <date>2008-03-10 22:13:06 -0700</date>
            <delta_ts>2008-03-11 17:52:12 -0700</delta_ts>
            <desc>patch that removes the rest of the WebKit -&gt; WebCore bridge</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>28931</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDgtMDMtMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZWxp
bWluYXRlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgV2ViQ29yZUJyaWRnZSB1c2VkIGZvciBjYWxs
cyB0byBXZWJLaXQgZnJvbSBXZWJDb3JlCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5o
OiBBZGRlZCBuZXcgY2xpZW50IGZ1bmN0aW9ucyB0byByZXBsYWNlIGNhbGxzIHVwIHRvIFdlYktp
dAorICAgICAgICB0aGF0IHdlcmUgZm9ybWVybHkgaGFuZGxlZCBieSB0aGUgYnJpZGdlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZS5oOiBSZW1vdmVkIHVubmVlZGVkIGRlY2xhcmF0aW9ucy4gTW92
ZWQgZGVjbGFyYXRpb25zIG9mIHNjcmlwdC1zcGVjaWZpYworICAgICAgICBmdW5jdGlvbnMgdG8g
YSBTY3JpcHRDb250cm9sbGVyIHNlY3Rpb24uIFJlbW92ZWQgd2lsbFBvcHVwTWVudS4KKworICAg
ICAgICAqIHBhZ2UvbWFjL0Nocm9tZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6
Zm9jdXNOU1ZpZXcpOiBDaGFuZ2VkIHRvIGNhbGwgZmlyc3RSZXNwb25kZXIgYW5kIG1ha2VGaXJz
dFJlc3BvbmRlcgorICAgICAgICB2aWEgdGhlIGNsaWVudCBpbnN0ZWFkIG9mIHRoZSBicmlkZ2Uu
CisKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KTogQ2hhbmdlZCB0
byBjYWxsIGZpcnN0UmVzcG9uZGVyCisgICAgICAgIGFuZCBtYWtlRmlyc3RSZXNwb25kZXIgdmlh
IHRoZSBjaHJvbWUgY2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRnZS4KKworICAgICAgICAqIHBh
Z2UvbWFjL0ZyYW1lTWFjLm1tOiBSZW1vdmVkIHdpbGxQb3B1cE1lbnUuCisKKyAgICAgICAgKiBw
YWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZCBXZWJDb3JlRnJhbWVCcmlkZ2Ug
cHJvdG9jb2wgYW5kCisgICAgICAgIFN1YmNsYXNzUmVzcG9uc2liaWxpdHkgY2F0ZWdvcnkuIEFs
c28gcmVtb3ZlZCBzb21lIHVubmVlZGVkIGltcG9ydHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvUG9wdXBNZW51TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93KTog
Q2FsbCB3aWxsUG9wVXBNZW51IG9uIGNocm9tZSBjbGllbnQgaW5zdGVhZCBvZiBmcmFtZS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXQ6OnNldElzU2VsZWN0ZWQpOiBDYWxsIGZ1bmN0aW9ucyBkaXJlY3RseSBvbiB0aGUgdmll
dyByYXRoZXIgdGhhbgorICAgICAgICBjYWxsaW5nIHZpYSB0aGUgYnJpZGdlLgorCiAyMDA4LTAz
LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAtIHRyeSB0byBm
aXggUXQgYnVpbGQKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDMwOTUwKQorKysgV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5l
bChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAKICAgICAgICAgdmlydHVhbCBLZXlib2FyZFVJ
TW9kZSBrZXlib2FyZFVJTW9kZSgpIHsgcmV0dXJuIEtleWJvYXJkQWNjZXNzRGVmYXVsdDsgfQor
CisgICAgICAgIHZpcnR1YWwgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyKCkgeyByZXR1cm4g
MDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVzcG9uZGVyKE5TUmVzcG9uZGVy
ICopIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUG9wVXBNZW51KE5TTWVudSAqKSB7
IH0KICNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDMwOTUwKQorKysg
V2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiAgKiAg
ICAgICAgICAgICAgICAgICAgIDIwMDAtMjAwMSBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2Rl
Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMC0yMDAxIERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgogICogICAgICAgICAgICAgICAgICAgICAyMDAwIFN0ZWZhbiBTY2hpbWFu
c2tpIDwxU3RlaW5AZ214LmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI4
LDIxICsyOCwxNSBAQAogI2lmbmRlZiBGcmFtZV9oCiAjZGVmaW5lIEZyYW1lX2gKIAotI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkRyYWdJbWFn
ZS5oIgorI2luY2x1ZGUgIkVkaXRBY3Rpb24uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5o
IgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogc3RydWN0IE5QT2JqZWN0OwogCiBuYW1l
c3BhY2UgS0pTIHsKIAotICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogCiAgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKQEAgLTU0LDE3ICs0OCwxMSBAQCBu
YW1lc3BhY2UgS0pTIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwotQGNs
YXNzIE5TQXJyYXk7Ci1AY2xhc3MgTlNEaWN0aW9uYXJ5OwotQGNsYXNzIE5TTWVudTsKLUBjbGFz
cyBOU011dGFibGVEaWN0aW9uYXJ5OwotQGNsYXNzIE5TU3RyaW5nOwogQGNsYXNzIFdlYkNvcmVG
cmFtZUJyaWRnZTsKIEBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiAjZWxzZQogY2xhc3MgTlNBcnJh
eTsKIGNsYXNzIE5TRGljdGlvbmFyeTsKLWNsYXNzIE5TTWVudTsKIGNsYXNzIE5TTXV0YWJsZURp
Y3Rpb25hcnk7CiBjbGFzcyBOU1N0cmluZzsKIGNsYXNzIFdlYkNvcmVGcmFtZUJyaWRnZTsKQEAg
LTc1LDQxICs2MywyMCBAQCB0eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNzIENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OwotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIERv
Y3VtZW50OwogY2xhc3MgRWRpdG9yOwotY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50SGFuZGxl
cjsKLWNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZyYW1lTG9hZGVyOwogY2xhc3MgRnJhbWVMb2Fk
ZXJDbGllbnQ7CiBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBjbGFzcyBIVE1MVGFibGVD
ZWxsRWxlbWVudDsKLWNsYXNzIEZyYW1lUHJpdmF0ZTsKIGNsYXNzIEZyYW1lVHJlZTsKLWNsYXNz
IEZyYW1lVmlldzsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBLSlNQcm94eTsKLWNsYXNzIEtVUkw7Ci1jbGFzcyBO
b2RlOwotY2xhc3MgUGFnZTsKLWNsYXNzIFBsdWdpbkRhdGE7Ci1jbGFzcyBSYW5nZTsKIGNsYXNz
IFJlZ3VsYXJFeHByZXNzaW9uOwogY2xhc3MgUmVuZGVyUGFydDsKIGNsYXNzIFNlbGVjdGlvbjsK
IGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBTZXR0aW5nczsKIGNsYXNzIFdpZGdl
dDsKIAotc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7Ci0KIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBUaW1lcjsKIAogY2xhc3MgRnJhbWUgOiBwdWJsaWMgUmVmQ291bnRlZDxGcmFtZT4gewpA
QCAtMTQxLDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxl
Y3Rpb25Db250cm9sbGVyKCkgY29uc3Q7CiAgICAgRnJhbWVUcmVlKiB0cmVlKCkgY29uc3Q7CiAg
ICAgQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0OworICAg
IEtKU1Byb3h5KiBzY3JpcHRQcm94eSgpOwogCiAgICAgLy8gRklYTUU6IFJlbmFtZSB0byBjb250
ZW50UmVuZGVyZXIgYW5kIGNoYW5nZSB0eXBlIHRvIFJlbmRlclZpZXcuCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcigpIGNvbnN0OyAvLyByb290IHJlbmRlcmVyIGZvciB0aGUgZG9jdW1lbnQg
Y29udGFpbmVkIGluIHRoaXMgZnJhbWUKQEAgLTE3MywyMyArMTQxLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGNhbmNlbEFsbEtlZXBBbGl2ZSgpOwogI2VuZGlmCiAKLSAgICBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogY3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7
Ci0gICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogYmluZGluZ1Jvb3RPYmplY3QoKTsKLSAg
ICAKLSAgICBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RP
YmplY3Qodm9pZCogbmF0aXZlSGFuZGxlLCBLSlM6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgV2ViU2NyaXB0T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QoKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0jZW5kaWYgICAgCi0gICAgCiAgICAgdm9pZCBzZXRE
b2N1bWVudChQYXNzUmVmUHRyPERvY3VtZW50Pik7CiAKLSAgICBLSlNQcm94eSogc2NyaXB0UHJv
eHkoKTsKLQogICAgIHZvaWQgY2xlYXJUaW1lcnMoKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhclRp
bWVycyhGcmFtZVZpZXcqKTsKIApAQCAtMjEzLDYgKzE2NiwyMiBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQoVGltZXI8RnJhbWU+Kik7CiAgICAgCisvLyA9PT0g
dG8gYmUgbW92ZWQgaW50byBTY3JpcHRDb250cm9sbGVyCisKK3B1YmxpYzoKKyAgICBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogY3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7
CisgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogYmluZGluZ1Jvb3RPYmplY3QoKTsKKwor
ICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVj
dCh2b2lkKiBuYXRpdmVIYW5kbGUsIEtKUzo6SlNHbG9iYWxPYmplY3QqKTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBXZWJTY3JpcHRPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCgpOworI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBOUE9iamVjdCogd2lu
ZG93U2NyaXB0TlBPYmplY3QoKTsKKyNlbmRpZiAgICAKKwogLy8gPT09IHRvIGJlIG1vdmVkIGlu
dG8gRG9jdW1lbnQKIAogcHVibGljOgpAQCAtMzYxLDggKzMzMCw2IEBAIHB1YmxpYzoKIAogICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkqIGRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5KCk7CiAKLSAg
ICB2b2lkIHdpbGxQb3B1cE1lbnUoTlNNZW51Kik7Ci0KICAgICBOU0ltYWdlKiBzZWxlY3Rpb25J
bWFnZShib29sIGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpIGNvbnN0OwogICAgIE5TSW1hZ2UqIHNu
YXBzaG90RHJhZ0ltYWdlKE5vZGUqLCBOU1JlY3QqIGltYWdlUmVjdCwgTlNSZWN0KiBlbGVtZW50
UmVjdCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1tCShyZXZpc2lvbiAzMDk1MCkK
KysrIFdlYkNvcmUvcGFnZS9tYWMvQ2hyb21lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4
ICsyMyw3IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ2hyb21l
Q2xpZW50LmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAi
RmlsZUNob29zZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMiwyMiArMzEsMjEg
QEAgdm9pZCBDaHJvbWU6OmZvY3VzTlNWaWV3KE5TVmlldyogdmlldykKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKmJyaWRnZSA9
IG1fcGFnZS0+bWFpbkZyYW1lKCktPmJyaWRnZSgpOwotICAgIE5TUmVzcG9uZGVyICpmaXJzdFJl
c3BvbmRlciA9IFticmlkZ2UgZmlyc3RSZXNwb25kZXJdOworICAgIE5TUmVzcG9uZGVyICpmaXJz
dFJlc3BvbmRlciA9IGNsaWVudCgpLT5maXJzdFJlc3BvbmRlcigpOwogICAgIGlmIChmaXJzdFJl
c3BvbmRlciA9PSB2aWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIVt2aWV3IHdpbmRv
d10gfHwgIVt2aWV3IHN1cGVydmlld10gfHwgIVt2aWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0p
CiAgICAgICAgIHJldHVybjsKIAotICAgIFticmlkZ2UgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXdd
OworICAgIGNsaWVudCgpLT5tYWtlRmlyc3RSZXNwb25kZXIodmlldyk7CiAKICAgICAvLyBTZXR0
aW5nIGZvY3VzIGNhbiBhY3R1YWxseSBjYXVzZSBhIHN0eWxlIGNoYW5nZSB3aGljaCBtaWdodAog
ICAgIC8vIHJlbW92ZSB0aGUgdmlldyBmcm9tIGl0cyBzdXBlcnZpZXcgd2hpbGUgaXQncyBiZWlu
ZyBtYWRlCiAgICAgLy8gZmlyc3QgcmVzcG9uZGVyLiBUaGlzIGNvbmZ1c2VzIEFwcEtpdCBzbyB3
ZSBtdXN0IHJlc3RvcmUKICAgICAvLyB0aGUgb2xkIGZpcnN0IHJlc3BvbmRlci4KICAgICBpZiAo
IVt2aWV3IHN1cGVydmlld10pCi0gICAgICAgIFticmlkZ2UgbWFrZUZpcnN0UmVzcG9uZGVyOmZp
cnN0UmVzcG9uZGVyXTsKKyAgICAgICAgY2xpZW50KCktPm1ha2VGaXJzdFJlc3BvbmRlcihmaXJz
dFJlc3BvbmRlcik7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQpJbmRleDog
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDMwOTUwKQorKysgV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYkNvcmVGcmFtZUJy
aWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTI0MywxMSArMjQyLDE1IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1cKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIAotICAgIGlmIChbbV9mcmFtZS0+YnJpZGdlKCkgZmlyc3RSZXNwb25k
ZXJdICE9IHZpZXcpIHsKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlm
ICghcGFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5maXJzdFJlc3BvbmRlcigpICE9IHZpZXcpIHsKICAgICAgICAgLy8gTm9ybWFs
bHkgW05TV2luZG93IHNlbmRFdmVudDpdIGhhbmRsZXMgc2V0dGluZyB0aGUgZmlyc3QgcmVzcG9u
ZGVyLgogICAgICAgICAvLyBCdXQgaW4gb3VyIGNhc2UsIHRoZSBldmVudCB3YXMgc2VudCB0byB0
aGUgdmlldyByZXByZXNlbnRpbmcgdGhlIGVudGlyZSB3ZWIgcGFnZS4KICAgICAgICAgaWYgKFtj
dXJyZW50RXZlbnQoKS5nZXQoKSBjbGlja0NvdW50XSA8PSAxICYmIFt2aWV3IGFjY2VwdHNGaXJz
dFJlc3BvbmRlcl0gJiYgW3ZpZXcgbmVlZHNQYW5lbFRvQmVjb21lS2V5XSkKLSAgICAgICAgICAg
IFttX2ZyYW1lLT5icmlkZ2UoKSBtYWtlRmlyc3RSZXNwb25kZXI6dmlld107CisgICAgICAgICAg
ICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1ha2VGaXJzdFJlc3BvbmRlcih2aWV3KTsKICAg
ICB9CiAKICAgICAvLyBXZSBuZWVkIHRvICJkZWZlciBsb2FkaW5nIiB3aGlsZSB0cmFja2luZyB0
aGUgbW91c2UsIGJlY2F1c2UgdGVhcmluZyBkb3duIHRoZQpAQCAtMjU3LDkgKzI2MCw5IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1cKICAgICAvLyBtb3VzZS4gV2Ug
c2hvdWxkIGNvbmZpcm0gdGhhdCwgYW5kIHRoZW4gcmVtb3ZlIHRoZSBkZWZlcnJzTG9hZGluZwog
ICAgIC8vIGhhY2sgZW50aXJlbHkuCiAgICAgCi0gICAgYm9vbCB3YXNEZWZlcnJpbmdMb2FkaW5n
ID0gbV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCk7CisgICAgYm9vbCB3YXNEZWZlcnJp
bmdMb2FkaW5nID0gcGFnZS0+ZGVmZXJzTG9hZGluZygpOwogICAgIGlmICghd2FzRGVmZXJyaW5n
TG9hZGluZykKLSAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZXREZWZlcnNMb2FkaW5nKHRydWUp
OworICAgICAgICBwYWdlLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwogCiAgICAgQVNTRVJUKCFt
X3NlbmRpbmdFdmVudFRvU3Vidmlldyk7CiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0
cnVlOwpAQCAtMjY3LDcgKzI3MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3du
RXZlbnRUb1cKICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNlOwogICAgIAogICAg
IGlmICghd2FzRGVmZXJyaW5nTG9hZGluZykKLSAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZXRE
ZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxz
ZSk7CiAKICAgICAvLyBSZW1lbWJlciB3aGljaCB2aWV3IHdlIHNlbnQgdGhlIGV2ZW50IHRvLCBz
byB3ZSBjYW4gZGlyZWN0IHRoZSByZWxlYXNlIGV2ZW50IHByb3Blcmx5LgogICAgIG1fbW91c2VE
b3duVmlldyA9IHZpZXc7CkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0JKHJldmlzaW9uIDMwOTUwKQor
KysgV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTU1LDEx
ICs1NTUsNiBAQCBOU011dGFibGVEaWN0aW9uYXJ5KiBGcmFtZTo6ZGFzaGJvYXJkUmVnCiAgICAg
cmV0dXJuIHdlYlJlZ2lvbnM7CiB9CiAKLXZvaWQgRnJhbWU6OndpbGxQb3B1cE1lbnUoTlNNZW51
ICogbWVudSkKLXsKLSAgICBbZC0+bV9icmlkZ2Ugd2lsbFBvcHVwTWVudTptZW51XTsKLX0KLQog
RHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKSAKIHsKICAgICBpZiAo
IXNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNSYW5nZSgpKQpJbmRleDogV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE4ICsyMywxMCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2ltcG9ydCA8SmF2YVZNL2puaS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdEFj
dGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dEFmZmlu
aXR5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci19Ci0KIEBjbGFzcyBET01DU1NTdHlsZURlY2xh
cmF0aW9uOwogQGNsYXNzIERPTURvY3VtZW50OwogQGNsYXNzIERPTURvY3VtZW50RnJhZ21lbnQ7
CkBAIC00Miw3ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEBjbGFzcyBET01Ob2RlOwog
QGNsYXNzIERPTVJhbmdlOwogCi1AcHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXI7CitA
cHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXIgPE5TT2JqZWN0PgorLSAoTlNPYmplY3Qg
Kilub2RlV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBwb3NpdGlvbjooTlNQb2ludClwb3NpdGlv
biByZWN0OihOU1JlY3QpcmVjdCB2aWV3OihOU1ZpZXcgKil2aWV3IGNoaWxkcmVuOihOU0FycmF5
ICopY2hpbGRyZW47CitAZW5kCiAKIC8vIFdlYkNvcmVGcmFtZUJyaWRnZSBvYmplY3RzIGFyZSB1
c2VkIGJ5IFdlYkNvcmUgdG8gYWJzdHJhY3QgYXdheSBvcGVyYXRpb25zIHRoYXQgbmVlZAogLy8g
dG8gYmUgaW1wbGVtZW50ZWQgYnkgbGlicmFyeSBjbGllbnRzLCBmb3IgZXhhbXBsZSBXZWJLaXQu
IFRoZSBvYmplY3RzIGFyZSBhbHNvCkBAIC0xNjYsMjkgKzE2MCwzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC0gKHZvaWQpcmVjZWl2ZWREYXRhOihOU0RhdGEgKilkYXRhIHRleHRFbmNvZGluZ05h
bWU6KE5TU3RyaW5nICopdGV4dEVuY29kaW5nTmFtZTsKIAogQGVuZAotCi0vLyBUaGUgV2ViQ29y
ZUZyYW1lQnJpZGdlIHByb3RvY29sIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHVzZSBieSB0aGUgV2Vi
Q29yZSBzaWRlIG9mIHRoZSBicmlkZ2UuCi0KLUBwcm90b2NvbCBXZWJDb3JlRnJhbWVCcmlkZ2UK
LQotLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcjsKLS0gKHZvaWQpbWFrZUZpcnN0UmVz
cG9uZGVyOihOU1Jlc3BvbmRlciAqKXJlc3BvbmRlcjsKLQotLSAodm9pZClzZXRJc1NlbGVjdGVk
OihCT09MKWlzU2VsZWN0ZWQgZm9yVmlldzooTlNWaWV3ICopdmlldzsKLQotLSAodm9pZCl3aWxs
UG9wdXBNZW51OihOU01lbnUgKiltZW51OwotCi1AZW5kCi0KLS8vIFRoaXMgaW50ZXJmYWNlIGRl
ZmluaXRpb24gYWxsb3dzIHRob3NlIHdobyBob2xkIGEgV2ViQ29yZUZyYW1lQnJpZGdlICogdG8g
Y2FsbCBhbGwgdGhlIG1ldGhvZHMKLS8vIGluIHRoZSBXZWJDb3JlRnJhbWVCcmlkZ2UgcHJvdG9j
b2wgd2l0aG91dCByZXF1aXJpbmcgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gdG8gc3VwcGx5IHRo
ZSBtZXRob2RzLgotLy8gVGhpcyBpZGlvbSBpcyBhcHByb3ByaWF0ZSBiZWNhdXNlIFdlYkNvcmVG
cmFtZUJyaWRnZSBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KLQotQGludGVyZmFjZSBXZWJDb3JlRnJh
bWVCcmlkZ2UgKFN1YmNsYXNzUmVzcG9uc2liaWxpdHkpIDxXZWJDb3JlRnJhbWVCcmlkZ2U+Ci1A
ZW5kCi0KLS8vIFByb3RvY29scyB0aGF0IG1ha2UgdXAgcGFydCBvZiB0aGUgaW50ZXJmYWNlcyBh
Ym92ZS4KLQotQHByb3RvY29sIFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyIDxOU09iamVjdD4KLS0g
KE5TT2JqZWN0ICopbm9kZVdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgcG9zaXRpb246KE5TUG9p
bnQpcCByZWN0OihOU1JlY3QpcmVjdCB2aWV3OihOU1ZpZXcgKil2aWV3IGNoaWxkcmVuOihOU0Fy
cmF5ICopY2hpbGRyZW47Ci1AZW5kCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1l
bnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFj
Lm1tCShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDE0ICsyMCwxNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQb3B1cE1lbnUuaCIK
IAorI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJFdmVudEhhbmRsZXIuaCIKLSNp
bXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJh
bWVWaWV3LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxPcHRHcm91cEVs
ZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiU2ltcGxlRm9udERhdGEu
aCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMTUxLDcgKzE1Myw4IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmIHIsIEYKICAgICBbdmlldyBhZGRTdWJ2aWV3OmR1bW15Vmlldy5nZXQoKV07CiAgICAgbG9j
YXRpb24gPSBbZHVtbXlWaWV3LmdldCgpIGNvbnZlcnRQb2ludDpsb2NhdGlvbiBmcm9tVmlldzp2
aWV3XTsKICAgICAKLSAgICBmcmFtZS0+d2lsbFBvcHVwTWVudShtZW51KTsKKyAgICBpZiAoUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+d2lsbFBvcFVwTWVudShtZW51KTsKICAgICB3a1BvcHVwTWVudShtZW51LCBsb2NhdGlvbiwg
cm91bmRmKE5TV2lkdGgocikpLCBkdW1teVZpZXcuZ2V0KCksIGluZGV4LCBmb250KTsKIAogICAg
IFttX3BvcHVwLmdldCgpIGRpc21pc3NQb3BVcF07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0
TWFjLm1tCShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NCwxNiArMzQsMjAgQEAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiUGFn
ZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJh
bWVCcmlkZ2UuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkNv
cmVWaWV3LmgiCiAjaW1wb3J0ICJXaWRnZXRDbGllbnQuaCIKIAogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCi1AaW50ZXJmYWNlIE5TV2luZG93IChXaW5kb3dQcml2YXRlKQotLSAoQk9PTCkg
X25lZWRzVG9SZXNldERyYWdNYXJnaW5zOwotLSAodm9pZCkgX3NldE5lZWRzVG9SZXNldERyYWdN
YXJnaW5zOihCT09MKXM7CitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJXaW5kb3dEZXRhaWxzKQor
LSAoQk9PTClfbmVlZHNUb1Jlc2V0RHJhZ01hcmdpbnM7CistICh2b2lkKV9zZXROZWVkc1RvUmVz
ZXREcmFnTWFyZ2luczooQk9PTCluZWVkczsKK0BlbmQKKworQGludGVyZmFjZSBOU1ZpZXcgKFdl
YlNldFNlbGVjdGVkTWV0aG9kcykKKy0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1NlbGVj
dGVkOworLSAodm9pZCl3ZWJQbHVnSW5TZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQ7CiBA
ZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIzNSwxMSArMjM5LDE1IEBAIHZvaWQgV2lk
Z2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWMKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi0vLyBGSVhNRTogU2hvdWxkIG1vdmUgdGhpcyB0byBDaHJvbWU7IGJhZCBs
YXllcmluZyB0aGF0IHRoaXMga25vd3MgYWJvdXQgRnJhbWUuCiB2b2lkIFdpZGdldDo6c2V0SXNT
ZWxlY3RlZChib29sIGlzU2VsZWN0ZWQpCiB7Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IEZyYW1l
OjpmcmFtZUZvcldpZGdldCh0aGlzKSkKLSAgICAgICAgW2ZyYW1lLT5icmlkZ2UoKSBzZXRJc1Nl
bGVjdGVkOmlzU2VsZWN0ZWQgZm9yVmlldzpnZXRWaWV3KCldOworICAgIE5TVmlldyAqdmlldyA9
IGdldFZpZXcoKTsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgaWYgKFt2
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU2V0SXNTZWxlY3RlZDop
XSkKKyAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU2V0SXNTZWxlY3RlZDppc1NlbGVjdGVkXTsKKyAg
ICBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldElzU2VsZWN0
ZWQ6KV0pCisgICAgICAgIFt2aWV3IHNldElzU2VsZWN0ZWQ6aXNTZWxlY3RlZF07CisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogdm9pZCBXaWRnZXQ6OmFkZFRvU3VwZXJ2aWV3
KE5TVmlldyAqdmlldykKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDgtMDMtMTAgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gZWxpbWluYXRlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgV2Vi
Q29yZUJyaWRnZSB1c2VkIGZvciBjYWxscyB0byBXZWJLaXQgZnJvbSBXZWJDb3JlCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDogQWRkZWQgbmV3IHZpcnR1YWwg
ZnVuY3Rpb25zIHRoYXQgcmVwbGFjZQorICAgICAgICBicmlkZ2UgbWV0aG9kcy4KKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06IEFkZGVkIGxvdHMgb2YgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgICAgIHRvIHJlY2VudGx5LWNyZWF0ZWQgZnVuY3Rp
b25zLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpmaXJzdFJlc3BvbmRlcik6IE1vdmVkIGNv
ZGUgaGVyZSBmcm9tIHRoZSBicmlkZ2UuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1ha2VG
aXJzdFJlc3BvbmRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpydW5PcGVu
UGFuZWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d2lsbFBvcFVwTWVudSk6
IERpdHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaDogUmVt
b3ZlZCBhbG1vc3QgZXZlcnl0aGluZy4gV2hhdCdzIGxlZnQKKyAgICAgICAgaXMgcmVsYXRlZCB0
byBjcmVhdGluZyB0aGUgYnJpZGdlIGFuZCBjb25uZWN0aW5nIGl0IHRvIFdlYkNvcmUsIHdoaWNo
IHdpbGwKKyAgICAgICAgZ28gbmV4dCB3aGVuIEkgZWxpbWluYXRlIHVzZSBvZiB0aGUgYnJpZGdl
IHRvIGdldCB0by9mcm9tIHRoZSBGcmFtZSouCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkZyYW1lQnJpZGdlIGNsb3NlXSk6IE1vdmVk
IHRoZSBjb2RlIHRvIHRyYWNrIHRoZSBicmlkZ2UgY291bnQgaGVyZQorICAgICAgICBpbnN0ZWFk
IG9mIHRoZSBkZWFsbG9jIGFuZCBmaW5hbGl6ZSBtZXRob2RzLgorCiAyMDA4LTAzLTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0uCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlz
aW9uIDMwOTUwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CiAKKyAgICB2aXJ0
dWFsIE5TUmVzcG9uZGVyICpmaXJzdFJlc3BvbmRlcigpOworICAgIHZpcnR1YWwgdm9pZCBtYWtl
Rmlyc3RSZXNwb25kZXIoTlNSZXNwb25kZXIgKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBv
cFVwTWVudShOU01lbnUgKik7CisKIHByaXZhdGU6CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3Owog
fTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
CShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW1wb3J0ICJXZWJI
aXN0b3J5SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2lt
cG9ydCAiV2ViTlNVUkxSZXF1ZXN0RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJQbHVnaW4uaCIKICNp
bXBvcnQgIldlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdh
dGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3LmgiCkBAIC01NiwxMiArNTcsMTIgQEAKICNp
bXBvcnQgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKLUBpbnRlcmZhY2UgTlNWaWV3IChOU1ZpZXdEZXRhaWxzKQorQGludGVyZmFjZSBOU1Zp
ZXcgKFdlYk5TVmlld0RldGFpbHMpCiAtIChOU1ZpZXcgKilfZmluZExhc3RWaWV3SW5LZXlWaWV3
TG9vcDsKIEBlbmQKIAogLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgU1BJLgotQGludGVy
ZmFjZSBOU1ZpZXcgKE9sZFdlYktpdFBsdWdJbkRldGFpbHMpCitAaW50ZXJmYWNlIE5TVmlldyAo
V2ViT2xkV2ViS2l0UGx1Z0luRGV0YWlscykKIC0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClp
c1NlbGVjdGVkOwogQGVuZAogCkBAIC00MjgsNiArNDI5LDggQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnByaW50KEZyYW1lKiBmcmFtZQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWRE
YXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCiAgICAgV2ViU2VjdXJpdHlPcmln
aW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNv
cmVTZWN1cml0eU9yaWdpbjpmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKV07CiAg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdvcmthcm91bmQgb25jZSBzaGlwcGluZyBTYWZhcmkg
aGFzIHRoZSBuZWNlc3NhcnkgZGVsZWdhdGUgaW1wbGVtZW50ZWQuCiAgICAgaWYgKFdLQXBwVmVy
c2lvbkNoZWNrTGVzc1RoYW4oQCJjb20uYXBwbGUuU2FmYXJpIiwgLTEsIDMuMSkpIHsKQEAgLTQz
NiwyMyArNDM5LDMzIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXUK
ICAgICB9IGVsc2UKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Io
d2ViVmlldzpmcmFtZTpleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRh
YmFzZTopLCBraXQoZnJhbWUpLCB3ZWJPcmlnaW4sIChOU1N0cmluZyAqKWRhdGFiYXNlTmFtZSk7
CiAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiB9CiAgICAgCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3Mo
KQogeworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbW1dlYkhpc3Rvcnkg
b3B0aW9uYWxTaGFyZWRIaXN0b3J5XSBfYWRkVmlzaXRlZExpbmtzVG9QYWdlR3JvdXA6W21fd2Vi
VmlldyBwYWdlXS0+Z3JvdXAoKV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0K
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkKIHsKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpyZWdpb25zID0gY29yZShbbV93ZWJWaWV3IG1haW5GcmFtZV0pLT5kYXNoYm9hcmRSZWdpb25z
RGljdGlvbmFyeSgpOwogICAgIFttX3dlYlZpZXcgX2FkZFNjcm9sbGVyRGFzaGJvYXJkUmVnaW9u
czpyZWdpb25zXTsKIAogICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdl
YlZpZXc6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQ6KSwgcmVnaW9ucyk7CisKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogfQogCiBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0
b21IaWdobGlnaHRSZWN0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBsaW5lUmVjdCkKIHsKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisKICAgICBOU1ZpZXcgKmRvY3VtZW50VmlldyA9IFtba2l0KG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCkpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBpZiAoIVtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIE5T
WmVyb1JlY3Q7CkBAIC00NjIsMTEgKzQ3NSwxNyBAQCBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50
OjpjdXN0b21IaWdobGlnCiAgICAgaWYgKFsoTlNPYmplY3QgKiloaWdobGlnaHRlciByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGhpZ2hsaWdodFJlY3RGb3JMaW5lOnJlcHJlc2VudGVkTm9k
ZTopXSkKICAgICAgICAgcmV0dXJuIFtoaWdobGlnaHRlciBoaWdobGlnaHRSZWN0Rm9yTGluZTps
aW5lUmVjdCByZXByZXNlbnRlZE5vZGU6a2l0KG5vZGUpXTsKICAgICByZXR1cm4gW2hpZ2hsaWdo
dGVyIGhpZ2hsaWdodFJlY3RGb3JMaW5lOmxpbmVSZWN0XTsKKworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gTlNaZXJvUmVjdDsKIH0KIAogdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxp
bmVSZWN0LAogICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKQogeworICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwogICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0g
W1traXQobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwogICAgIGlmICghW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFz
c11dKQogICAgICAgICByZXR1cm47CkBAIC00NzcsMTggKzQ5Niw0OSBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnCiAgICAgICAgIFtoaWdobGlnaHRlciBwYWludEhp
Z2hsaWdodEZvckJveDpib3hSZWN0IG9uTGluZTpsaW5lUmVjdCBiZWhpbmRUZXh0OmJlaGluZFRl
eHQgZW50aXJlTGluZTplbnRpcmVMaW5lIHJlcHJlc2VudGVkTm9kZTpraXQobm9kZSldOwogICAg
IGVsc2UKICAgICAgICAgW2hpZ2hsaWdodGVyIHBhaW50SGlnaGxpZ2h0Rm9yQm94OmJveFJlY3Qg
b25MaW5lOmxpbmVSZWN0IGJlaGluZFRleHQ6YmVoaW5kVGV4dCBlbnRpcmVMaW5lOmVudGlyZUxp
bmVdOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyKQog
eworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBXZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lciAqbGlzdGVuZXIgPSBbW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIGFsbG9j
XSBpbml0V2l0aENob29zZXI6Y2hvb3Nlcl07CiAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3
LCBAc2VsZWN0b3Iod2ViVmlldzpydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExp
c3RlbmVyOiksIGxpc3RlbmVyKTsKICAgICBbbGlzdGVuZXIgcmVsZWFzZV07CisgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAogS2V5Ym9hcmRVSU1vZGUgV2ViQ2hyb21lQ2xpZW50
OjprZXlib2FyZFVJTW9kZSgpCiB7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
ICAgIHJldHVybiBbbV93ZWJWaWV3IF9rZXlib2FyZFVJTW9kZV07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0OworfQorCitO
U1Jlc3BvbmRlciAqV2ViQ2hyb21lQ2xpZW50OjpmaXJzdFJlc3BvbmRlcigpCit7CisgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIHJldHVybiBbW21fd2ViVmlldyBfVUlEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZpcnN0UmVzcG9uZGVyOm1fd2ViVmlld107CisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICByZXR1cm4gbmlsOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6bWFrZUZpcnN0UmVzcG9uZGVyKE5TUmVzcG9uZGVyICpyZXNwb25kZXIpCit7
CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIFttX3dlYlZpZXcgX3B1c2hQ
ZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdOworICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBtYWtlRmlyc3RSZXNwb25kZXI6cmVzcG9uZGVy
XTsKKyAgICBbbV93ZWJWaWV3IF9wb3BQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp3
aWxsUG9wVXBNZW51KE5TTWVudSAqbWVudSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CisgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzp3
aWxsUG9wdXBNZW51OiksIG1lbnUpOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9
CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMzA5NTAp
CisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQGNsYXNzIFdlYkZy
YW1lOwogQGNsYXNzIFdlYkZyYW1lVmlldzsKIAotQGludGVyZmFjZSBXZWJGcmFtZUJyaWRnZSA6
IFdlYkNvcmVGcmFtZUJyaWRnZSA8V2ViQ29yZUZyYW1lQnJpZGdlPiB7CitAaW50ZXJmYWNlIFdl
YkZyYW1lQnJpZGdlIDogV2ViQ29yZUZyYW1lQnJpZGdlIHsKIEBwdWJsaWMKICAgICBXZWJGcmFt
ZSAqX2ZyYW1lOwogfQpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJy
aWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
QnJpZGdlLm1tCShyZXZpc2lvbiAzMDk1MCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDk4ICsyOCwxOSBAQAogCiAj
aW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogCi0jaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3Qu
aCIKLSNpbXBvcnQgIldlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYkJh
c2VQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYkRlZmF1bHRVSURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJFZGl0aW5nRGVsZWdh
dGUuaCIKLSNpbXBvcnQgIldlYkZvcm1EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRl
cm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVMb2FkRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkZy
YW1lTG9hZGVyQ2xpZW50LmgiCi0jaW1wb3J0ICJXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIgotI2lt
cG9ydCAiV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSFRNTFZp
ZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2ltcG9y
dCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJKYXZhUGx1Z0luLmgiCi0j
aW1wb3J0ICJXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwuaCIKLSNpbXBvcnQgIldlYktpdEVy
cm9yc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYktp
dE5TU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJLaXRQbHVnaW5Db250YWluZXJWaWV3Lmgi
CiAjaW1wb3J0ICJXZWJLaXRTdGF0aXN0aWNzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViS2l0U3lz
dGVtQml0cy5oIgotI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzLmgiCi0jaW1wb3J0ICJX
ZWJOU09iamVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQg
IldlYk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldy5oIgotI2ltcG9ydCAiV2ViTmV0
c2NhcGVQbHVnaW5QYWNrYWdlLmgiCi0jaW1wb3J0ICJXZWJOdWxsUGx1Z2luVmlldy5oIgotI2lt
cG9ydCAiV2ViUGx1Z2luLmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCi0jaW1w
b3J0ICJXZWJQbHVnaW5EYXRhYmFzZS5oIgotI2ltcG9ydCAiV2ViUGx1Z2luUGFja2FnZS5oIgot
I2ltcG9ydCAiV2ViUGx1Z2luVmlld0ZhY3RvcnlQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJQcmVm
ZXJlbmNlc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0ZS5oIgotI2ltcG9y
dCAiV2ViU2NyaXB0RGVidWdTZXJ2ZXJQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJVSURlbGVnYXRl
UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0IDxGb3VuZGF0
aW9uL05TVVJMQ29ubmVjdGlvbi5oPgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFJlcXVlc3Qu
aD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXNwb25zZS5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9vYmplY3QuaD4KLSNpbXBvcnQgPEphdmFWTS9qbmku
aD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2FjaGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RHJhZ0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CisjaW1wb3J0ICJXZWJWaWV3LmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
VHJlZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9TdWJyZXNvdXJjZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlT2JqQ0V4dHJhcy5oPgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0j
aW1wb3J0IDx3dGYvUmVmUHRyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnku
aD4KLQotLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgU1BJLiAKLUBpbnRlcmZhY2UgTlNW
aWV3IChPbGRXZWJQbHVnaW4pCi0tICh2b2lkKXNldElzU2VsZWN0ZWQ6KEJPT0wpZjsKLUBlbmQK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZUJy
aWRnZQogCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0rICh2b2lkKWluaXRpYWxpemUKLXsK
LSAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwotfQotI2VuZGlmCi0K
LS0gKFdlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIHJldHVybiBraXQobV9mcmFtZS0+cGFnZSgpKTsKLX0KLQotLSAo
dm9pZClmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1l
VmlldyBvd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50Cist
ICh2b2lkKWZpbmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZToo
Y29uc3QgU3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3IG93
bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1lbnQKIHsKICAgICAr
K1dlYkJyaWRnZUNvdW50OwogCkBAIC0xMzEsODAgKzUyLDM3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogICAgIG1fZnJhbWUtPnNldEJyaWRnZShzZWxmKTsKICAgICBtX2ZyYW1lLT50cmVl
KCktPnNldE5hbWUobmFtZSk7CiAgICAgbV9mcmFtZS0+aW5pdCgpOwotICAgIAorCiAgICAgW3Nl
bGYgc2V0VGV4dFNpemVNdWx0aXBsaWVyOlt3ZWJWaWV3IHRleHRTaXplTXVsdGlwbGllcl1dOwog
fQogCi0tIChpZClpbml0TWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihj
b25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFt
ZVZpZXcKKy0gKGlkKWluaXRNYWluRnJhbWVXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6
KGNvbnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldwog
ewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgW3NlbGYgZmluaXNoSW5pdGlhbGl6aW5n
V2l0aFBhZ2U6cGFnZSBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6ZnJhbWVWaWV3IG93bmVyRWxl
bWVudDowXTsKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoaWQpaW5pdFN1YmZyYW1lV2l0aE93
bmVyRWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1lbnQgZnJhbWVOYW1l
Oihjb25zdCBXZWJDb3JlOjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilm
cmFtZVZpZXcKKy0gKGlkKWluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6KEhUTUxGcmFtZU93
bmVyRWxlbWVudCopb3duZXJFbGVtZW50IGZyYW1lTmFtZTooY29uc3QgU3RyaW5nJiluYW1lIGZy
YW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CiB7CiAgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKICAgICBbc2VsZiBmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTpvd25lckVsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCktPnBhZ2UoKSBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6ZnJh
bWVWaWV3IG93bmVyRWxlbWVudDpvd25lckVsZW1lbnRdOwogICAgIHJldHVybiBzZWxmOwogfQog
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQoX2ZyYW1lID09IG5pbCk7Ci0gICAgLS1X
ZWJCcmlkZ2VDb3VudDsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxp
emUKLXsKLSAgICBBU1NFUlQoX2ZyYW1lID09IG5pbCk7Ci0gICAgLS1XZWJCcmlkZ2VDb3VudDsK
LSAgICBbc3VwZXIgZmluYWxpemVdOwotfQotCiAtIChXZWJGcmFtZSAqKXdlYkZyYW1lCiB7CiAg
ICAgcmV0dXJuIF9mcmFtZTsKIH0KIAotLSAoTlNSZXNwb25kZXIgKilmaXJzdFJlc3BvbmRlcgot
ewotICAgIEFTU0VSVChfZnJhbWUgIT0gbmlsKTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3Nl
bGYgd2ViVmlld107Ci0gICAgcmV0dXJuIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlld0ZpcnN0UmVzcG9uZGVyOndlYlZpZXddOwotfQotCi0tICh2b2lkKW1ha2VGaXJzdFJl
c3BvbmRlcjooTlNSZXNwb25kZXIgKil2aWV3Ci17Ci0gICAgQVNTRVJUKF9mcmFtZSAhPSBuaWwp
OwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICBBU1NFUlQoW3Zp
ZXcgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0pOwotICAgIEFTU0VSVChbKE5TVmlldyAq
KXZpZXcgd2luZG93XSk7Ci0gICAgQVNTRVJUKFsoTlNWaWV3ICopdmlldyB3aW5kb3ddID09IFt3
ZWJWaWV3IHdpbmRvd10pOwotICAgIFt3ZWJWaWV3IF9wdXNoUGVyZm9ybWluZ1Byb2dyYW1tYXRp
Y0ZvY3VzXTsKLSAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBtYWtlRmlyc3RSZXNwb25kZXI6dmlld107Ci0gICAgW3dlYlZpZXcgX3BvcFBlcmZvcm1p
bmdQcm9ncmFtbWF0aWNGb2N1c107Ci19Ci0KIC0gKHZvaWQpY2xvc2UKIHsKICAgICBbc3VwZXIg
Y2xvc2VdOworICAgIGlmICghX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgLS1XZWJCcmlk
Z2VDb3VudDsKICAgICBbX2ZyYW1lIHJlbGVhc2VdOwogICAgIF9mcmFtZSA9IG5pbDsKIH0KIAot
LSAodm9pZClzZXRJc1NlbGVjdGVkOihCT09MKWlzU2VsZWN0ZWQgZm9yVmlldzooTlNWaWV3ICop
dmlldwotewotICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBs
dWdJblNldElzU2VsZWN0ZWQ6KV0pCi0gICAgICAgIFt2aWV3IHdlYlBsdWdJblNldElzU2VsZWN0
ZWQ6aXNTZWxlY3RlZF07Ci0gICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihzZXRJc1NlbGVjdGVkOildKQotICAgICAgICBbdmlldyBzZXRJc1NlbGVjdGVkOmlz
U2VsZWN0ZWRdOwotfQotCi0tICh2b2lkKXdpbGxQb3B1cE1lbnU6KE5TTWVudSAqKW1lbnUKLXsK
LSAgICBDYWxsVUlEZWxlZ2F0ZShbc2VsZiB3ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6d2ls
bFBvcHVwTWVudTopLCBtZW51KTsKLX0KLQogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19674</attachid>
            <date>2008-03-11 12:34:43 -0700</date>
            <delta_ts>2008-03-11 14:34:59 -0700</delta_ts>
            <desc>patch that removes use of the bridge to go from an NSView to a WebCore::Frame</desc>
            <filename>WebCoreNSViewPatch.txt</filename>
            <type>text/plain</type>
            <size>75418</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDA4LTAzLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHNp
bXBsaWZ5IE1hYyBjb2RlIGZvciBTY3JvbGxWaWV3LCBzaW5jZSBpdCdzIHVzZWQgb25seSBmb3Ig
RnJhbWVWaWV3CisgICAgICAgICAgYW5kIG5vdCBpbiB0d28gZGlmZmVyZW50IG1vZGVzIGxpa2Ug
aXQgd2FzIGhpc3RvcmljYWxseQorICAgICAgICAtIHJlbW92ZSBjb2RlIGRlcGVuZGluZyBvbiB0
aGUgYnJpZGdlIHRvIGdldCBmcm9tIGFuIE5TVmlldyB0byBhIFdlYkNvcmU6OkZyYW1lCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxJbnB1
dEVsZW1lbnQgX3JlY3RPblNjcmVlbl0pOiBnZXREb2N1bWVudFZpZXcgLT4gZG9jdW1lbnRWaWV3
LgorCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QuY3BwOgorICAgICAgICAoY3Jl
YXRlUm9vdE9iamVjdCk6IEluc3RlYWQgb2YgdXNpbmcgV2ViQ29yZVZpZXdGYWN0b3J5IHRvIGZp
bmQgdGhlIGZyYW1lIGdpdmVuCisgICAgICAgIGFuZCBOU1ZpZXcsIHVzZSB0aGUgV2ViQ29yZUZy
YW1lVmlldyBpbnRlcmZhY2UgdG8gZG8gaXQuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKTogZ2V0RG9jdW1lbnRW
aWV3IC0+IGRvY3VtZW50Vmlldy4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250
cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSk6IERpdHRvLgorCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDogRml4ZWQgY29tbWVudC4KKworICAgICAgICAqIHBhZ2UvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkcmF3Tm9kZUhpZ2hsaWdodCk6IFJlbW92ZWQgdW5lZWRlZCB0eXBlY2FzdHMKKyAgICAgICAg
dG8gU2Nyb2xsVmlldyogc2luY2UgRnJhbWVWaWV3IGlzIGRlcml2ZWQgZnJvbSBTY3JvbGxWaWV3
LgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmlldyk6IGdldERvY3VtZW50VmlldyAt
PiBkb2N1bWVudFZpZXcuCisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6aW1hZ2VGcm9tUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uv
bWFjL1dlYkNvcmVBWE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViQ29yZUFYT2JqZWN0IHBvc2l0
aW9uXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlQVhPYmplY3QgZG9BWFRleHRNYXJrZXJG
b3JQb3NpdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVBWE9iamVjdCByZW5kZXJl
ckZvclZpZXc6XSk6IFVwZGF0ZWQgY29kZSB0aGF0IHVzZWQgdG8gdXNlCisgICAgICAgIFdlYkNv
cmVCcmlkZ2VIb2xkZXIgdG8gdXNlIFdlYkNvcmVGcmFtZVZpZXcgaW5zdGVhZC4KKworICAgICAg
ICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZy
YW1lQnJpZGdlIGNvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnByaW50
SGVpZ2h0Ol0pOgorICAgICAgICBnZXREb2N1bWVudFZpZXcgLT4gZG9jdW1lbnRWaWV3LgorCisg
ICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lVmlldy5oOiBSZW1vdmVkIHRoZSBXZWJDb3Jl
U2Nyb2xsYmFyTW9kZSB0eXBlOyB3ZSBqdXN0CisgICAgICAgIHVzZSBXZWJDb3JlOjpTY3JvbGxi
YXJNb2RlIGRpcmVjdGx5LiBSZW5hbWVkIHRoZSBXZWJDb3JlRnJhbWVWaWV3IHByb3RvY29sIHRv
CisgICAgICAgIFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcsIHNpbmNlIGl0J3MgYSBwcm90b2NvbCBm
b3IgdGhlIHNjcm9sbCB2aWV3LCBub3QgdGhlCisgICAgICAgIGZyYW1lIHZpZXcgaXRzZWxmLiBS
ZXBsYWNlZCBXZWJDb3JlQnJpZGdlSG9sZGVyIHByb3RvY29sIHdpdGggV2ViQ29yZUZyYW1lVmll
dworICAgICAgICBwcm90b2NvbCwgd2hpY2ggcmV0dXJucyBhIFdlYkNvcmU6OkZyYW1lIGRpcmVj
dGx5IHJhdGhlciB0aGFuIGEgYnJpZGdlLgorCisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZVZp
ZXdGYWN0b3J5Lmg6IEVsaW1pbmF0ZWQgdGhlIGJyaWRnZUZvclZpZXcgbWV0aG9kLgorCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBNb3ZlZCB0aGUgY29uc3RydWN0b3IgYW5kIGRl
c3RydWN0b3Igb3V0IG9mIHRoZQorICAgICAgICBjbGFzcy1zcGVjaWZpYyAjaWYgYmxvY2tzLiBS
ZW5hbWVkIE1hYy1zcGVjaWZpYyBmdW5jdGlvbiB0aGF0IGdldHMgdGhlCisgICAgICAgIE5TVmll
dyBmb3IgZnJvbSBnZXREb2N1bWVudFZpZXcgdG8gZG9jdW1lbnRWaWV3IGFuZCBhIHNjcm9sbFZp
ZXcgZnVuY3Rpb24KKyAgICAgICAgdGhhdCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlbHkgY2xhc3Nl
ZCBOU1Njcm9sbFZpZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oOiBDaGFuZ2VkIHR5cGUgb2YgcGFyZW50V2lkZ2V0IHRvIEZyYW1lVmlldworICAgICAgICBp
bnN0ZWFkIG9mIFdpZGdldC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmNyZWF0ZVFUTW92aWVWaWV3KTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYXN0LgorCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudTo6c2hvdyk6IGdldERvY3VtZW50VmlldyAtPiBkb2N1bWVudFZpZXcuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpTY3JvbGxWaWV3KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojp+U2Nyb2xsVmlldyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsVmlldyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZVdp
ZHRoKTogUmVtb3ZlZCB1bnVzZWQgbm9uLU5TU2Nyb2xsVmlldyBjYXNlLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RDb25zaWRlcmluZ0V4dGVybmFsU2Ny
b2xsZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1dp
ZHRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c0hlaWdo
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNYKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJzaXZlbHkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRWU2Nyb2xsYmFyTW9kZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0SFNjcm9sbGJhck1vZGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp2U2Nyb2xsYmFyTW9kZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnN1cHByZXNzU2Nyb2xsYmFycyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6YWRkQ2hpbGQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6ZG9jdW1lbnRWaWV3KTogUmVuYW1lZCBhbmQgcmVt
b3ZlZCB1bnVzZWQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbGJh
clVuZGVyTW91c2UpOiBSZW1vdmVkIGluY29ycmVjdCBjb21tZW50LgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Z2V0T3V0
ZXJWaWV3KTogVXBkYXRlIGZvciBwcm90b2NvbCBuYW1lIGNoYW5nZS4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludENoZWNrYm94KTogZ2V0RG9jdW1lbnRWaWV3IC0+IGRvY3VtZW50Vmlldy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOiBEaXR0by4K
KwogMjAwOC0wMy0xMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgIGlmICghW3NlbGYgX0hUTUxJbnB1
dEVsZW1lbnRdLT5kb2N1bWVudCgpLT52aWV3KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LSAgICBOU1ZpZXcqIHZpZXcgPSBbc2VsZiBfSFRNTElucHV0RWxlbWVudF0tPmRvY3VtZW50KCkt
PnZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCk7CisgICAgTlNWaWV3KiB2aWV3ID0gW3NlbGYgX0hU
TUxJbnB1dEVsZW1lbnRdLT5kb2N1bWVudCgpLT52aWV3KCktPmRvY3VtZW50VmlldygpOwogICAg
IHJlc3VsdCA9IFt2aWV3IGNvbnZlcnRSZWN0OnJlc3VsdCB0b1ZpZXc6bmlsXTsKICAgICByZXN1
bHQub3JpZ2luID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpyZXN1bHQub3Jp
Z2luXTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9q
c29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5jcHAJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMTggKzIyLDE3IEBACiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJqbmlfanNvYmplY3QuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZVZpZXdGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgImpuaV9ydW50aW1lLmgiCiAjaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRl
ICJranNfcHJveHkuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUgPGtqcy9KU0dsb2JhbE9iamVj
dC5oPgogI2luY2x1ZGUgPGtqcy9pbnRlcnByZXRlci5oPgpAQCAtNDM5LDEyICs0MzgsMTYgQEAg
dm9pZCBKYXZhSlNPYmplY3Q6OmZpbmFsaXplKCkgY29uc3QKIAogc3RhdGljIFBhc3NSZWZQdHI8
Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUpCiB7Ci0gICAg
TlNWaWV3ICp2aWV3ID0gKE5TVmlldyAqKW5hdGl2ZUhhbmRsZTsKLSAgICBXZWJDb3JlRnJhbWVC
cmlkZ2UgKmJyaWRnZSA9IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGJyaWRn
ZUZvclZpZXc6dmlld107Ci0gICAgaWYgKCFicmlkZ2UpCisgICAgRnJhbWUqIGZyYW1lID0gMDsK
KyAgICBmb3IgKE5TVmlldyAqdmlldyA9IChOU1ZpZXcgKiluYXRpdmVIYW5kbGU7IHZpZXc7IHZp
ZXcgPSBbdmlldyBzdXBlcnZpZXddKSB7CisgICAgICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJv
dG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgeworICAgICAgICAgICAgTlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+ICp3ZWJDb3JlRnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8TlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+Kj4odmlldyk7CisgICAgICAgICAgICBmcmFtZSA9IFt3ZWJDb3Jl
RnJhbWVWaWV3IF93ZWJfZnJhbWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgRnJhbWUq
IGZyYW1lID0gW2JyaWRnZSBfZnJhbWVdOwogICAgIHJldHVybiBmcmFtZS0+Y3JlYXRlUm9vdE9i
amVjdChuYXRpdmVIYW5kbGUsIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysr
IFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKCkKICAgICAgICAgcmV0dXJuOwogICAgIERv
Y0xvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCk7CiAgICAg
bG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKHRydWUpOwotICAgIFt2aWV3LT5nZXREb2N1
bWVudFZpZXcoKSB0cnlUb1BlcmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0aDpuaWxdOworICAg
IFt2aWV3LT5kb2N1bWVudFZpZXcoKSB0cnlUb1BlcmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0
aDpuaWxdOwogICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9s
bGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIKICAgICAgICAgICAgIEludFJlY3Qgc2VsZWN0aW9u
UmVjdCA9IGNhcmV0UmVjdCgpOwogICAgICAgICAgICAgSW50UmVjdCB2aWV3UmVjdCA9IHJlbmRl
clZpZXctPnZpZXdSZWN0KCk7CiAgICAgICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHJl
bmRlclZpZXctPnZpZXcoKS0+ZnJhbWVWaWV3KCk7IAotICAgICAgICAgICAgTlNWaWV3ICp2aWV3
ID0gZnJhbWVWaWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICAgICAgICAgIE5TVmlldyAqdmll
dyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgICAgICAgICBpZiAodmlldykgewog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9jYXRpb24oZnJhbWVWaWV3LT5jb252
ZXJ0VG9TY3JlZW5Db29yZGluYXRlKHZpZXcsIHNlbGVjdGlvblJlY3QubG9jYXRpb24oKSkpOwog
ICAgICAgICAgICAgICAgIHZpZXdSZWN0LnNldExvY2F0aW9uKGZyYW1lVmlldy0+Y29udmVydFRv
U2NyZWVuQ29vcmRpbmF0ZSh2aWV3LCB2aWV3UmVjdC5sb2NhdGlvbigpKSk7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFdpZGdldFRv
VXBkYXRlKFJlbmRlclBhcnRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZVdpZGdldFRvVXBkYXRl
KFJlbmRlclBhcnRPYmplY3QqKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQg
YmUgdXNlZCBieSBhbGwgcGxhdGZvcm1zLCBidXQgY3VycmVudGx5IGRlcGVuZHMgb24gU2Nyb2xs
Vmlldzo6Y2hpbGRyZW4sCi0gICAgLy8gd2hpY2ggbm90IGFsbCBtZXRob2RzIGhhdmUuIE9uY2Ug
RnJhbWVWaWV3IGFuZCBTY3JvbGxWaWV3IGFyZSBtZXJnZWQsIHRoaXMgI2lmIHNob3VsZCBiZSBy
ZW1vdmVkLgorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IGFs
bCBwbGF0Zm9ybXMsIGJ1dCBjdXJyZW50bHkgZGVwZW5kcyBvbiBTY3JvbGxWaWV3OjpjaGlsZHJl
biwKKyAgICAvLyB3aGljaCBub3QgYWxsIHBsYXRmb3JtcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBh
bmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlzICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNp
ZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAgICAgdm9p
ZCBsYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyMCw3ICsxNjIwLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaQogICAgICAgICByZWN0cy5h
cHBlbmQobm9kZVJlY3QpOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBvdmVybGF5UmVjdCA9IHN0YXRp
Y19jYXN0PFNjcm9sbFZpZXcqPih2aWV3KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgRmxv
YXRSZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAKICAgICBp
ZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKG5vZGVSZWN0KSAmJiAhbm9kZVJlY3QuY29udGFpbnMo
ZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQ7CkBAIC0xNjI5LDcgKzE2MjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdO
b2RlSGlnaGxpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9oaWdobGlnaHRlZE5vZGUtPnBhcmVudCgpKTsKICAgICAgICAgZWxlbWVu
dC0+c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgICAgICBvdmVybGF5UmVjdCA9IHN0YXRp
Y19jYXN0PFNjcm9sbFZpZXcqPih2aWV3KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgfQogCiAgICAg
Y29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMzA5NjMpCisrKyBX
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZy
YW1lQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTc5LDEwICsxNzgsMTEg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJh
bWUtPnZpZXcoKSkKLSAgICAgICAgaWYgKE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gZnJhbWVWaWV3
LT5nZXREb2N1bWVudFZpZXcoKSkKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2Zy
YW1lLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gZnJhbWVW
aWV3LT5kb2N1bWVudFZpZXcoKSkKICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1c05T
Vmlldyhkb2N1bWVudFZpZXcpOwotICAgIAorICAgIH0KKwogICAgIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQkocmV2aXNpb24gMzA5NjMpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgTlNTdHJpbmcqIEZyYW1lOjptYXRjaExh
YmVsc0FnYWluc3RFbGVtZQogCiBOU0ltYWdlKiBGcmFtZTo6aW1hZ2VGcm9tUmVjdChOU1JlY3Qg
cmVjdCkgY29uc3QKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBkLT5tX3ZpZXctPmdldERvY3VtZW50
VmlldygpOworICAgIE5TVmlldyogdmlldyA9IGQtPm1fdmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAg
ICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIGlmICghW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihkcmF3U2luZ2xlUmVjdDopXSkKSW5kZXg6IFdlYkNvcmUv
cGFnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZUFYT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBACiAj
aW1wb3J0ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2Uu
aCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0
cmFzLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKQEAgLTc0NSw3ICs3NDQsNyBA
QCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqCiAgICAgLy8gVGhlIENv
Y29hIGFjY2Vzc2liaWxpdHkgQVBJIHdhbnRzIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KICAgICBO
U1BvaW50IHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpOwogICAg
IGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPnZpZXcoKSAmJiBtX3JlbmRlcmVyLT52aWV3
KCktPmZyYW1lVmlldygpKSB7Ci0gICAgICAgIE5TVmlldyogdmlldyA9IG1fcmVuZGVyZXItPnZp
ZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpOworICAgICAgICBOU1ZpZXcqIHZp
ZXcgPSBtX3JlbmRlcmVyLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKTsKICAg
ICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOiBbdmlldyBj
b252ZXJ0UG9pbnQ6IHBvaW50IHRvVmlldzpuaWxdXTsKICAgICB9CiAKQEAgLTEzOTYsMTEgKzEz
OTUsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZQogICAgIHJl
dHVybiBbcmVzdWx0U3RyaW5nIGxlbmd0aF0gPiAwID8gcmVzdWx0U3RyaW5nIDogbmlsOwogfQog
Ci0tIChpZClkb0FYVGV4dE1hcmtlckZvclBvc2l0aW9uOiAoTlNQb2ludCkgcG9pbnQKKy0gKGlk
KWRvQVhUZXh0TWFya2VyRm9yUG9zaXRpb246KE5TUG9pbnQpcG9pbnQKIHsKICAgICAvLyBjb252
ZXJ0IGFic29sdXRlIHBvaW50IHRvIHZpZXcgY29vcmRpbmF0ZXMKICAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IFtzZWxmIHRvcEZyYW1lVmlld107Ci0gICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVW
aWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRv
Y3VtZW50VmlldygpOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBbc2VsZiB0b3BSZW5k
ZXJlcl07CiAgICAgTm9kZSogaW5uZXJOb2RlID0gMDsKICAgICAKQEAgLTE0MzcsNyArMTQzNiw3
IEBAIHN0YXRpYyBOU1N0cmluZyAqbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICByZW5kZXJlciA9IGRvY3VtZW50LT5yZW5kZXJlcigpOwogICAgICAg
ICBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOwotICAgICAgICB2
aWV3ID0gZnJhbWVWaWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICAgICAgdmlldyA9IGZyYW1l
Vmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgfQogICAgIAogICAgIC8vIGdldCBwb3NpdGlvbiB3
aXRoaW4gdGhlIG5vZGUKQEAgLTI1NTcsMjQgKzI1NTYsMTcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiBlbmRPZlN0eWxlUmFuZ2UgKAogCiAtIChSZW5kZXJPYmplY3QqKXJlbmRlcmVyRm9yVmll
dzooTlNWaWV3Kil2aWV3CiB7Ci0gICAgLy8gY2hlY2sgZm9yIFdlYktpdCBOU1ZpZXcgdGhhdCBs
ZXRzIHVzIGZpbmQgaXRzIGJyaWRnZQotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSogYnJpZGdlID0g
bmlsOwotICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVC
cmlkZ2VIb2xkZXIpXSkgewotICAgICAgICBOU1ZpZXc8V2ViQ29yZUJyaWRnZUhvbGRlcj4qIGJy
aWRnZUhvbGRlciA9IChOU1ZpZXc8V2ViQ29yZUJyaWRnZUhvbGRlcj4qKXZpZXc7Ci0gICAgICAg
IGJyaWRnZSA9IFticmlkZ2VIb2xkZXIgd2ViQ29yZUJyaWRnZV07Ci0gICAgfQorICAgIGlmICgh
W3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pCisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgRnJhbWUqIGZyYW1lID0gW2JyaWRnZSBfZnJhbWVdOwor
ICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJDb3Jl
RnJhbWVWaWV3PiopdmlldzsKKyAgICBGcmFtZSogZnJhbWUgPSBbZnJhbWVWaWV3IF93ZWJfZnJh
bWVdOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAg
ICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpOworICAgIE5vZGUqIG5vZGUg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAgICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBub2RlLT5y
ZW5kZXJlcigpOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkNv
cmVGcmFtZUJyaWRnZSAqYnJpZGdlCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcGFn
ZXM7CiAKLSAgICBOU1ZpZXcqIGRvY3VtZW50VmlldyA9IHZpZXctPmdldERvY3VtZW50Vmlldygp
OworICAgIE5TVmlldyogZG9jdW1lbnRWaWV3ID0gdmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAg
aWYgKCFkb2N1bWVudFZpZXcpCiAgICAgICAgIHJldHVybiBwYWdlczsKIApJbmRleDogV2ViQ29y
ZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVWaWV3LmgJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMzIg
KzIzLDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi1AY2xhc3MgV2ViQ29yZUZyYW1lQnJp
ZGdlOwotCi0vLyBUaGlzIHByb3RvY29sIGlzIGEgd2F5IGZvciBhbiBOU1Njcm9sbFZpZXcgdG8g
ZGV0ZWN0Ci0vLyB0aGF0IHRoZSB2aWV3IGl0J3MgZW1iZWRkZWQgaW4gaXMgb25lIHRoYXQgc2hv
dWxkIGJlIHJlc2l6ZWQgd2hlbiB0aGUKLS8vIHNjcm9sbCB2aWV3IGlzIHJlc2l6ZWQuCi0KLXR5
cGVkZWYgZW51bSB7Ci0gICAgV2ViQ29yZVNjcm9sbGJhckF1dG8sCi0gICAgV2ViQ29yZVNjcm9s
bGJhckFsd2F5c09mZiwKLSAgICBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT24KLX0gV2ViQ29yZVNj
cm9sbGJhck1vZGU7Ci0KLUBwcm90b2NvbCBXZWJDb3JlRnJhbWVWaWV3Ci0tICh2b2lkKXNldEhv
cml6b250YWxTY3JvbGxpbmdNb2RlOihXZWJDb3JlU2Nyb2xsYmFyTW9kZSltb2RlOwotLSAodm9p
ZClzZXRWZXJ0aWNhbFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGU7Ci0t
ICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGU7Ci0KLS0g
KFdlYkNvcmVTY3JvbGxiYXJNb2RlKWhvcml6b250YWxTY3JvbGxpbmdNb2RlOwotLSAoV2ViQ29y
ZVNjcm9sbGJhck1vZGUpdmVydGljYWxTY3JvbGxpbmdNb2RlOworI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKK30KKworQHBy
b3RvY29sIFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcKKy0gKHZvaWQpc2V0SG9yaXpvbnRhbFNjcm9s
bGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZTsKKy0gKHZvaWQpc2V0VmVydGlj
YWxTY3JvbGxpbmdNb2RlOihXZWJDb3JlOjpTY3JvbGxiYXJNb2RlKW1vZGU7CistICh2b2lkKXNl
dFNjcm9sbGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZTsKKy0gKFdlYkNvcmU6
OlNjcm9sbGJhck1vZGUpaG9yaXpvbnRhbFNjcm9sbGluZ01vZGU7CistIChXZWJDb3JlOjpTY3Jv
bGxiYXJNb2RlKXZlcnRpY2FsU2Nyb2xsaW5nTW9kZTsKIC0gKHZvaWQpc2V0U2Nyb2xsQmFyc1N1
cHByZXNzZWQ6KEJPT0wpc3VwcHJlc3NlZCByZXBhaW50T25VbnN1cHByZXNzOihCT09MKXJlcGFp
bnQ7Ci0KIEBlbmQKIAotLy8gVGhpcyBwcm90b2NvbCBpcyBhIHdheSBmb3IgV2ViQ29yZSB0byBn
YWluIGFjY2VzcyB0byBpdHMgaW5mb3JtYXRpb24KLS8vIGFib3V0IFdlYktpdCBzdWJjbGFzc2Vz
IG9mIE5TVmlldwotQHByb3RvY29sIFdlYkNvcmVCcmlkZ2VIb2xkZXIKLS0gKFdlYkNvcmVGcmFt
ZUJyaWRnZSAqKSB3ZWJDb3JlQnJpZGdlOworQHByb3RvY29sIFdlYkNvcmVGcmFtZVZpZXcKKy0g
KFdlYkNvcmU6OkZyYW1lKilfd2ViX2ZyYW1lOwogQGVuZApJbmRleDogV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlVmlld0ZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVWaWV3RmFjdG9yeS5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMyw2IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi1AY2xhc3MgTlNBcnJheTsKLUBjbGFzcyBOU0RpY3Rpb25h
cnk7Ci1AY2xhc3MgTlNNZW51OwotQGNsYXNzIE5TU3RyaW5nOwotQGNsYXNzIE5TVmlldzsKLUBj
bGFzcyBXZWJDb3JlRnJhbWVCcmlkZ2U7CiBAY2xhc3MgV2ViQ29yZVRleHRNYXJrZXI7CiBAY2xh
c3MgV2ViQ29yZVRleHRNYXJrZXJSYW5nZTsKIApAQCAtMTEzLDggKzEwNyw2IEBACiAtIChBWFVJ
RWxlbWVudFJlZilBWFVJRWxlbWVudEZvckVsZW1lbnQ6KGlkKWVsZW1lbnQ7CiAtICh2b2lkKXVu
cmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudDooaWQpZWxlbWVudDsKIAotLSAoV2ViQ29yZUZy
YW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopYVZpZXc7Ci0KIC0gKE5TU3RyaW5n
ICopQVhXZWJBcmVhVGV4dDsKIC0gKE5TU3RyaW5nICopQVhMaW5rVGV4dDsKIC0gKE5TU3RyaW5n
ICopQVhMaXN0TWFya2VyVGV4dDsKQEAgLTEyNywxMSArMTE5LDcgQEAKIEBlbmQKIAogQGludGVy
ZmFjZSBXZWJDb3JlVmlld0ZhY3RvcnkgOiBOU09iamVjdAotewotfQotCiArIChXZWJDb3JlVmll
d0ZhY3RvcnkgKilzaGFyZWRGYWN0b3J5OwotCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViQ29yZVZp
ZXdGYWN0b3J5IChTdWJjbGFzc1Jlc3BvbnNpYmlsaXR5KSA8V2ViQ29yZVZpZXdGYWN0b3J5PgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJXaWRnZXQuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCisjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9f
T0JKQ19fCitAcHJvdG9jb2wgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldzsKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bWVu
dDsKICNlbmRpZgpAQCAtNTIsNiArNTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCB7CiAgICAgcHVibGljOgorICAgICAgICBT
Y3JvbGxWaWV3KCk7CisgICAgICAgIH5TY3JvbGxWaWV3KCk7CisKICAgICAgICAgaW50IHZpc2li
bGVXaWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OwogICAg
ICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CkBAIC04NywyMCArOTQs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZSgpOwogCiAgICAg
ICAgIC8vIEV2ZW50IGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZSBjb29yZGlu
YXRlIHNwYWNlIG9mIGEgd2luZG93IHRoYXQgY29udGFpbnMKLSAgICAgICAgLy8gdGhlIGVudGly
ZSB3aWRnZXQgaGllcmFyY2h5LiAgSXQgaXMgdXAgdG8gdGhlIHBsYXRmb3JtIHRvIGRlY2lkZSB3
aGF0IHRoZSBwcmVjaXNlIGRlZmluaXRpb24KLSAgICAgICAgLy8gb2YgY29udGFpbmluZyB3aW5k
b3cgaXMuICAoRm9yIGV4YW1wbGUgb24gTWFjIGl0IGlzIHRoZSBjb250YWluaW5nIE5TV2luZG93
LikKKyAgICAgICAgLy8gdGhlIGVudGlyZSB3aWRnZXQgaGllcmFyY2h5LiBJdCBpcyB1cCB0byB0
aGUgcGxhdGZvcm0gdG8gZGVjaWRlIHdoYXQgdGhlIHByZWNpc2UgZGVmaW5pdGlvbgorICAgICAg
ICAvLyBvZiBjb250YWluaW5nIHdpbmRvdyBpcy4gKEZvciBleGFtcGxlIG9uIE1hYyBpdCBpcyB0
aGUgY29udGFpbmluZyBOU1dpbmRvdy4pCiAgICAgICAgIEludFBvaW50IHdpbmRvd1RvQ29udGVu
dHMoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICAgICAgSW50UG9pbnQgY29udGVudHNUb1dp
bmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICAKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIC8vIE9uIE1hYyBvbmx5IGJlY2F1c2Ugb2YgZmxpcHBlZCBOU1dpbmRvdyB5LWNv
b3JkaW5hdGVzLCB3ZSBoYXZlIHRvIGhhdmUgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uLgogICAg
ICAgICBJbnRSZWN0IHdpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAg
ICAgICBJbnRSZWN0IGNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UmVjdCYpIGNvbnN0OwotI2Vs
c2UKLSAgICAgICAgLy8gT3RoZXIgcGxhdGZvcm1zIGNhbiBqdXN0IGltcGxlbWVudCB0aGVzZSBo
ZWxwZXIgbWV0aG9kcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBwb2ludCBjb252ZXJzaW9uIG1l
dGhvZHMuCi0gICAgICAgIEludFJlY3QgY29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KGNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlv
bigpKSwgcmVjdC5zaXplKCkpOyB9Ci0gICAgICAgIEludFJlY3Qgd2luZG93VG9Db250ZW50cyhj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KHdpbmRvd1RvQ29udGVu
dHMocmVjdC5sb2NhdGlvbigpKSwgcmVjdC5zaXplKCkpOyB9Ci0jZW5kaWYKIAogICAgICAgICB2
b2lkIHNldFN0YXRpY0JhY2tncm91bmQoYm9vbCk7CiAKQEAgLTExNiwxNCArMTE1LDE2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5KTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgTlNWaWV3
KiBnZXREb2N1bWVudFZpZXcoKSBjb25zdDsKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQg
X19PQkpDX18KKyAgICBwdWJsaWM6CisgICAgICAgIE5TVmlldyogZG9jdW1lbnRWaWV3KCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBOU1Njcm9sbFZpZXc8V2ViQ29yZUZyYW1lU2Ny
b2xsVmlldz4qIHNjcm9sbFZpZXcoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KQotICAgICAgICBTY3JvbGxWaWV3KCk7Ci0gICAgICAgIH5TY3JvbGxWaWV3KCk7Ci0KKyAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKICAgICAg
ICAgCkBAIC0xNjMsOSArMTY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHVEspCi0gICAgICAgIFNjcm9sbFZpZXcoKTsKLSAgICAgICAgflNjcm9sbFZp
ZXcoKTsKLQorICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEd0a0FkanVzdG1l
bnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGopOwogICAgICAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9D
aGlsZChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMTkwLDkgKzE4
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0g
ICAgICAgIFNjcm9sbFZpZXcoKTsKLSAgICAgICAgflNjcm9sbFZpZXcoKTsKLQorICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihj
b25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMjIyLDkgKzIxOSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAg
ICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdYKQotICAgICAgICBTY3JvbGxWaWV3KCk7Ci0gICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAg
cHVibGljOgogICAgICAgICBIYXNoU2V0PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmF0aXZlV2luZG93KHd4V2luZG93KiB3aW5kb3cpOwogCkBAIC0yMzcs
NiArMjM0LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIH07CiAKKyNpZiAh
UExBVEZPUk0oTUFDKQorCisvLyBPbiBNYWMgb25seSBiZWNhdXNlIG9mIGZsaXBwZWQgTlNXaW5k
b3cgeS1jb29yZGluYXRlcywgd2UgaGF2ZSB0byBoYXZlIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlv
bi4KKy8vIE90aGVyIHBsYXRmb3JtcyBjYW4ganVzdCBpbXBsZW1lbnQgdGhlc2UgaGVscGVyIG1l
dGhvZHMgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcG9pbnQgY29udmVyc2lvbiBtZXRob2RzLgor
CitpbmxpbmUgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoY29udGVudHNUb1dpbmRvdyhy
ZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7Cit9CisKK2lubGluZSBJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW50UmVjdCh3aW5kb3dUb0NvbnRlbnRzKHJlY3QubG9jYXRpb24oKSksIHJlY3Qu
c2l6ZSgpKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFNjcm9sbFZpZXdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuaAkocmV2aXNpb24gMzA5NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEludFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZTsKIGNsYXNzIFN0cmluZzsKLWNsYXNzIFdpZGdldDsKIAotY2xhc3MgTWVkaWFQbGF5ZXJDbGll
bnQKLXsKK2NsYXNzIE1lZGlhUGxheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5N
ZWRpYVBsYXllckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllck5ldHdv
cmtTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH0KQEAgLTY0LDggKzYzLDggQEAgcHVibGlj
OgogICAgIEludFNpemUgbmF0dXJhbFNpemUoKTsKICAgICBib29sIGhhc1ZpZGVvKCk7CiAgICAg
Ci0gICAgV2lkZ2V0KiBwYXJlbnRXaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFdpZGdl
dDsgfQotICAgIHZvaWQgc2V0UGFyZW50V2lkZ2V0KFdpZGdldCogcGFyZW50KSB7IG1fcGFyZW50
V2lkZ2V0ID0gcGFyZW50OyB9CisgICAgRnJhbWVWaWV3KiBwYXJlbnRXaWRnZXQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudFdpZGdldDsgfQorICAgIHZvaWQgc2V0UGFyZW50V2lkZ2V0KEZyYW1l
VmlldyogcGFyZW50KSB7IG1fcGFyZW50V2lkZ2V0ID0gcGFyZW50OyB9CiAgICAgCiAgICAgSW50
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmIHIpOwpAQCAtMTI0LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
TWVkaWFQbGF5ZXJDbGllbnQqIG1fbWVkaWFQbGF5ZXJDbGllbnQ7CiAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBtX3ByaXZhdGU7Ci0gICAgV2lkZ2V0KiBtX3BhcmVudFdpZGdldDsKKyAgICBGcmFt
ZVZpZXcqIG1fcGFyZW50V2lkZ2V0OwogICAgIEludFJlY3QgbV9yZWN0OwogICAgIGJvb2wgbV92
aXNpYmxlOwogICAgIGZsb2F0IG1fcmF0ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lv
biAzMDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJC
bG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAi
S1VSTC5oIgotI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAj
aW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZVZpCiAKICAgICBtX3F0TW92aWVWaWV3LmFkb3B0
TlMoW1tRVE1vdmllVmlldyBhbGxvY10gaW5pdF0pOwogICAgIHNldFJlY3QobV9wbGF5ZXItPnJl
Y3QoKSk7Ci0gICAgTlNWaWV3KiBwYXJlbnRWaWV3ID0gc3RhdGljX2Nhc3Q8U2Nyb2xsVmlldyo+
KG1fcGxheWVyLT5tX3BhcmVudFdpZGdldCktPmdldERvY3VtZW50VmlldygpOworICAgIE5TVmll
dyogcGFyZW50VmlldyA9IG1fcGxheWVyLT5tX3BhcmVudFdpZGdldC0+ZG9jdW1lbnRWaWV3KCk7
CiAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgpXTsKICNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBhIHB1YmxpYyBj
YWxsIGluIFRpZ2VyLCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhlIGNvbXBpbGVy
IGhhcHB5CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAz
MDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmIHIsIEYKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgbnVtSXRlbXMgPT0gMiAmJiAhY2xpZW50
KCktPnNob3VsZFBvcE92ZXIoKSAmJiAhW1ttX3BvcHVwLmdldCgpIGl0ZW1BdEluZGV4OjFdIGlz
RW5hYmxlZF0pCiAgICAgICAgIGluZGV4ID0gMDsKIAotICAgIE5TVmlldyogdmlldyA9IHYtPmdl
dERvY3VtZW50VmlldygpOworICAgIE5TVmlldyogdmlldyA9IHYtPmRvY3VtZW50VmlldygpOwog
CiAgICAgW21fcG9wdXAuZ2V0KCkgYXR0YWNoUG9wVXBXaXRoRnJhbWU6ciBpblZpZXc6dmlld107
CiAgICAgW21fcG9wdXAuZ2V0KCkgc2VsZWN0SXRlbUF0SW5kZXg6aW5kZXhdOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTQ3ICsyNiw5OSBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgog
I2ltcG9ydCAiRmxvYXRSZWN0LmgiCiAjaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJCbG9j
a0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFt
ZVZpZXcuaCIKIAotLyoKLSAgICBUaGlzIGNsYXNzIGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIGFj
dHVhbGx5IGVtdWxhdGUgdGhlIFF0IFNjcm9sbFZpZXcuCi0gICAgSXQgZG9lcyBwcm92aWRlIGFu
IGltcGxlbWVudGF0aW9uIHRoYXQga2h0bWwgd2lsbCB1c2UgdG8gaW50ZXJhY3Qgd2l0aAotICAg
IFdlYktpdCdzIFdlYkZyYW1lVmlldyBkb2N1bWVudFZpZXcgYW5kIG91ciBOU1Njcm9sbFZpZXcg
c3ViY2xhc3MuCi0KLSAgICBTY3JvbGxWaWV3J3MgdmlldyBpcyBhIE5TU2Nyb2xsVmlldyAob3Ig
c3ViY2xhc3Mgb2YgTlNTY3JvbGxWaWV3KQotICAgIGluIG1vc3QgY2FzZXMuIFRoYXQgc2Nyb2xs
dmlldyBpcyBhIHN1YnZpZXcgb2YgYW4KLSAgICBXZWJDb3JlRnJhbWVWaWV3LiBUaGUgV2ViQ29y
ZUZyYW1lVmlldydzIGRvY3VtZW50VmlldyB3aWxsIGFsc28gYmUKLSAgICB0aGUgc2Nyb2xsIHZp
ZXcncyBkb2N1bWVudFZpZXcuCi0gICAgCi0gICAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBzaXpl
IGlzIHRoZSBmcmFtZSBzaXplLiAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcK
LSAgICBjb3JyZXNwb25kcyB0byB0aGUgZnJhbWUgY29udGVudCBzaXplLiAgVGhlIHNjcm9sbHZp
ZXcgaXRzZWxmIGlzIGF1dG9zaXplZCB0byB0aGUKLSAgICBXZWJDb3JlRnJhbWVWaWV3J3Mgc2l6
ZSAoc2VlIFdpZGdldDo6cmVzaXplKS4KLSovCit1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWludCBTY3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAor
U2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiB7Ci0gICAgTlNTY3JvbGxWaWV3ICp2aWV3ID0gKE5T
U2Nyb2xsVmlldyAqKWdldFZpZXcoKTsKK30KIAorU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQor
eworfQorCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3Jv
bGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWdldFZpZXcoKSB8fCBb
Z2V0VmlldygpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBBU1NF
UlQoIWdldFZpZXcoKSB8fCBbZ2V0VmlldygpIGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2wo
V2ViQ29yZUZyYW1lU2Nyb2xsVmlldyldKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlNTY3Jv
bGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICo+KGdldFZpZXcoKSk7Cit9CisKK2ludCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAorewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiAoaW50KVt2aWV3IGRvY3VtZW50VmlzaWJsZVJlY3RdLnNp
emUud2lkdGg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKGludClbdmlldyBib3VuZHNdLnNp
emUud2lkdGg7CisgICAgcmV0dXJuIFtzY3JvbGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0u
c2l6ZS53aWR0aDsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgcmV0dXJu
IDA7CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBO
U1Njcm9sbFZpZXcgKnZpZXcgPSAoTlNTY3JvbGxWaWV3ICopZ2V0VmlldygpOwotICAgIAogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFz
czpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiAoaW50KVt2aWV3IGRvY3Vt
ZW50VmlzaWJsZVJlY3RdLnNpemUuaGVpZ2h0OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChp
bnQpW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodDsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcoKSBk
b2N1bWVudFZpc2libGVSZWN0XS5zaXplLmhlaWdodDsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAogICAgIHJldHVybiAwOwogfQogCiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6
dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKLSAgICBOU1Njcm9sbFZpZXcgKnZpZXcgPSAo
TlNTY3JvbGxWaWV3ICopZ2V0VmlldygpOyAKLSAgICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsgCi0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBj
bGFzc11dKSAKLSAgICAgICAgcmV0dXJuIFt2aWV3IGRvY3VtZW50VmlzaWJsZVJlY3RdOyAKLSAg
ICBlbHNlIAotICAgICAgICByZXR1cm4gW3ZpZXcgdmlzaWJsZVJlY3RdOyAKKyAgICByZXR1cm4g
W3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVSZWN0XTsgCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsgCi0KICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKIEZsb2F0UmVjdCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RDb25zaWRlcmluZ0V4dGVybmFsU2Nyb2xsZXJz
KCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKE5T
VmlldyAqZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpKQotICAgICAgICByZXR1cm4gW2RvY1Zp
ZXcgdmlzaWJsZVJlY3RdOworICAgIHJldHVybiBbZG9jdW1lbnRWaWV3KCkgdmlzaWJsZVJlY3Rd
OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CiB9CiAKLQogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdAogewotICAg
IE5TVmlldyAqZG9jVmlldywgKnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgZG9jVmlldyA9IGdldERv
Y3VtZW50VmlldygpOwotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlm
IChkb2NWaWV3KQotICAgICAgICByZXR1cm4gKGludClbZG9jVmlldyBib3VuZHNdLnNpemUud2lk
dGg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKGludClbdmlldyBib3VuZHNdLnNpemUud2lk
dGg7CisgICAgcmV0dXJuIFtkb2N1bWVudFZpZXcoKSBib3VuZHNdLnNpemUud2lkdGg7CiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Ny
b2xsVmlldzo6Y29udGVudHNIZWlnaHQoKSBjb25zdAogewotICAgIE5TVmlldyAqZG9jVmlldywg
KnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpOwotCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmIChkb2NWaWV3KQotICAgICAg
ICByZXR1cm4gKGludClbZG9jVmlldyBib3VuZHNdLnNpemUuaGVpZ2h0OwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIChpbnQpW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodDsKKyAgICByZXR1cm4g
W2RvY3VtZW50VmlldygpIGJvdW5kc10uc2l6ZS5oZWlnaHQ7CiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6Y29udGVu
dHNYKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05T
U2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gKGludClbKE5TU2Nyb2xsVmlldyAq
KXZpZXcgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLng7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gKGludClbdmlldyB2aXNpYmxlUmVjdF0ub3JpZ2luLng7CisgICAgcmV0dXJuIFtzY3Jv
bGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLng7CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6Y29u
dGVudHNZKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gKGludClbKE5TU2Nyb2xsVmll
dyAqKXZpZXcgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLnk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gKGludClbdmlldyB2aXNpYmxlUmVjdF0ub3JpZ2luLnk7CisgICAgcmV0dXJuIFtz
Y3JvbGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLnk7CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBJbnRTaXplIFNjcm9sbFZp
ZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgTlNWaWV3ICp2aWV3ID0gZ2V0Vmlldygp
OwotICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcg
aXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBJbnRQ
b2ludChbWyhOU1Njcm9sbFZpZXcgKil2aWV3IGNvbnRlbnRWaWV3XSB2aXNpYmxlUmVjdF0ub3Jp
Z2luKSAtIEludFBvaW50KCk7CisgICAgcmV0dXJuIEludFBvaW50KFtbc2Nyb2xsVmlldygpIGNv
bnRlbnRWaWV3XSB2aXNpYmxlUmVjdF0ub3JpZ2luKSAtIEludFBvaW50KCk7CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gSW50U2l6ZSgpOwogfQpAQCAtMTgxLDEx
NiArMTMzLDY2IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXIKICAg
ICBOU1JlY3QgcmVjdCA9IHI7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0g
ICAgTlNWaWV3ICpkb2NWaWV3OwotICAgIE5TVmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0g
ICAgZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAg
ICB2aWV3ID0gZG9jVmlldzsKLQotICAgIE5TVmlldyAqb3JpZ2luYWxWaWV3ID0gdmlldzsKLSAg
ICB3aGlsZSAodmlldykgeworICAgIE5TVmlldyAqb3JpZ2luYWxWaWV3ID0gZG9jdW1lbnRWaWV3
KCk7CisgICAgZm9yIChOU1ZpZXcgKnZpZXcgPSBvcmlnaW5hbFZpZXc7IHZpZXc7IHZpZXcgPSBb
dmlldyBzdXBlcnZpZXddKSB7CiAgICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltOU0Ns
aXBWaWV3IGNsYXNzXV0pIHsKICAgICAgICAgICAgIE5TQ2xpcFZpZXcgKmNsaXBWaWV3ID0gKE5T
Q2xpcFZpZXcgKil2aWV3OwogICAgICAgICAgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbY2xp
cFZpZXcgZG9jdW1lbnRWaWV3XTsKICAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgc2Nyb2xsUmVj
dFRvVmlzaWJsZTpbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6b3JpZ2lu
YWxWaWV3XV07CiAgICAgICAgIH0KLQotICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsK
ICAgICB9Ci0KICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNldENvbnRlbnRzUG9zKGludCB4LCBpbnQgeSkKIHsKLSAgICB4ID0gKHggPCAwKSA/
IDAgOiB4OwotICAgIHkgPSAoeSA8IDApID8gMCA6IHk7Ci0gICAgTlNQb2ludCBwID0gIE5TTWFr
ZVBvaW50KHgseSk7Ci0KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgTlNW
aWV3ICpkb2NWaWV3OwotICAgIE5TVmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0gICAgZG9j
VmlldyA9IGdldERvY3VtZW50VmlldygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3
ID0gZG9jVmlldzsKLSAgICBbdmlldyBzY3JvbGxQb2ludDpwXTsKKyAgICBbZG9jdW1lbnRWaWV3
KCkgc2Nyb2xsUG9pbnQ6TlNNYWtlUG9pbnQobWF4KDAsIHgpLCBtYXgoMCwgeSkpXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3Jv
bGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgdk1vZGUpCiB7Ci0gICAgTlNWaWV3KiB2aWV3ID0gZ2V0
VmlldygpOwotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmIChbdmll
dyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgewotICAg
ICAgICBOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qIGZyYW1lVmlldyA9IChOU1ZpZXc8V2ViQ29y
ZUZyYW1lVmlldz4qKXZpZXc7Ci0gICAgICAgIFtmcmFtZVZpZXcgc2V0VmVydGljYWxTY3JvbGxp
bmdNb2RlOiAoV2ViQ29yZVNjcm9sbGJhck1vZGUpdk1vZGVdOwotICAgIH0KKyAgICBbc2Nyb2xs
VmlldygpIHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTp2TW9kZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRIU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJNb2RlIGhNb2RlKQogewotICAgIE5TVmlldyogdmlldyA9IGdldFZpZXcoKTsKLQog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgY29uZm9ybXNU
b1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAgICAgICAgTlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+
Kil2aWV3OwotICAgICAgICBbZnJhbWVWaWV3IHNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlOiAo
V2ViQ29yZVNjcm9sbGJhck1vZGUpaE1vZGVdOwotICAgIH0KKyAgICBbc2Nyb2xsVmlldygpIHNl
dEhvcml6b250YWxTY3JvbGxpbmdNb2RlOmhNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKFNjcm9sbGJh
ck1vZGUgbW9kZSkKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGNvbmZvcm1zVG9Qcm90b2Nv
bDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKSB7Ci0gICAgICAgIE5TVmlldzxXZWJDb3Jl
RnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiopdmlldzsK
LSAgICAgICAgW2ZyYW1lVmlldyBzZXRTY3JvbGxpbmdNb2RlOiAoV2ViQ29yZVNjcm9sbGJhck1v
ZGUpbW9kZV07Ci0gICAgfQorICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsaW5nTW9kZTptb2Rl
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBn
ZXRWaWV3KCk7Ci0KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2
aWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKSB7Ci0g
ICAgICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJD
b3JlRnJhbWVWaWV3PiopdmlldzsKLSAgICAgICAgcmV0dXJuIChTY3JvbGxiYXJNb2RlKVtmcmFt
ZVZpZXcgdmVydGljYWxTY3JvbGxpbmdNb2RlXTsKLSAgICB9CisgICAgcmV0dXJuIFtzY3JvbGxW
aWV3KCkgdmVydGljYWxTY3JvbGxpbmdNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCiAgICAgcmV0dXJuIFNjcm9sbGJhckF1dG87CiB9CiAKIFNjcm9sbGJhck1vZGUgU2Ny
b2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25zdAogewotICAgIE5TVmlldyogdmlldyA9IGdl
dFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3Zp
ZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAg
ICAgICAgTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNv
cmVGcmFtZVZpZXc+Kil2aWV3OwotICAgICAgICByZXR1cm4gKFNjcm9sbGJhck1vZGUpW2ZyYW1l
VmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZV07Ci0gICAgfQorICAgIHJldHVybiBbc2Nyb2xs
VmlldygpIGhvcml6b250YWxTY3JvbGxpbmdNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotCiAgICAgcmV0dXJuIFNjcm9sbGJhckF1dG87CiB9CiAKLXZvaWQgU2Nyb2xsVmll
dzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJvb2wgc3VwcHJlc3NlZCwgIGJvb2wgcmVwYWludE9uVW5z
dXBwcmVzcykKK3ZvaWQgU2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJvb2wgc3VwcHJl
c3NlZCwgYm9vbCByZXBhaW50T25VbnN1cHByZXNzKQogewotICAgIE5TVmlldyogdmlldyA9IGdl
dFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3Zp
ZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAg
ICAgICAgTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNv
cmVGcmFtZVZpZXc+Kil2aWV3OwotICAgICAgICBbZnJhbWVWaWV3IHNldFNjcm9sbEJhcnNTdXBw
cmVzc2VkOiBzdXBwcmVzc2VkCi0gICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRPblVuc3Vw
cHJlc3M6IHJlcGFpbnRPblVuc3VwcHJlc3NdOwotICAgIH0KKyAgICBbc2Nyb2xsVmlldygpIHNl
dFNjcm9sbEJhcnNTdXBwcmVzc2VkOnN1cHByZXNzZWQKKyAgICAgICAgICAgICAgICAgICAgICBy
ZXBhaW50T25VbnN1cHByZXNzOnJlcGFpbnRPblVuc3VwcHJlc3NdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTI5OCwxOCArMjAwLDEzIEBAIHZvaWQgU2Nyb2xsVmll
dzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQgIT0gdGhpcyk7
CiAKLSAgICBOU1ZpZXcgKnRoaXNWaWV3ID0gZ2V0VmlldygpOwotICAgIE5TVmlldyAqdGhpc0Rv
Y1ZpZXcgPSBnZXREb2N1bWVudFZpZXcoKTsKLSAgICBpZiAodGhpc0RvY1ZpZXcpCi0gICAgICAg
IHRoaXNWaWV3ID0gdGhpc0RvY1ZpZXc7Ci0KICNpZm5kZWYgTkRFQlVHCi0gICAgTlNWaWV3ICpz
dWJ2aWV3ID0gY2hpbGQtPmdldE91dGVyVmlldygpOwotICAgIAorICAgIE5TVmlldyAqc3Vidmll
dyA9IGNoaWxkLT5nZXRPdXRlclZpZXcoKTsgICAgCiAgICAgTE9HKEZyYW1lcywgIkFkZGluZyAl
cCAlQCB3aXRoIHNpemUgdyAlZCBoICVkXG4iLCBzdWJ2aWV3LAogICAgICAgICBbKGlkKVtzdWJ2
aWV3IGNsYXNzXSBjbGFzc05hbWVdLCAoaW50KVtzdWJ2aWV3IGZyYW1lXS5zaXplLndpZHRoLCAo
aW50KVtzdWJ2aWV3IGZyYW1lXS5zaXplLmhlaWdodCk7CiAjZW5kaWYKLSAgICBjaGlsZC0+YWRk
VG9TdXBlcnZpZXcodGhpc1ZpZXcpOworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRvY3Vt
ZW50VmlldygpKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNo
aWxkKQpAQCAtMzIwLDM2ICsyMTcsMTcgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChX
aWRnZXQqIGNoaQogdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50IGgp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGludCBfdyA9IHc7Ci0g
ICAgaW50IF9oID0gaDsKLQotICAgIExPRyhGcmFtZXMsICIlcCAlQCBhdCB3ICVkIGggJWRcbiIs
IGdldFZpZXcoKSwgWyhpZClbZ2V0VmlldygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBoKTsKLSAg
ICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKXsKLSAgICAgICAgdmlldyA9IGdldERvY3VtZW50Vmlldygp
OwotICAgICAgICAKLSAgICAgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwg
dmlldywgWyhpZClbdmlldyBjbGFzc10gY2xhc3NOYW1lXSwgdywgaCk7Ci0gICAgICAgIGlmIChf
dyA8IDApCi0gICAgICAgICAgICBfdyA9IDA7Ci0gICAgICAgIGlmIChfaCA8IDApCi0gICAgICAg
ICAgICBfaCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgTlNTaXplIHRlbXBTaXplID0geyBf
dywgX2ggfTsgLy8gd29ya2Fyb3VuZCBmb3IgNDIxMzMxNAotICAgICAgICBbdmlldyBzZXRGcmFt
ZVNpemU6dGVtcFNpemVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc2l6ZSAoX3csIF9oKTsK
LSAgICB9CisgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwgZG9jdW1lbnRW
aWV3KCksIFsoaWQpW2RvY3VtZW50VmlldygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBoKTsgICAg
ICAgICAgICAKKyAgICBOU1NpemUgdGVtcFNpemUgPSB7IG1heCgwLCB3KSwgbWF4KDAsIGgpIH07
IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3KCkgc2V0RnJhbWVT
aXplOnRlbXBTaXplXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QgJnJlY3QsIGJvb2wgbm93
KQordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0LCBi
b29sIG5vdykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU1Zp
ZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNT
Y3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHZpZXcgPSBnZXREb2N1bWVudFZpZXcoKTsKKyAg
ICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXcoKTsKIAogICAgIE5TUmVjdCB2aXNpYmxlUmVj
dCA9IHZpc2libGVDb250ZW50UmVjdCgpOwogCkBAIC0zODQsMTA3ICsyNjIsNTQgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGUoKQogSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgY29udGVudHNQb2ludCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1ZpZXcgKmRvY1ZpZXc7Ci0gICAgTlNWaWV3ICp2
aWV3ID0gZ2V0VmlldygpOyAgICAKLSAgICAgCi0gICAgZG9jVmlldyA9IGdldERvY3VtZW50Vmll
dygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3ID0gZG9jVmlldzsKLSAgICAKICAg
ICBOU1BvaW50IHRlbXBQb2ludCA9IHsgY29udGVudHNQb2ludC54KCksIGNvbnRlbnRzUG9pbnQu
eSgpIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKLSAgICBOU1BvaW50IG5wID0gW3ZpZXcg
Y29udmVydFBvaW50OnRlbXBQb2ludCB0b1ZpZXc6IG5pbF07Ci0gICAgcmV0dXJuIEludFBvaW50
KG5wKTsKLQorICAgIHJldHVybiBJbnRQb2ludChbZG9jdW1lbnRWaWV3KCkgY29udmVydFBvaW50
OnRlbXBQb2ludCB0b1ZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAKICAgICByZXR1cm4gSW50UG9pbnQoKTsKIH0KIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6
d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNWaWV3ICpkb2NWaWV3OwotICAgIE5T
VmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0KLSAgICBkb2NWaWV3ID0gZ2V0RG9jdW1lbnRW
aWV3KCk7Ci0gICAgaWYgKGRvY1ZpZXcpCi0gICAgICAgIHZpZXcgPSBkb2NWaWV3OwotICAgIAog
ICAgIE5TUG9pbnQgdGVtcFBvaW50ID0geyBwb2ludC54KCksIHBvaW50LnkoKSB9OyAvLyB3b3Jr
YXJvdW5kIGZvciA0MjEzMzE0Ci0gICAgTlNQb2ludCBucCA9IFt2aWV3IGNvbnZlcnRQb2ludDp0
ZW1wUG9pbnQgZnJvbVZpZXc6IG5pbF07Ci0KLSAgICByZXR1cm4gSW50UG9pbnQobnApOwotCisg
ICAgcmV0dXJuIEludFBvaW50KFtkb2N1bWVudFZpZXcoKSBjb252ZXJ0UG9pbnQ6dGVtcFBvaW50
IGZyb21WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KICAgICBy
ZXR1cm4gSW50UG9pbnQoKTsKIH0KIAogSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2lu
ZG93KGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1ZpZXcqIGRvY1ZpZXc7Ci0gICAgTlNWaWV3KiB2
aWV3ID0gZ2V0VmlldygpOyAgICAKLSAgICAgCi0gICAgZG9jVmlldyA9IGdldERvY3VtZW50Vmll
dygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3ID0gZG9jVmlldzsKLSAgICAKLSAg
ICBOU1JlY3QgbnIgPSBbdmlldyBjb252ZXJ0UmVjdDpjb250ZW50c1JlY3QgdG9WaWV3OiBuaWxd
OwotICAgIHJldHVybiBJbnRSZWN0KG5yKTsKLQorICAgIHJldHVybiBJbnRSZWN0KFtkb2N1bWVu
dFZpZXcoKSBjb252ZXJ0UmVjdDpjb250ZW50c1JlY3QgdG9WaWV3Om5pbF0pOwogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAog
SW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNWaWV3
KiBkb2NWaWV3OwotICAgIE5TVmlldyogdmlldyA9IGdldFZpZXcoKTsgICAgCi0KLSAgICBkb2NW
aWV3ID0gZ2V0RG9jdW1lbnRWaWV3KCk7Ci0gICAgaWYgKGRvY1ZpZXcpCi0gICAgICAgIHZpZXcg
PSBkb2NWaWV3OwotICAgIAotICAgIE5TUmVjdCBuciA9IFt2aWV3IGNvbnZlcnRSZWN0OnJlY3Qg
ZnJvbVZpZXc6IG5pbF07Ci0KLSAgICByZXR1cm4gSW50UmVjdChucik7Ci0KKyAgICByZXR1cm4g
SW50UmVjdChbZG9jdW1lbnRWaWV3KCkgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgcmV0dXJuIEludFJlY3QoKTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzZXRTdGF0aWNCYWNrZ3JvdW5kKGJvb2wgYikKK3ZvaWQg
U2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIHN0YXRpY0JhY2tncm91bmQpCiB7
Ci0gICAgTlNTY3JvbGxWaWV3ICp2aWV3ID0gKE5TU2Nyb2xsVmlldyAqKWdldFZpZXcoKTsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xh
c3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICBbW3ZpZXcgY29udGVudFZpZXddIHNl
dENvcGllc09uU2Nyb2xsOiAhYl07CisgICAgW1tzY3JvbGxWaWV3KCkgY29udGVudFZpZXddIHNl
dENvcGllc09uU2Nyb2xsOiFzdGF0aWNCYWNrZ3JvdW5kXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi1OU1ZpZXcgKlNjcm9sbFZpZXc6OmdldERvY3VtZW50VmlldygpIGNv
bnN0CitOU1ZpZXcgKlNjcm9sbFZpZXc6OmRvY3VtZW50VmlldygpIGNvbnN0CiB7Ci0gICAgaWQg
dmlldyA9IGdldFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb2N1bWVudFZpZXcpXSkg
Ci0gICAgICAgIHJldHVybiBbdmlldyBkb2N1bWVudFZpZXddOworICAgIHJldHVybiBbc2Nyb2xs
VmlldygpIGRvY3VtZW50Vmlld107CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKICAgICByZXR1cm4gbmlsOwogfQogCi1QbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6
c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
CitQbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQogewotICAgIC8vIE9uIE1hYywgdGhlIFNjcm9sbFZpZXcg
aXMgcmVhbGx5IHRoZSAiZG9jdW1lbnQiLCBzbyBldmVudHMgd2lsbCBuZXZlciBmbG93IGludG8g
aXQgdG8gZ2V0IHRvIHRoZSBzY3JvbGxlcnMuCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQ5NSw3
ICszMjAsNyBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKIAogdm9pZCBTY3Jv
bGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCiB7Ci0gICAgLy8gRG8gbm90
aGluZy4gIE5TU2Nyb2xsVmlldyBoYW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9yIHVzLgorICAg
IC8vIERvIG5vdGhpbmcuIE5TU2Nyb2xsVmlldyBoYW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9y
IHVzLgogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAz
MDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDEwICsyMDAsMTEgQEAgdm9pZCBXaWRnZXQ6OnNldFZpZXcoTlNWaWV3KiB2aWV3
KQogCiBOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKIHsKLSAgICAvLyBJZiB0
aGlzIHdpZGdldCdzIHZpZXcgaXMgYSBXZWJDb3JlRnJhbWVWaWV3IHRoZSB3ZSByZXNpemUgaXRz
IGNvbnRhaW5pbmcgdmlldywgYSBXZWJGcmFtZVZpZXcuCi0KICAgICBOU1ZpZXcqIHZpZXcgPSBk
YXRhLT52aWV3LmdldCgpOwotICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3Rv
Y29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgeworCisgICAgLy8gSWYgdGhpcyB3aWRnZXQncyB2aWV3
IGlzIGEgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldyB0aGVuIHdlCisgICAgLy8gcmVzaXplIGl0cyBj
b250YWluaW5nIHZpZXcsIGEgV2ViRnJhbWVWaWV3LgorICAgIGlmIChbdmlldyBjb25mb3Jtc1Rv
UHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcpXSkgewogICAgICAgICB2
aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKICAgICAgICAgQVNTRVJUKHZpZXcpOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTgs
NyArNTk4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDaGVja2JveChSZW5kZQogICAg
IC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBv
ZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KICAgICBOU0J1dHRvbkNlbGwq
IGNoZWNrYm94ID0gdGhpcy0+Y2hlY2tib3goKTsKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9
IGluZmxhdGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtbY2hlY2tib3ggY29udHJvbFNpemVdXSwg
Y2hlY2tib3hNYXJnaW5zKCkpOwotICAgIFtjaGVja2JveCBkcmF3V2l0aEZyYW1lOk5TUmVjdChp
bmZsYXRlZFJlY3QpIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZp
ZXcoKV07CisgICAgW2NoZWNrYm94IGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkg
aW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKICAgICBbY2hl
Y2tib3ggc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTY1NCw3
ICs2NTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKFJlbmRlck9iCiAgICAg
Ly8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9m
IHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgogICAgIE5TQnV0dG9uQ2VsbCog
cmFkaW8gPSB0aGlzLT5yYWRpbygpOwogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0
ZVJlY3QociwgcmFkaW9TaXplcygpW1tyYWRpbyBjb250cm9sU2l6ZV1dLCByYWRpb01hcmdpbnMo
KSk7Ci0gICAgW3JhZGlvIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3
Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpXTsKKyAgICBbcmFkaW8g
ZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFt
ZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtyYWRpbyBzZXRDb250cm9sVmlldzpuaWxd
OwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODM1LDcgKzgzNSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50QnV0dG9uKFJlbmRlck8KICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0
ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBidXR0b25NYXJnaW5zKCkpOwogICAgIH0KIAotICAg
IFtidXR0b24gZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmll
dygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOworICAgIFtidXR0b24gZHJhd1dp
dGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXco
KS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtidXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTkyMiw3ICs5MjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0KFJlbmRlCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoaW5mbGF0
ZWRSZWN0KTsKICNlbmRpZgogCi0gICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0
ZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZpZXcoKV07
CisgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpvLT52
aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CiAgICAgW3BvcHVwQnV0dG9uIHNl
dENvbnRyb2xWaWV3Om5pbF07CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTEzMDcs
NyArMTMwNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmUKICAg
ICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxBcHBl
YXJhbmNlKQogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRp
Y2FsU2xpZGVySGVpZ2h0UGFkZGluZyk7CiAKLSAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRo
RnJhbWU6TlNSZWN0KGJvdW5kcykgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERv
Y3VtZW50VmlldygpXTsKKyAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0
KGJvdW5kcykgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsK
ICAgICBbc2xpZGVyVGh1bWJDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMzM5LDcgKzEzMzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkKFJlCiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBiZWZvcmUg
ZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCiAgICAgW3Nl
YXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNoIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KHIpIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZp
ZXcoKV07CisgICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdChyKSBpblZpZXc6by0+dmll
dygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJ
R0VSCiAgICAgaWYgKFtzZWFyY2ggc2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJh
d1RleHRGaWVsZENlbGxGb2N1c1Jpbmcoc2VhcmNoLCBOU1JlY3QocikpOwpAQCAtMTQxOSw3ICsx
NDE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHVw
ZGF0ZVByZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIE5T
UmVjdCBib3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlu
cHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKV07Ci0gICAgW1tzZWFy
Y2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpib3VuZHMgaW5WaWV3Om8tPnZpZXco
KS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBjYW5jZWxC
dXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNl
dENvbnRyb2xWaWV3Om5pbF07CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDc4LDcgKzE0Nzgs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgICAgIFtz
ZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOm5pbF07CiAKICAgICBOU1JlY3QgYm91bmRzID0g
W3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyZXIo
KS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSldOwotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRv
bkNlbGxdIGRyYXdXaXRoRnJhbWU6Ym91bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygp
LT5nZXREb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJh
d1dpdGhGcmFtZTpib3VuZHMgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50
VmlldygpXTsKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpu
aWxdOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE1MDMsNyArMTUwMyw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICAgICAgW3NlYXJjaCBzZXRTZWFy
Y2hNZW51VGVtcGxhdGU6c2VhcmNoTWVudVRlbXBsYXRlKCldOwogCiAgICAgTlNSZWN0IGJvdW5k
cyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRl
cmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpXTsKLSAgICBbW3NlYXJjaCBzZWFyY2hC
dXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOworICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxd
IGRyYXdXaXRoRnJhbWU6Ym91bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1
bWVudFZpZXcoKV07CiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZp
ZXc6bmlsXTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBACisyMDA4LTAzLTExICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBDaGFuZ2UgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0gdG8gYmUgT2JqLUMrKy4KKyAgICAg
ICAgV2UgY2FuIHJlbmFtZSB0aGUgZmlsZSBsYXRlci4KKwogMjAwOC0wMy0wNyAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJ
bmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzA5
NjMpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDYgKzg2LDcgQEAKIAkJOTMwNEIzMDAwQjAyMzQxNTAwRjc4NTBEIC8qIFdl
Ykljb25EYXRhYmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA0QjJGRjBCMDIzNDE1MDBGNzg1MEQgLyogV2ViSWNvbkRhdGFiYXNl
SW50ZXJuYWwuaCAqLzsgfTsKIAkJOTMxNjMzRUIwQUVERkY5MzAwNjJCOTJEIC8qIFdlYkZyYW1l
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzE2MzNFQTBBRURGRjkzMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCAq
LzsgfTsKIAkJOTMxNjMzRUYwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxNjMz
RUUwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tICovOyB9OworCQk5
MzRDMTE2NzBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEMx
MTY2MEQ4NzEwQkIwMEMzMkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5o
ICovOyB9OwogCQk5Mzk4MTAxMTA4MjRCRjAxMDA4REYwMzggLyogV2ViQmFja0ZvcndhcmRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzOTQ0NjA3
RDAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5Mzk4MTAxMjA4MjRCRjAxMDA4REYw
MzggLyogV2ViSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdlYkhpc3RvcnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTkzOTgxMDEzMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3Rv
cnlJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwpA
QCAtMzU5LDcgKzM2MCw3IEBACiAJCTM1MDgxRDk2MDJCNkQ0RDgwQUNBMkFDQSAvKiBXZWJIVE1M
Vmlld1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJIVE1MVmlld1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM1MDgxREFFMDJCNkQ0RjUwQUNBMkFDQSAv
KiBXZWJEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA2QjAyMEY1MEVEMEVDQTE3NjcgLyogV2Vi
RHluYW1pY1Njcm9sbEJhcnNWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQkzOTQ0NjA2QzAy
MEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OworCQkzOTQ0NjA2QzAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBwYXRoID0gV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA2RTAyMEY1MEVE
MEVDQTE3NjcgLyogV2ViUHJlZmVyZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwNzAwMjBGNTBF
RDBFQ0ExNzY3IC8qIFdlYkRhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA3MTAyMEY1MEVE
MEVDQTE3NjcgLyogV2ViRGF0YVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRGF0YVNvdXJjZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC01MDIsNiAr
NTAzLDcgQEAKIAkJOTM0NUREQUYwMzY1RkIyNzAwODYzNUNFIC8qIFdlYk5TV2luZG93RXh0cmFz
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
V2ViTlNXaW5kb3dFeHRyYXMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzNDVEREIyMDM2NUZGRDAwMDg2MzVDRSAvKiBXZWJOU0Nv
bnRyb2xFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJOU0NvbnRyb2xFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzNDVEREIzMDM2NUZGRDAwMDg2MzVDRSAv
KiBXZWJOU0NvbnRyb2xFeHRyYXMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBXZWJOU0NvbnRyb2xFeHRyYXMubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTkzNEMxMTY2MEQ4NzEw
QkIwMEMzMkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzk4MTEzMjA4MjRCRjAxMDA4REYw
MzggLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IG5hbWUgPSBJbmZvLnBs
aXN0OyBwYXRoID0gbWFjL0luZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDE7IH07CiAJCTkzOTgxMTMzMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
OTNBRUIxN0QwMzJDMTczNTAwODYzNUNFIC8qIFdlYktpdExvZ2dpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRMb2dnaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAt
OTUwLDYgKzk1Miw3IEBACiAJCQkJNjVGRkI3RkEwQUQwQjdEMzAwNDhDRDA1IC8qIFdlYkRvY3Vt
ZW50TG9hZGVyTWFjLmggKi8sCiAJCQkJODMzOTg3ODEwNTQzMDEyRDAwRUUxNDZFIC8qIFdlYkRv
Y3VtZW50UHJpdmF0ZS5oICovLAogCQkJCTM5NDQ2MDZCMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJE
eW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCAqLywKKwkJCQk5MzRDMTE2NjBEODcxMEJCMDBDMzJBQkQg
LyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCAqLywKIAkJCQlCRTRGQkVDQjA2
NTNERjQ3MDA1RURFMTUgLyogV2ViRWRpdGluZ0RlbGVnYXRlLmggKi8sCiAJCQkJMUM4Q0IwNzkw
QUU5ODMwQzAwQjFGNkU5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLywKIAkJCQky
RDgxREFCMjAzRUIwQjJEMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlLmggKi8sCkBAIC0xMzI0
LDYgKzEzMjcsNyBAQAogCQkJCTkzOTgxMDk3MDgyNEJGMDEwMDhERjAzOCAvKiBucGZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGREU5MzMwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhp
c3RvcnlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzAxNjdCRjgwRDdGNUREMDAwMjg2
OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MzRDMTE2NzBE
ODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAwOC0wMy0xMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLSByZW1vdmUgY29kZSBkZXBlbmRpbmcgb24gdGhlIGJyaWRnZSB0byBn
ZXQgZnJvbSBhbiBOU1ZpZXcgdG8gYSBXZWJDb3JlOjpGcmFtZQorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IFJlbW92ZSBpbmNvcnJl
Y3QgY2FsbAorICAgICAgICB0byBzZXRWaWV3LiBBIGNvdXBsZSBsaW5lcyBsYXRlciwgdGhlcmUg
aXMgYSBjYWxsIHRvIF9pbnN0YWxsLCB3aGljaCBzZXRzIHRoZQorICAgICAgICB2aWV3IHRvIHRo
ZSBzY3JvbGwgdmlldy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5
Lm1tOiBSZW1vdmVkIGJyaWRnZUZvclZpZXcgbWV0aG9kLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaDogTW92ZWQgbW9zdCBvZiB0aGUgZGVjbGFyYXRpb25z
IG91dCBvZgorICAgICAgICB0aGlzIGZpbGUsIHNpbmNlIGl0J3MgdXNlZCBieSBTYWZhcmkuCisg
ICAgICAgICogV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tOgorICAgICAg
ICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgdXBkYXRlU2Nyb2xsZXJzXSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgc2V0QWxsb3dzU2Nyb2xsaW5nOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IGFsbG93c1Njcm9s
bGluZ10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IHNldEFs
bG93c0hvcml6b250YWxTY3JvbGxpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJEeW5hbWlj
U2Nyb2xsQmFyc1ZpZXcgc2V0QWxsb3dzVmVydGljYWxTY3JvbGxpbmc6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGlu
Z10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IGFsbG93c1Zl
cnRpY2FsU2Nyb2xsaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFy
c1ZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9k
ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRIb3Jp
em9udGFsU2Nyb2xsaW5nTW9kZTphbmRMb2NrOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3IHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRWZXJ0aWNhbFNjcm9sbGluZ01v
ZGU6YW5kTG9jazpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmll
dyBzZXRTY3JvbGxpbmdNb2RlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3IHNldFNjcm9sbGluZ01vZGU6YW5kTG9jazpdKTogRGl0dG8uCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF93ZWJf
ZnJhbWVdKTogQWRkZWQuIFJlcGxhY2VzIHRoZSB3ZWJDb3JlQnJpZGdlIG1ldGhvZC4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRBbHdheXNT
aG93VmVydGljYWxTY3JvbGxlcjpdKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBXZWJDb3JlRnJh
bWVWaWV3LmguCisgICAgICAgICgtW1dlYlZpZXcgYWx3YXlzU2hvd1ZlcnRpY2FsU2Nyb2xsZXJd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0QWx3YXlzU2hvd0hvcml6b250YWxTY3Jv
bGxlcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgYWx3YXlzU2hvd0hvcml6b250YWxT
Y3JvbGxlcl0pOiBEaXR0by4KKwogMjAwOC0wMy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDk2
MykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbXBvcnQgIldlYkRvY3VtZW50SW50
ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRvY3VtZW50TG9hZGVyTWFjLmgiCiAjaW1wb3J0ICJXZWJE
b3dubG9hZEludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCIK
KyNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJX
ZWJFbGVtZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiV2ViRm9ybURlbGVnYXRlLmgiCiAjaW1w
b3J0ICJXZWJGcmFtZUJyaWRnZS5oIgpAQCAtMTAyMyw3ICsxMDIzLDYgQEAgdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQwogICAgIEZyYW1lVmlldyogY29yZVZpZXcgPSBu
ZXcgRnJhbWVWaWV3KGNvcmVGcmFtZSk7CiAgICAgY29yZUZyYW1lLT5zZXRWaWV3KGNvcmVWaWV3
KTsKICAgICBjb3JlVmlldy0+ZGVyZWYoKTsgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIGNyYXp5
IHJlZmNvdW50aW5nIQotICAgIGNvcmVWaWV3LT5zZXRWaWV3KGRvY3VtZW50Vmlldyk7CiAgICAg
aW50IG1hcmdpbldpZHRoID0gW3YgX21hcmdpbldpZHRoXTsKICAgICBpZiAobWFyZ2luV2lkdGgg
Pj0gMCkKICAgICAgICAgY29yZVZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbldpZHRoKTsKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQkocmV2aXNp
b24gMzA5NjMpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03NiwxOSArNzYsNiBAQAogICAgIFtbV2ViUGx1Z2luRGF0YWJh
c2Ugc2hhcmVkRGF0YWJhc2VdIHJlZnJlc2hdOwogfQogCi0tIChXZWJDb3JlRnJhbWVCcmlkZ2Ug
KilicmlkZ2VGb3JWaWV3OihOU1ZpZXcgKil2Ci17Ci0gICAgTlNWaWV3ICphVmlldyA9IFt2IHN1
cGVydmlld107Ci0gICAgCi0gICAgd2hpbGUgKGFWaWV3KSB7Ci0gICAgICAgIGlmIChbYVZpZXcg
aXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewotICAgICAgICAgICAgcmV0dXJu
IFtbWyhXZWJIVE1MVmlldyAqKWFWaWV3IF9mcmFtZV0gX2RhdGFTb3VyY2VdIF9icmlkZ2VdOwot
ICAgICAgICB9Ci0gICAgICAgIGFWaWV3ID0gW2FWaWV3IHN1cGVydmlld107Ci0gICAgfQotICAg
IHJldHVybiBuaWw7Ci19Ci0KIC0gKE5TU3RyaW5nICopaW5wdXRFbGVtZW50QWx0VGV4dAogewog
ICAgIHJldHVybiBVSV9TVFJJTkdfS0VZKCJTdWJtaXQiLCAiU3VibWl0IChpbnB1dCBlbGVtZW50
KSIsICJhbHQgdGV4dCBmb3IgPGlucHV0PiBlbGVtZW50cyB3aXRoIG5vIGFsdCwgdGl0bGUsIG9y
IHZhbHVlIik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxC
YXJzVmlldy5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5h
bWljU2Nyb2xsQmFyc1ZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0NiArMjYs
MjAgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8QXBwS2l0L05TU2Nyb2xsVmlldy5o
PgorLy8gVGhpcyBpcyBhIFByaXZhdGUgaGVhZGVyIChjb250YWluaW5nIFNQSSksIGRlc3BpdGUg
dGhlIGZhY3QgdGhhdCBpdHMgbmFtZQorLy8gZG9lcyBub3QgY29udGFpbiB0aGUgd29yZCBQcml2
YXRlLgogCi0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGcmFtZVZpZXcuaD4KKy8vIEZJWE1FOiBE
b2VzIFNhZmFyaSByZWFsbHkgbmVlZCB0byB1c2UgdGhpcyBhbnkgbW9yZT8gQXBwS2l0IGFkZGVk
IGF1dG9oaWRlc1Njcm9sbGVycworLy9pbiBQYW50aGVyLCBhbmQgdGhhdCB3YXMgdGhlIG9yaWdp
bmFsIHJlYXNvbiB3ZSBuZWVkZWQgdGhpcyB2aWV3IGluIFNhZmFyaS4KIAotLy8gRklYTUUgMjk4
MDc3OTogVGhpcyBoYXMgZ3Jvd24gdG8gYmUgbW9yZSB0aGFuIGp1c3QgYSBkeW5hbWljIHNjcm9s
bCBiYXIgdmlldywKLS8vIGFuZCBpdCBpcyBubyBsb25nZXIgY29tcGxldGVseSBhcHByb3ByaWF0
ZSBmb3IgdXNlIG91dHNpZGUgb2YgV2ViS2l0LgotCi1AaW50ZXJmYWNlIFdlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlldyA6IE5TU2Nyb2xsVmlldyA8V2ViQ29yZUZyYW1lVmlldz4KLXsKLSAgICBXZWJD
b3JlU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsOwotICAgIFdlYkNvcmVTY3JvbGxiYXJNb2RlIHZTY3Jv
bGw7CitAaW50ZXJmYWNlIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyA6IE5TU2Nyb2xsVmlldyB7
CisgICAgaW50IGhTY3JvbGw7IC8vIEZJWE1FOiBTaG91bGQgYmUgV2ViQ29yZTo6U2Nyb2xsYmFy
TW9kZSBpZiB0aGlzIHdhcyBhbiBPYmpDKysgaGVhZGVyLgorICAgIGludCB2U2Nyb2xsOyAvLyBE
aXR0by4KICAgICBCT09MIGhTY3JvbGxNb2RlTG9ja2VkOwogICAgIEJPT0wgdlNjcm9sbE1vZGVM
b2NrZWQ7CiAgICAgQk9PTCBzdXBwcmVzc0xheW91dDsKICAgICBCT09MIHN1cHByZXNzU2Nyb2xs
ZXJzOwogICAgIEJPT0wgaW5VcGRhdGVTY3JvbGxlcnM7CiB9Ci0KIC0gKHZvaWQpc2V0QWxsb3dz
SG9yaXpvbnRhbFNjcm9sbGluZzooQk9PTClmbGFnOwotLSAoQk9PTClhbGxvd3NIb3Jpem9udGFs
U2Nyb2xsaW5nOwotLSAodm9pZClzZXRBbGxvd3NWZXJ0aWNhbFNjcm9sbGluZzooQk9PTClmbGFn
OwotLSAoQk9PTClhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZzsKLQotLSAodm9pZClzZXRIb3Jpem9u
dGFsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZVNjcm9sbGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09M
KWxvY2s7Ci0tICh2b2lkKXNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZVNjcm9sbGJh
ck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxvY2s7Ci0tICh2b2lkKXNldFNjcm9sbGluZ01vZGU6
KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTClsb2NrOwotCi0tICh2b2lk
KXNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlTG9ja2VkOihCT09MKWxvY2tlZDsKLS0gKHZvaWQp
c2V0VmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkOihCT09MKWxvY2tlZDsKLS0gKHZvaWQpc2V0
U2Nyb2xsaW5nTW9kZXNMb2NrZWQ6KEJPT0wpbW9kZTsKLQotLSAoQk9PTClob3Jpem9udGFsU2Ny
b2xsaW5nTW9kZUxvY2tlZDsKLS0gKEJPT0wpdmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkOwot
Ci0vLyBDb252ZW5pZW5jZSBtZXRob2QgdG8gYWZmZWN0IGJvdGggc2Nyb2xsaW5nIGRpcmVjdGlv
bnMgYXQgb25jZS4KLS0gKHZvaWQpc2V0QWxsb3dzU2Nyb2xsaW5nOihCT09MKWZsYWc7Ci0KLS8v
IFJldHVybnMgWUVTIGlmIGVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNjcm9sbGluZyBp
cyBhbGxvd2VkLgotLSAoQk9PTClhbGxvd3NTY3JvbGxpbmc7Ci0KLS0gKHZvaWQpdXBkYXRlU2Ny
b2xsZXJzOwotLSAodm9pZClzZXRTdXBwcmVzc0xheW91dDogKEJPT0wpZmxhZzsKIEBlbmQKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0JKHJl
dmlzaW9uIDMwOTYzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJz
Vmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTYgQEAKICAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2ltcG9ydCA8V2ViS2l0L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oPgorI2ltcG9y
dCAiV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCIKIAotI2ltcG9ydCA8V2ViS2l0
L1dlYkRvY3VtZW50Lmg+CisjaW1wb3J0ICJXZWJEb2N1bWVudC5oIgogI2ltcG9ydCA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBAaW1wbGVt
ZW50YXRpb24gV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3CiAKLS0gKHZvaWQpc2V0U3VwcHJlc3NM
YXlvdXQ6IChCT09MKWZsYWc7CistICh2b2lkKXNldFN1cHByZXNzTGF5b3V0OihCT09MKWZsYWc7
CiB7CiAgICAgc3VwcHJlc3NMYXlvdXQgPSBmbGFnOwogfQpAQCAtODIsNyArODQsNyBAQAogICAg
ICAgICBCT09MIHNjcm9sbHNWZXJ0aWNhbGx5OwogICAgICAgICBCT09MIHNjcm9sbHNIb3Jpem9u
dGFsbHk7CiAKLSAgICAgICAgaWYgKCFzdXBwcmVzc0xheW91dCAmJiAhc3VwcHJlc3NTY3JvbGxl
cnMgJiYgKGhTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckF1dG8gfHwgdlNjcm9sbCA9PSBXZWJD
b3JlU2Nyb2xsYmFyQXV0bykpIHsKKyAgICAgICAgaWYgKCFzdXBwcmVzc0xheW91dCAmJiAhc3Vw
cHJlc3NTY3JvbGxlcnMgJiYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09
IFNjcm9sbGJhckF1dG8pKSB7CiAgICAgICAgICAgICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5n
LCBiZWZvcmUgY2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgogICAgICAgICAgICAg
Ly8gVGhpcyBmaXhlcyAyOTY5MzY3LCBhbHRob3VnaCBtYXkgaW50cm9kdWNlIGEgc2xvd2Rvd24g
aW4gbGl2ZSByZXNpemUgcGVyZm9ybWFuY2UuCiAgICAgICAgICAgICBOU1ZpZXcgKmRvY3VtZW50
VmlldyA9IFtzZWxmIGRvY3VtZW50Vmlld107CkBAIC05OSwyMiArMTAxLDIyIEBACiAgICAgICAg
ICAgICAgICAgTlNTaXplIGRvY3VtZW50U2l6ZSA9IFtkb2N1bWVudFZpZXcgZnJhbWVdLnNpemU7
CiAgICAgICAgICAgICAgICAgTlNTaXplIGZyYW1lU2l6ZSA9IFtzZWxmIGZyYW1lXS5zaXplOwog
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBXZWJDb3Jl
U2Nyb2xsYmFyQWx3YXlzT24pIHx8Ci0gICAgICAgICAgICAgICAgICAgICh2U2Nyb2xsID09IFdl
YkNvcmVTY3JvbGxiYXJBdXRvICYmIGRvY3VtZW50U2l6ZS5oZWlnaHQgPiBmcmFtZVNpemUuaGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNj
cm9sbGJhckFsd2F5c09uKSB8fAorICAgICAgICAgICAgICAgICAgICAodlNjcm9sbCA9PSBTY3Jv
bGxiYXJBdXRvICYmIGRvY3VtZW50U2l6ZS5oZWlnaHQgPiBmcmFtZVNpemUuaGVpZ2h0KTsKICAg
ICAgICAgICAgICAgICBpZiAoc2Nyb2xsc1ZlcnRpY2FsbHkpCi0gICAgICAgICAgICAgICAgICAg
IHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlz
T24pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaFNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xs
YmFyQXV0byAmJiBkb2N1bWVudFNpemUud2lkdGggKyBbTlNTY3JvbGxlciBzY3JvbGxlcldpZHRo
XSA+IGZyYW1lU2l6ZS53aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9u
dGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgZG9jdW1lbnRTaXplLndpZHRo
ICsgW05TU2Nyb2xsZXIgc2Nyb2xsZXJXaWR0aF0gPiBmcmFtZVNpemUud2lkdGgpOwogICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5
ID0gKGhTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09uKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgKGhTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckF1dG8gJiYgZG9jdW1lbnRT
aXplLndpZHRoID4gZnJhbWVTaXplLndpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
c0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBkb2N1bWVudFNp
emUud2lkdGggPiBmcmFtZVNpemUud2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc2Ny
b2xsc0hvcml6b250YWxseSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNh
bGx5ID0gKHZTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09uKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh2U2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBdXRvICYmIGRv
Y3VtZW50U2l6ZS5oZWlnaHQgKyBbTlNTY3JvbGxlciBzY3JvbGxlcldpZHRoXSA+IGZyYW1lU2l6
ZS5oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAo
dlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGRvY3VtZW50U2l6ZS5oZWlnaHQgKyBb
TlNTY3JvbGxlciBzY3JvbGxlcldpZHRoXSA+IGZyYW1lU2l6ZS5oZWlnaHQpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNj
cm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xsYmFyQXV0bykgPyBo
YXNIb3Jpem9udGFsU2Nyb2xsZXIgOiAoaFNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlz
T24pOwotICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBXZWJDb3Jl
U2Nyb2xsYmFyQXV0bykgPyBoYXNWZXJ0aWNhbFNjcm9sbGVyIDogKHZTY3JvbGwgPT0gV2ViQ29y
ZVNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAo
aFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxlciA6IChoU2Ny
b2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5
ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNWZXJ0aWNhbFNjcm9sbGVyIDogKHZT
Y3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGhh
c1ZlcnRpY2FsU2Nyb2xsZXIgIT0gc2Nyb2xsc1ZlcnRpY2FsbHkpIHsKQEAgLTE3MiwxNSArMTc0
LDE1IEBACiAgICAgaWYgKGhTY3JvbGxNb2RlTG9ja2VkICYmIHZTY3JvbGxNb2RlTG9ja2VkKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmxhZyAmJiB2U2Nyb2xsID09IFdlYkNvcmVTY3Jv
bGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHZTY3JvbGwgPSBXZWJDb3JlU2Nyb2xsYmFyQXV0bzsK
LSAgICBlbHNlIGlmICghZmxhZyAmJiB2U2Nyb2xsICE9IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNP
ZmYpCi0gICAgICAgIHZTY3JvbGwgPSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmOwotCi0gICAg
aWYgKGZsYWcgJiYgaFNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAg
ICBoU2Nyb2xsID0gV2ViQ29yZVNjcm9sbGJhckF1dG87Ci0gICAgZWxzZSBpZiAoIWZsYWcgJiYg
aFNjcm9sbCAhPSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICBoU2Nyb2xsID0g
V2ViQ29yZVNjcm9sbGJhckFsd2F5c09mZjsKKyAgICBpZiAoZmxhZyAmJiB2U2Nyb2xsID09IFNj
cm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgdlNjcm9sbCA9IFNjcm9sbGJhckF1dG87CisgICAg
ZWxzZSBpZiAoIWZsYWcgJiYgdlNjcm9sbCAhPSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAg
IHZTY3JvbGwgPSBTY3JvbGxiYXJBbHdheXNPZmY7CisKKyAgICBpZiAoZmxhZyAmJiBoU2Nyb2xs
ID09IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgaFNjcm9sbCA9IFNjcm9sbGJhckF1dG87
CisgICAgZWxzZSBpZiAoIWZsYWcgJiYgaFNjcm9sbCAhPSBTY3JvbGxiYXJBbHdheXNPZmYpCisg
ICAgICAgIGhTY3JvbGwgPSBTY3JvbGxiYXJBbHdheXNPZmY7CiAKICAgICBbc2VsZiB1cGRhdGVT
Y3JvbGxlcnNdOwogfQpAQCAtMTg4LDE3ICsxOTAsMTcgQEAKIC0gKEJPT0wpYWxsb3dzU2Nyb2xs
aW5nCiB7CiAgICAgLy8gUmV0dXJucyBZRVMgaWYgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGlj
YWwgc2Nyb2xsaW5nIGlzIGFsbG93ZWQuCi0gICAgcmV0dXJuIGhTY3JvbGwgIT0gV2ViQ29yZVNj
cm9sbGJhckFsd2F5c09mZiB8fCB2U2Nyb2xsICE9IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmY7
CisgICAgcmV0dXJuIGhTY3JvbGwgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmIHx8IHZTY3JvbGwgIT0g
U2Nyb2xsYmFyQWx3YXlzT2ZmOwogfQogCiAtICh2b2lkKXNldEFsbG93c0hvcml6b250YWxTY3Jv
bGxpbmc6KEJPT0wpZmxhZwogewogICAgIGlmIChoU2Nyb2xsTW9kZUxvY2tlZCkKICAgICAgICAg
cmV0dXJuOwotICAgIGlmIChmbGFnICYmIGhTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5
c09mZikKLSAgICAgICAgaFNjcm9sbCA9IFdlYkNvcmVTY3JvbGxiYXJBdXRvOwotICAgIGVsc2Ug
aWYgKCFmbGFnICYmIGhTY3JvbGwgIT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09mZikKLSAgICAg
ICAgaFNjcm9sbCA9IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmY7CisgICAgaWYgKGZsYWcgJiYg
aFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAgIGhTY3JvbGwgPSBTY3JvbGxi
YXJBdXRvOworICAgIGVsc2UgaWYgKCFmbGFnICYmIGhTY3JvbGwgIT0gU2Nyb2xsYmFyQWx3YXlz
T2ZmKQorICAgICAgICBoU2Nyb2xsID0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwogICAgIFtzZWxmIHVw
ZGF0ZVNjcm9sbGVyc107CiB9CiAKQEAgLTIwNiwzOSArMjA4LDM5IEBACiB7CiAgICAgaWYgKHZT
Y3JvbGxNb2RlTG9ja2VkKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZsYWcgJiYgdlNjcm9s
bCA9PSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICB2U2Nyb2xsID0gV2ViQ29y
ZVNjcm9sbGJhckF1dG87Ci0gICAgZWxzZSBpZiAoIWZsYWcgJiYgdlNjcm9sbCAhPSBXZWJDb3Jl
U2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICB2U2Nyb2xsID0gV2ViQ29yZVNjcm9sbGJhckFs
d2F5c09mZjsKKyAgICBpZiAoZmxhZyAmJiB2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09mZikK
KyAgICAgICAgdlNjcm9sbCA9IFNjcm9sbGJhckF1dG87CisgICAgZWxzZSBpZiAoIWZsYWcgJiYg
dlNjcm9sbCAhPSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAgIHZTY3JvbGwgPSBTY3JvbGxi
YXJBbHdheXNPZmY7CiAgICAgW3NlbGYgdXBkYXRlU2Nyb2xsZXJzXTsKIH0KIAogLSAoQk9PTClh
bGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nCiB7Ci0gICAgcmV0dXJuIGhTY3JvbGwgIT0gV2ViQ29y
ZVNjcm9sbGJhckFsd2F5c09mZjsKKyAgICByZXR1cm4gaFNjcm9sbCAhPSBTY3JvbGxiYXJBbHdh
eXNPZmY7CiB9CiAKIC0gKEJPT0wpYWxsb3dzVmVydGljYWxTY3JvbGxpbmcKIHsKLSAgICByZXR1
cm4gdlNjcm9sbCAhPSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmOworICAgIHJldHVybiB2U2Ny
b2xsICE9IFNjcm9sbGJhckFsd2F5c09mZjsKIH0KIAotLShXZWJDb3JlU2Nyb2xsYmFyTW9kZSlo
b3Jpem9udGFsU2Nyb2xsaW5nTW9kZQorLSAoU2Nyb2xsYmFyTW9kZSlob3Jpem9udGFsU2Nyb2xs
aW5nTW9kZQogewotICAgIHJldHVybiBoU2Nyb2xsOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
Y3JvbGxiYXJNb2RlPihoU2Nyb2xsKTsKIH0KIAotLShXZWJDb3JlU2Nyb2xsYmFyTW9kZSl2ZXJ0
aWNhbFNjcm9sbGluZ01vZGUKKy0gKFNjcm9sbGJhck1vZGUpdmVydGljYWxTY3JvbGxpbmdNb2Rl
CiB7Ci0gICAgcmV0dXJuIHZTY3JvbGw7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbGJh
ck1vZGU+KHZTY3JvbGwpOwogfQogCi0tICh2b2lkKXNldEhvcml6b250YWxTY3JvbGxpbmdNb2Rl
OihXZWJDb3JlU2Nyb2xsYmFyTW9kZSltb2RlCistICh2b2lkKXNldEhvcml6b250YWxTY3JvbGxp
bmdNb2RlOihTY3JvbGxiYXJNb2RlKW1vZGUKIHsKICAgICBbc2VsZiBzZXRIb3Jpem9udGFsU2Ny
b2xsaW5nTW9kZTptb2RlIGFuZExvY2s6Tk9dOwogfQogCi0tICh2b2lkKXNldEhvcml6b250YWxT
Y3JvbGxpbmdNb2RlOihXZWJDb3JlU2Nyb2xsYmFyTW9kZSltb2RlIGFuZExvY2s6KEJPT0wpbG9j
aworLSAodm9pZClzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZTooU2Nyb2xsYmFyTW9kZSltb2Rl
IGFuZExvY2s6KEJPT0wpbG9jawogewogICAgIGlmIChtb2RlID09IGhTY3JvbGwgfHwgaFNjcm9s
bE1vZGVMb2NrZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI1MSwxMiArMjUzLDEyIEBACiAgICAg
W3NlbGYgdXBkYXRlU2Nyb2xsZXJzXTsKIH0KIAotLSAodm9pZClzZXRWZXJ0aWNhbFNjcm9sbGlu
Z01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUKKy0gKHZvaWQpc2V0VmVydGljYWxTY3Jv
bGxpbmdNb2RlOihTY3JvbGxiYXJNb2RlKW1vZGUKIHsKICAgICBbc2VsZiBzZXRWZXJ0aWNhbFNj
cm9sbGluZ01vZGU6bW9kZSBhbmRMb2NrOk5PXTsKIH0KIAotLSAodm9pZClzZXRWZXJ0aWNhbFNj
cm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTClsb2Nr
CistICh2b2lkKXNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTooU2Nyb2xsYmFyTW9kZSltb2RlIGFu
ZExvY2s6KEJPT0wpbG9jawogewogICAgIGlmIChtb2RlID09IHZTY3JvbGwgfHwgdlNjcm9sbE1v
ZGVMb2NrZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI2OSwxMiArMjcxLDEyIEBACiAgICAgW3Nl
bGYgdXBkYXRlU2Nyb2xsZXJzXTsKIH0KIAotLSAodm9pZClzZXRTY3JvbGxpbmdNb2RlOihXZWJD
b3JlU2Nyb2xsYmFyTW9kZSltb2RlCistICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFNjcm9sbGJh
ck1vZGUpbW9kZQogewogICAgIFtzZWxmIHNldFNjcm9sbGluZ01vZGU6bW9kZSBhbmRMb2NrOk5P
XTsKIH0KIAotLSAodm9pZClzZXRTY3JvbGxpbmdNb2RlOihXZWJDb3JlU2Nyb2xsYmFyTW9kZSlt
b2RlIGFuZExvY2s6KEJPT0wpbG9jaworLSAodm9pZClzZXRTY3JvbGxpbmdNb2RlOihTY3JvbGxi
YXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTClsb2NrCiB7CiAgICAgaWYgKChtb2RlID09IHZTY3Jv
bGwgJiYgbW9kZSA9PSBoU2Nyb2xsKSB8fCAodlNjcm9sbE1vZGVMb2NrZWQgJiYgaFNjcm9sbE1v
ZGVMb2NrZWQpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXZWJEeW5h
bWljU2Nyb2xsQmFyc1ZpZXcuaCIKKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZyYW1lVmlldy5o
PgorCitAaW50ZXJmYWNlIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAoV2ViSW50ZXJuYWwpIDxX
ZWJDb3JlRnJhbWVTY3JvbGxWaWV3PgorCistIChCT09MKWFsbG93c0hvcml6b250YWxTY3JvbGxp
bmc7CistICh2b2lkKXNldEFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nOihCT09MKWZsYWc7CistIChC
T09MKWFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nOworCistICh2b2lkKXNldEhvcml6b250YWxTY3Jv
bGxpbmdNb2RlOihXZWJDb3JlOjpTY3JvbGxiYXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTClsb2Nr
OworLSAodm9pZClzZXRWZXJ0aWNhbFNjcm9sbGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1v
ZGUpbW9kZSBhbmRMb2NrOihCT09MKWxvY2s7CistICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdl
YkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxvY2s7CisKKy0gKHZvaWQp
c2V0SG9yaXpvbnRhbFNjcm9sbGluZ01vZGVMb2NrZWQ6KEJPT0wpbG9ja2VkOworLSAodm9pZClz
ZXRWZXJ0aWNhbFNjcm9sbGluZ01vZGVMb2NrZWQ6KEJPT0wpbG9ja2VkOworLSAodm9pZClzZXRT
Y3JvbGxpbmdNb2Rlc0xvY2tlZDooQk9PTCltb2RlOworCistIChCT09MKWhvcml6b250YWxTY3Jv
bGxpbmdNb2RlTG9ja2VkOworLSAoQk9PTCl2ZXJ0aWNhbFNjcm9sbGluZ01vZGVMb2NrZWQ7CisK
Ky8vIENvbnZlbmllbmNlIG1ldGhvZCB0byBhZmZlY3QgYm90aCBzY3JvbGxpbmcgZGlyZWN0aW9u
cyBhdCBvbmNlLgorLSAodm9pZClzZXRBbGxvd3NTY3JvbGxpbmc6KEJPT0wpZmxhZzsKKworLy8g
UmV0dXJucyBZRVMgaWYgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwgc2Nyb2xsaW5nIGlz
IGFsbG93ZWQuCistIChCT09MKWFsbG93c1Njcm9sbGluZzsKKworLSAodm9pZCl1cGRhdGVTY3Jv
bGxlcnM7CistICh2b2lkKXNldFN1cHByZXNzTGF5b3V0OihCT09MKWZsYWc7CisKK0BlbmQKClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFy
c1ZpZXdJbnRlcm5hbC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2
ZQoKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQkocmV2aXNpb24gMzA5NjMpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW1wb3J0ICJXZWJDbGlwVmlldy5oIgogI2ltcG9ydCAiV2ViRGF0YVNv
dXJjZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYkRvY3VtZW50LmgiCi0jaW1wb3J0ICJXZWJEeW5h
bWljU2Nyb2xsQmFyc1ZpZXcuaCIKKyNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlld0lu
dGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKQEAgLTgzLDkgKzgzLDggQEAgZW51bSB7
CiAgICAgU3BhY2VLZXkgPSAweDAwMjAKIH07CiAKLUBpbnRlcmZhY2UgV2ViRnJhbWVWaWV3IChX
ZWJGcmFtZVZpZXdGaWxlSW50ZXJuYWwpIDxXZWJDb3JlQnJpZGdlSG9sZGVyPgorQGludGVyZmFj
ZSBXZWJGcmFtZVZpZXcgKFdlYkZyYW1lVmlld0ZpbGVJbnRlcm5hbCkgPFdlYkNvcmVGcmFtZVZp
ZXc+CiAtIChmbG9hdClfdmVydGljYWxLZXlib2FyZFNjcm9sbERpc3RhbmNlOwotLSAoV2ViQ29y
ZUZyYW1lQnJpZGdlICopIHdlYkNvcmVCcmlkZ2U7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViRnJh
bWVWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKQEAgLTEyOCw5ICsxMjcsOSBAQCBlbnVtIHsKICAg
ICByZXR1cm4gW1tzZWxmIF9zY3JvbGxWaWV3XSB2ZXJ0aWNhbExpbmVTY3JvbGxdOwogfQogCi0t
IChXZWJDb3JlRnJhbWVCcmlkZ2UgKikgd2ViQ29yZUJyaWRnZQorLSAoRnJhbWUqKV93ZWJfZnJh
bWUKIHsKLSAgICByZXR1cm4gW19wcml2YXRlLT53ZWJGcmFtZSBfYnJpZGdlXTsKKyAgICByZXR1
cm4gY29yZShfcHJpdmF0ZS0+d2ViRnJhbWUpOwogfQogCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQkocmV2aXNpb24gMzA5NjMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDEyIEBACiAjaW1wb3J0ICJXZWJWaWV3SW50
ZXJuYWwuaCIKIAogI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViQmFj
a0ZvcndhcmRMaXN0LmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oIgogI2ltcG9ydCAiV2ViQ2hyb21l
Q2xpZW50LmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudUNsaWVudC5oIgogI2ltcG9ydCAiV2Vi
RE9NT3BlcmF0aW9uc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYkRhdGFiYXNlTWFuYWdlckludGVy
bmFsLmgiCi0jaW1wb3J0ICJXZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgiCiAjaW1wb3J0ICJX
ZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRlZmF1bHRFZGl0aW5nRGVsZWdh
dGUuaCIKICNpbXBvcnQgIldlYkRlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5oIgpAQCAtNDgsNyArNDYs
NyBAQAogI2ltcG9ydCAiV2ViRG93bmxvYWQuaCIKICNpbXBvcnQgIldlYkRvd25sb2FkSW50ZXJu
YWwuaCIKICNpbXBvcnQgIldlYkRyYWdDbGllbnQuaCIKLSNpbXBvcnQgIldlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlldy5oIgorI2ltcG9ydCAiV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwu
aCIKICNpbXBvcnQgIldlYkVkaXRpbmdEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRWRpdG9yQ2xp
ZW50LmgiCiAjaW1wb3J0ICJXZWJGb3JtRGVsZWdhdGVQcml2YXRlLmgiCkBAIC01OCw3ICs1Niw2
IEBACiAjaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb24uaCIKICNpbXBvcnQgIldlYkhUTUxW
aWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIldlYkljb25EYXRhYmFzZS5oIgogI2ltcG9ydCAiV2ViSWNvbkRhdGFiYXNlSW50ZXJuYWwu
aCIKICNpbXBvcnQgIldlYkluc3BlY3Rvci5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yQ2xpZW50
LmgiCkBAIC0xNDY1LDI3ICsxNDYyLDI3IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSoKIHsKICAgICBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgKnNjcm9sbHZpZXcg
PSBbW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xsVmlld107CiAgICAgaWYgKGZs
YWcpIHsKLSAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxTY3JvbGxpbmdNb2RlOldlYkNv
cmVTY3JvbGxiYXJBbHdheXNPbiBhbmRMb2NrOllFU107CisgICAgICAgIFtzY3JvbGx2aWV3IHNl
dFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTpTY3JvbGxiYXJBbHdheXNPbiBhbmRMb2NrOllFU107CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxTY3JvbGxpbmdNb2Rl
TG9ja2VkOk5PXTsKLSAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxTY3JvbGxpbmdNb2Rl
OldlYkNvcmVTY3JvbGxiYXJBdXRvXTsKKyAgICAgICAgW3Njcm9sbHZpZXcgc2V0VmVydGljYWxT
Y3JvbGxpbmdNb2RlOlNjcm9sbGJhckF1dG9dOwogICAgIH0KIH0KIAogLSAoQk9PTClhbHdheXNT
aG93VmVydGljYWxTY3JvbGxlcgogewogICAgIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAqc2Ny
b2xsdmlldyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XTsKLSAg
ICByZXR1cm4gW3Njcm9sbHZpZXcgdmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkXSAmJiBbc2Ny
b2xsdmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVdID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNP
bjsKKyAgICByZXR1cm4gW3Njcm9sbHZpZXcgdmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkXSAm
JiBbc2Nyb2xsdmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVdID09IFNjcm9sbGJhckFsd2F5c09u
OwogfQogCiAtICh2b2lkKXNldEFsd2F5c1Nob3dIb3Jpem9udGFsU2Nyb2xsZXI6KEJPT0wpZmxh
ZwogewogICAgIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAqc2Nyb2xsdmlldyA9IFtbW3NlbGYg
bWFpbkZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XTsKICAgICBpZiAoZmxhZykgewotICAg
ICAgICBbc2Nyb2xsdmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZTpXZWJDb3JlU2Nyb2xs
YmFyQWx3YXlzT24gYW5kTG9jazpZRVNdOworICAgICAgICBbc2Nyb2xsdmlldyBzZXRIb3Jpem9u
dGFsU2Nyb2xsaW5nTW9kZTpTY3JvbGxiYXJBbHdheXNPbiBhbmRMb2NrOllFU107CiAgICAgfSBl
bHNlIHsKICAgICAgICAgW3Njcm9sbHZpZXcgc2V0SG9yaXpvbnRhbFNjcm9sbGluZ01vZGVMb2Nr
ZWQ6Tk9dOwotICAgICAgICBbc2Nyb2xsdmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZTpX
ZWJDb3JlU2Nyb2xsYmFyQXV0b107CisgICAgICAgIFtzY3JvbGx2aWV3IHNldEhvcml6b250YWxT
Y3JvbGxpbmdNb2RlOlNjcm9sbGJhckF1dG9dOwogICAgIH0KIH0KIApAQCAtMTQ5OSw3ICsxNDk2
LDcgQEAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKgogLSAoQk9PTClh
bHdheXNTaG93SG9yaXpvbnRhbFNjcm9sbGVyCiB7CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3ICpzY3JvbGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZp
ZXddOwotICAgIHJldHVybiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxvY2tl
ZF0gJiYgW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdID09IFdlYkNvcmVTY3Jv
bGxiYXJBbHdheXNPbjsKKyAgICByZXR1cm4gW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGlu
Z01vZGVMb2NrZWRdICYmIFtzY3JvbGx2aWV3IGhvcml6b250YWxTY3JvbGxpbmdNb2RlXSA9PSBT
Y3JvbGxiYXJBbHdheXNPbjsKIH0KIAogLSAodm9pZClfc2V0SW5WaWV3U291cmNlTW9kZTooQk9P
TClmbGFnCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19677</attachid>
            <date>2008-03-11 14:34:59 -0700</date>
            <delta_ts>2008-03-11 18:25:44 -0700</delta_ts>
            <desc>revised patch that removes use of the bridge to go from an NSView to a WebCore::Frame</desc>
            <filename>WebCoreNSViewPatch.txt</filename>
            <type>text/plain</type>
            <size>75933</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDA4LTAzLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHNp
bXBsaWZ5IE1hYyBjb2RlIGZvciBTY3JvbGxWaWV3LCBzaW5jZSBpdCdzIHVzZWQgb25seSBmb3Ig
RnJhbWVWaWV3CisgICAgICAgICAgYW5kIG5vdCBpbiB0d28gZGlmZmVyZW50IG1vZGVzIGxpa2Ug
aXQgd2FzIGhpc3RvcmljYWxseQorICAgICAgICAtIHJlbW92ZSBjb2RlIGRlcGVuZGluZyBvbiB0
aGUgYnJpZGdlIHRvIGdldCBmcm9tIGFuIE5TVmlldyB0byBhIFdlYkNvcmU6OkZyYW1lCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxJbnB1
dEVsZW1lbnQgX3JlY3RPblNjcmVlbl0pOiBnZXREb2N1bWVudFZpZXcgLT4gZG9jdW1lbnRWaWV3
LgorCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QuY3BwOgorICAgICAgICAoY3Jl
YXRlUm9vdE9iamVjdCk6IEluc3RlYWQgb2YgdXNpbmcgV2ViQ29yZVZpZXdGYWN0b3J5IHRvIGZp
bmQgdGhlIGZyYW1lIGdpdmVuCisgICAgICAgIGFuZCBOU1ZpZXcsIHVzZSB0aGUgV2ViQ29yZUZy
YW1lVmlldyBpbnRlcmZhY2UgdG8gZG8gaXQuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKTogZ2V0RG9jdW1lbnRW
aWV3IC0+IGRvY3VtZW50Vmlldy4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250
cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSk6IERpdHRvLgorCisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDogRml4ZWQgY29tbWVudC4KKworICAgICAgICAqIHBhZ2UvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkcmF3Tm9kZUhpZ2hsaWdodCk6IFJlbW92ZWQgdW5lZWRlZCB0eXBlY2FzdHMKKyAgICAgICAg
dG8gU2Nyb2xsVmlldyogc2luY2UgRnJhbWVWaWV3IGlzIGRlcml2ZWQgZnJvbSBTY3JvbGxWaWV3
LgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmlldyk6IGdldERvY3VtZW50VmlldyAt
PiBkb2N1bWVudFZpZXcuCisgICAgICAgICogcGFnZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6aW1hZ2VGcm9tUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBhZ2Uv
bWFjL1dlYkNvcmVBWE9iamVjdC5tbToKKyAgICAgICAgKC1bV2ViQ29yZUFYT2JqZWN0IHBvc2l0
aW9uXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJDb3JlQVhPYmplY3QgZG9BWFRleHRNYXJrZXJG
b3JQb3NpdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVBWE9iamVjdCByZW5kZXJl
ckZvclZpZXc6XSk6IFVwZGF0ZWQgY29kZSB0aGF0IHVzZWQgdG8gdXNlCisgICAgICAgIFdlYkNv
cmVCcmlkZ2VIb2xkZXIgdG8gdXNlIFdlYkNvcmVGcmFtZVZpZXcgaW5zdGVhZC4KKworICAgICAg
ICAqIHBhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZy
YW1lQnJpZGdlIGNvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnByaW50
SGVpZ2h0Ol0pOgorICAgICAgICBnZXREb2N1bWVudFZpZXcgLT4gZG9jdW1lbnRWaWV3LgorCisg
ICAgICAgICogcGFnZS9tYWMvV2ViQ29yZUZyYW1lVmlldy5oOiBSZW1vdmVkIHRoZSBXZWJDb3Jl
U2Nyb2xsYmFyTW9kZSB0eXBlOyB3ZSBqdXN0CisgICAgICAgIHVzZSBXZWJDb3JlOjpTY3JvbGxi
YXJNb2RlIGRpcmVjdGx5LiBSZW5hbWVkIHRoZSBXZWJDb3JlRnJhbWVWaWV3IHByb3RvY29sIHRv
CisgICAgICAgIFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcsIHNpbmNlIGl0J3MgYSBwcm90b2NvbCBm
b3IgdGhlIHNjcm9sbCB2aWV3LCBub3QgdGhlCisgICAgICAgIGZyYW1lIHZpZXcgaXRzZWxmLiBS
ZXBsYWNlZCBXZWJDb3JlQnJpZGdlSG9sZGVyIHByb3RvY29sIHdpdGggV2ViQ29yZUZyYW1lVmll
dworICAgICAgICBwcm90b2NvbCwgd2hpY2ggcmV0dXJucyBhIFdlYkNvcmU6OkZyYW1lIGRpcmVj
dGx5IHJhdGhlciB0aGFuIGEgYnJpZGdlLgorCisgICAgICAgICogcGFnZS9tYWMvV2ViQ29yZVZp
ZXdGYWN0b3J5Lmg6IEVsaW1pbmF0ZWQgdGhlIGJyaWRnZUZvclZpZXcgbWV0aG9kLgorCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOiBNb3ZlZCB0aGUgY29uc3RydWN0b3IgYW5kIGRl
c3RydWN0b3Igb3V0IG9mIHRoZQorICAgICAgICBjbGFzcy1zcGVjaWZpYyAjaWYgYmxvY2tzLiBS
ZW5hbWVkIE1hYy1zcGVjaWZpYyBmdW5jdGlvbiB0aGF0IGdldHMgdGhlCisgICAgICAgIE5TVmll
dyBmb3IgZnJvbSBnZXREb2N1bWVudFZpZXcgdG8gZG9jdW1lbnRWaWV3IGFuZCBhIHNjcm9sbFZp
ZXcgZnVuY3Rpb24KKyAgICAgICAgdGhhdCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlbHkgY2xhc3Nl
ZCBOU1Njcm9sbFZpZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oOiBDaGFuZ2VkIHR5cGUgb2YgcGFyZW50V2lkZ2V0IHRvIEZyYW1lVmlldworICAgICAgICBp
bnN0ZWFkIG9mIFdpZGdldC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGU6OmNyZWF0ZVFUTW92aWVWaWV3KTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYXN0LgorCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudTo6c2hvdyk6IGdldERvY3VtZW50VmlldyAtPiBkb2N1bWVudFZpZXcuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpTY3JvbGxWaWV3KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojp+U2Nyb2xsVmlldyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsVmlldyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZVdp
ZHRoKTogUmVtb3ZlZCB1bnVzZWQgbm9uLU5TU2Nyb2xsVmlldyBjYXNlLgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RDb25zaWRlcmluZ0V4dGVybmFsU2Ny
b2xsZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1dp
ZHRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c0hlaWdo
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNYKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJzaXZlbHkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRWU2Nyb2xsYmFyTW9kZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0SFNjcm9sbGJhck1vZGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp2U2Nyb2xsYmFyTW9kZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6aFNjcm9sbGJhck1vZGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnN1cHByZXNzU2Nyb2xsYmFycyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6YWRkQ2hpbGQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6ZG9jdW1lbnRWaWV3KTogUmVuYW1lZCBhbmQgcmVt
b3ZlZCB1bnVzZWQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbGJh
clVuZGVyTW91c2UpOiBSZW1vdmVkIGluY29ycmVjdCBjb21tZW50LgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Z2V0T3V0
ZXJWaWV3KTogVXBkYXRlIGZvciBwcm90b2NvbCBuYW1lIGNoYW5nZS4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludENoZWNrYm94KTogZ2V0RG9jdW1lbnRWaWV3IC0+IGRvY3VtZW50Vmlldy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOiBEaXR0by4K
KwogMjAwOC0wMy0xMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgIGlmICghW3NlbGYgX0hUTUxJbnB1
dEVsZW1lbnRdLT5kb2N1bWVudCgpLT52aWV3KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LSAgICBOU1ZpZXcqIHZpZXcgPSBbc2VsZiBfSFRNTElucHV0RWxlbWVudF0tPmRvY3VtZW50KCkt
PnZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCk7CisgICAgTlNWaWV3KiB2aWV3ID0gW3NlbGYgX0hU
TUxJbnB1dEVsZW1lbnRdLT5kb2N1bWVudCgpLT52aWV3KCktPmRvY3VtZW50VmlldygpOwogICAg
IHJlc3VsdCA9IFt2aWV3IGNvbnZlcnRSZWN0OnJlc3VsdCB0b1ZpZXc6bmlsXTsKICAgICByZXN1
bHQub3JpZ2luID0gW1t2aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpyZXN1bHQub3Jp
Z2luXTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9q
c29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5jcHAJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjIsMTggKzIyLDE3IEBACiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJqbmlfanNvYmplY3QuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZVZpZXdGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgImpuaV9ydW50aW1lLmgiCiAjaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRl
ICJranNfcHJveHkuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgogI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUgPGtqcy9KU0dsb2JhbE9iamVj
dC5oPgogI2luY2x1ZGUgPGtqcy9pbnRlcnByZXRlci5oPgpAQCAtNDM5LDEyICs0MzgsMTYgQEAg
dm9pZCBKYXZhSlNPYmplY3Q6OmZpbmFsaXplKCkgY29uc3QKIAogc3RhdGljIFBhc3NSZWZQdHI8
Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUpCiB7Ci0gICAg
TlNWaWV3ICp2aWV3ID0gKE5TVmlldyAqKW5hdGl2ZUhhbmRsZTsKLSAgICBXZWJDb3JlRnJhbWVC
cmlkZ2UgKmJyaWRnZSA9IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGJyaWRn
ZUZvclZpZXc6dmlld107Ci0gICAgaWYgKCFicmlkZ2UpCisgICAgRnJhbWUqIGZyYW1lID0gMDsK
KyAgICBmb3IgKE5TVmlldyAqdmlldyA9IChOU1ZpZXcgKiluYXRpdmVIYW5kbGU7IHZpZXc7IHZp
ZXcgPSBbdmlldyBzdXBlcnZpZXddKSB7CisgICAgICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJv
dG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgeworICAgICAgICAgICAgTlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+ICp3ZWJDb3JlRnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8TlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+Kj4odmlldyk7CisgICAgICAgICAgICBmcmFtZSA9IFt3ZWJDb3Jl
RnJhbWVWaWV3IF93ZWJfZnJhbWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgRnJhbWUq
IGZyYW1lID0gW2JyaWRnZSBfZnJhbWVdOwogICAgIHJldHVybiBmcmFtZS0+Y3JlYXRlUm9vdE9i
amVjdChuYXRpdmVIYW5kbGUsIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysr
IFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBFZGl0b3I6OnBhc3RlKCkKICAgICAgICAgcmV0dXJuOwogICAgIERv
Y0xvYWRlciogbG9hZGVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCk7CiAgICAg
bG9hZGVyLT5zZXRBbGxvd1N0YWxlUmVzb3VyY2VzKHRydWUpOwotICAgIFt2aWV3LT5nZXREb2N1
bWVudFZpZXcoKSB0cnlUb1BlcmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0aDpuaWxdOworICAg
IFt2aWV3LT5kb2N1bWVudFZpZXcoKSB0cnlUb1BlcmZvcm06QHNlbGVjdG9yKHBhc3RlOikgd2l0
aDpuaWxdOwogICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9s
bGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgU2VsZWN0aW9u
Q29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIKICAgICAgICAgICAgIEludFJlY3Qgc2VsZWN0aW9u
UmVjdCA9IGNhcmV0UmVjdCgpOwogICAgICAgICAgICAgSW50UmVjdCB2aWV3UmVjdCA9IHJlbmRl
clZpZXctPnZpZXdSZWN0KCk7CiAgICAgICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHJl
bmRlclZpZXctPnZpZXcoKS0+ZnJhbWVWaWV3KCk7IAotICAgICAgICAgICAgTlNWaWV3ICp2aWV3
ID0gZnJhbWVWaWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICAgICAgICAgIE5TVmlldyAqdmll
dyA9IGZyYW1lVmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgICAgICAgICBpZiAodmlldykgewog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9jYXRpb24oZnJhbWVWaWV3LT5jb252
ZXJ0VG9TY3JlZW5Db29yZGluYXRlKHZpZXcsIHNlbGVjdGlvblJlY3QubG9jYXRpb24oKSkpOwog
ICAgICAgICAgICAgICAgIHZpZXdSZWN0LnNldExvY2F0aW9uKGZyYW1lVmlldy0+Y29udmVydFRv
U2NyZWVuQ29vcmRpbmF0ZSh2aWV3LCB2aWV3UmVjdC5sb2NhdGlvbigpKSk7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFdpZGdldFRv
VXBkYXRlKFJlbmRlclBhcnRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZVdpZGdldFRvVXBkYXRl
KFJlbmRlclBhcnRPYmplY3QqKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQg
YmUgdXNlZCBieSBhbGwgcGxhdGZvcm1zLCBidXQgY3VycmVudGx5IGRlcGVuZHMgb24gU2Nyb2xs
Vmlldzo6Y2hpbGRyZW4sCi0gICAgLy8gd2hpY2ggbm90IGFsbCBtZXRob2RzIGhhdmUuIE9uY2Ug
RnJhbWVWaWV3IGFuZCBTY3JvbGxWaWV3IGFyZSBtZXJnZWQsIHRoaXMgI2lmIHNob3VsZCBiZSBy
ZW1vdmVkLgorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IGFs
bCBwbGF0Zm9ybXMsIGJ1dCBjdXJyZW50bHkgZGVwZW5kcyBvbiBTY3JvbGxWaWV3OjpjaGlsZHJl
biwKKyAgICAvLyB3aGljaCBub3QgYWxsIHBsYXRmb3JtcyBoYXZlLiBPbmNlIEZyYW1lVmlldyBh
bmQgU2Nyb2xsVmlldyBhcmUgbWVyZ2VkLCB0aGlzICNpZiBzaG91bGQgYmUgcmVtb3ZlZC4KICNp
ZiBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCiAgICAgdm9p
ZCBsYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyMCw3ICsxNjIwLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaQogICAgICAgICByZWN0cy5h
cHBlbmQobm9kZVJlY3QpOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBvdmVybGF5UmVjdCA9IHN0YXRp
Y19jYXN0PFNjcm9sbFZpZXcqPih2aWV3KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgRmxv
YXRSZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAKICAgICBp
ZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKG5vZGVSZWN0KSAmJiAhbm9kZVJlY3QuY29udGFpbnMo
ZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKSB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQ7CkBAIC0xNjI5LDcgKzE2MjksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdO
b2RlSGlnaGxpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9oaWdobGlnaHRlZE5vZGUtPnBhcmVudCgpKTsKICAgICAgICAgZWxlbWVu
dC0+c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwotICAgICAgICBvdmVybGF5UmVjdCA9IHN0YXRp
Y19jYXN0PFNjcm9sbFZpZXcqPih2aWV3KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgfQogCiAgICAg
Y29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7Cklu
ZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMzA5NjMpCisrKyBX
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUZy
YW1lQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTc5LDEwICsxNzgsMTEg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJh
bWUtPnZpZXcoKSkKLSAgICAgICAgaWYgKE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gZnJhbWVWaWV3
LT5nZXREb2N1bWVudFZpZXcoKSkKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2Zy
YW1lLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gZnJhbWVW
aWV3LT5kb2N1bWVudFZpZXcoKSkKICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5mb2N1c05T
Vmlldyhkb2N1bWVudFZpZXcpOwotICAgIAorICAgIH0KKwogICAgIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQkocmV2aXNpb24gMzA5NjMpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgTlNTdHJpbmcqIEZyYW1lOjptYXRjaExh
YmVsc0FnYWluc3RFbGVtZQogCiBOU0ltYWdlKiBGcmFtZTo6aW1hZ2VGcm9tUmVjdChOU1JlY3Qg
cmVjdCkgY29uc3QKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBkLT5tX3ZpZXctPmdldERvY3VtZW50
VmlldygpOworICAgIE5TVmlldyogdmlldyA9IGQtPm1fdmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAg
ICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIGlmICghW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihkcmF3U2luZ2xlUmVjdDopXSkKSW5kZXg6IFdlYkNvcmUv
cGFnZS9tYWMvV2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZUFYT2JqZWN0Lm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZUFYT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBACiAj
aW1wb3J0ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5o
IgogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2Uu
aCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0
cmFzLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKQEAgLTc0NSw3ICs3NDQsNyBA
QCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqCiAgICAgLy8gVGhlIENv
Y29hIGFjY2Vzc2liaWxpdHkgQVBJIHdhbnRzIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4KICAgICBO
U1BvaW50IHBvaW50ID0gTlNNYWtlUG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpOwogICAg
IGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPnZpZXcoKSAmJiBtX3JlbmRlcmVyLT52aWV3
KCktPmZyYW1lVmlldygpKSB7Ci0gICAgICAgIE5TVmlldyogdmlldyA9IG1fcmVuZGVyZXItPnZp
ZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpOworICAgICAgICBOU1ZpZXcqIHZp
ZXcgPSBtX3JlbmRlcmVyLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKTsKICAg
ICAgICAgcG9pbnQgPSBbW3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOiBbdmlldyBj
b252ZXJ0UG9pbnQ6IHBvaW50IHRvVmlldzpuaWxdXTsKICAgICB9CiAKQEAgLTEzOTYsMTEgKzEz
OTUsMTEgQEAgc3RhdGljIE5TU3RyaW5nICpuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZQogICAgIHJl
dHVybiBbcmVzdWx0U3RyaW5nIGxlbmd0aF0gPiAwID8gcmVzdWx0U3RyaW5nIDogbmlsOwogfQog
Ci0tIChpZClkb0FYVGV4dE1hcmtlckZvclBvc2l0aW9uOiAoTlNQb2ludCkgcG9pbnQKKy0gKGlk
KWRvQVhUZXh0TWFya2VyRm9yUG9zaXRpb246KE5TUG9pbnQpcG9pbnQKIHsKICAgICAvLyBjb252
ZXJ0IGFic29sdXRlIHBvaW50IHRvIHZpZXcgY29vcmRpbmF0ZXMKICAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IFtzZWxmIHRvcEZyYW1lVmlld107Ci0gICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVW
aWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICBOU1ZpZXcqIHZpZXcgPSBmcmFtZVZpZXctPmRv
Y3VtZW50VmlldygpOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBbc2VsZiB0b3BSZW5k
ZXJlcl07CiAgICAgTm9kZSogaW5uZXJOb2RlID0gMDsKICAgICAKQEAgLTE0MzcsNyArMTQzNiw3
IEBAIHN0YXRpYyBOU1N0cmluZyAqbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICByZW5kZXJlciA9IGRvY3VtZW50LT5yZW5kZXJlcigpOwogICAgICAg
ICBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOwotICAgICAgICB2
aWV3ID0gZnJhbWVWaWV3LT5nZXREb2N1bWVudFZpZXcoKTsKKyAgICAgICAgdmlldyA9IGZyYW1l
Vmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAgfQogICAgIAogICAgIC8vIGdldCBwb3NpdGlvbiB3
aXRoaW4gdGhlIG5vZGUKQEAgLTI1NTcsMjQgKzI1NTYsMTcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiBlbmRPZlN0eWxlUmFuZ2UgKAogCiAtIChSZW5kZXJPYmplY3QqKXJlbmRlcmVyRm9yVmll
dzooTlNWaWV3Kil2aWV3CiB7Ci0gICAgLy8gY2hlY2sgZm9yIFdlYktpdCBOU1ZpZXcgdGhhdCBs
ZXRzIHVzIGZpbmQgaXRzIGJyaWRnZQotICAgIFdlYkNvcmVGcmFtZUJyaWRnZSogYnJpZGdlID0g
bmlsOwotICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVC
cmlkZ2VIb2xkZXIpXSkgewotICAgICAgICBOU1ZpZXc8V2ViQ29yZUJyaWRnZUhvbGRlcj4qIGJy
aWRnZUhvbGRlciA9IChOU1ZpZXc8V2ViQ29yZUJyaWRnZUhvbGRlcj4qKXZpZXc7Ci0gICAgICAg
IGJyaWRnZSA9IFticmlkZ2VIb2xkZXIgd2ViQ29yZUJyaWRnZV07Ci0gICAgfQorICAgIGlmICgh
W3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pCisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgRnJhbWUqIGZyYW1lID0gW2JyaWRnZSBfZnJhbWVdOwor
ICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJDb3Jl
RnJhbWVWaWV3PiopdmlldzsKKyAgICBGcmFtZSogZnJhbWUgPSBbZnJhbWVWaWV3IF93ZWJfZnJh
bWVdOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAg
ICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpOworICAgIE5vZGUqIG5vZGUg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAgICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBub2RlLT5y
ZW5kZXJlcigpOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0J
KHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkNv
cmVGcmFtZUJyaWRnZSAqYnJpZGdlCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcGFn
ZXM7CiAKLSAgICBOU1ZpZXcqIGRvY3VtZW50VmlldyA9IHZpZXctPmdldERvY3VtZW50Vmlldygp
OworICAgIE5TVmlldyogZG9jdW1lbnRWaWV3ID0gdmlldy0+ZG9jdW1lbnRWaWV3KCk7CiAgICAg
aWYgKCFkb2N1bWVudFZpZXcpCiAgICAgICAgIHJldHVybiBwYWdlczsKIApJbmRleDogV2ViQ29y
ZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVWaWV3LmgJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMzIg
KzIzLDIxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi1AY2xhc3MgV2ViQ29yZUZyYW1lQnJp
ZGdlOwotCi0vLyBUaGlzIHByb3RvY29sIGlzIGEgd2F5IGZvciBhbiBOU1Njcm9sbFZpZXcgdG8g
ZGV0ZWN0Ci0vLyB0aGF0IHRoZSB2aWV3IGl0J3MgZW1iZWRkZWQgaW4gaXMgb25lIHRoYXQgc2hv
dWxkIGJlIHJlc2l6ZWQgd2hlbiB0aGUKLS8vIHNjcm9sbCB2aWV3IGlzIHJlc2l6ZWQuCi0KLXR5
cGVkZWYgZW51bSB7Ci0gICAgV2ViQ29yZVNjcm9sbGJhckF1dG8sCi0gICAgV2ViQ29yZVNjcm9s
bGJhckFsd2F5c09mZiwKLSAgICBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT24KLX0gV2ViQ29yZVNj
cm9sbGJhck1vZGU7Ci0KLUBwcm90b2NvbCBXZWJDb3JlRnJhbWVWaWV3Ci0tICh2b2lkKXNldEhv
cml6b250YWxTY3JvbGxpbmdNb2RlOihXZWJDb3JlU2Nyb2xsYmFyTW9kZSltb2RlOwotLSAodm9p
ZClzZXRWZXJ0aWNhbFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGU7Ci0t
ICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGU7Ci0KLS0g
KFdlYkNvcmVTY3JvbGxiYXJNb2RlKWhvcml6b250YWxTY3JvbGxpbmdNb2RlOwotLSAoV2ViQ29y
ZVNjcm9sbGJhck1vZGUpdmVydGljYWxTY3JvbGxpbmdNb2RlOworI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKK30KKworQHBy
b3RvY29sIFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcKKy0gKHZvaWQpc2V0SG9yaXpvbnRhbFNjcm9s
bGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZTsKKy0gKHZvaWQpc2V0VmVydGlj
YWxTY3JvbGxpbmdNb2RlOihXZWJDb3JlOjpTY3JvbGxiYXJNb2RlKW1vZGU7CistICh2b2lkKXNl
dFNjcm9sbGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZTsKKy0gKFdlYkNvcmU6
OlNjcm9sbGJhck1vZGUpaG9yaXpvbnRhbFNjcm9sbGluZ01vZGU7CistIChXZWJDb3JlOjpTY3Jv
bGxiYXJNb2RlKXZlcnRpY2FsU2Nyb2xsaW5nTW9kZTsKIC0gKHZvaWQpc2V0U2Nyb2xsQmFyc1N1
cHByZXNzZWQ6KEJPT0wpc3VwcHJlc3NlZCByZXBhaW50T25VbnN1cHByZXNzOihCT09MKXJlcGFp
bnQ7Ci0KIEBlbmQKIAotLy8gVGhpcyBwcm90b2NvbCBpcyBhIHdheSBmb3IgV2ViQ29yZSB0byBn
YWluIGFjY2VzcyB0byBpdHMgaW5mb3JtYXRpb24KLS8vIGFib3V0IFdlYktpdCBzdWJjbGFzc2Vz
IG9mIE5TVmlldwotQHByb3RvY29sIFdlYkNvcmVCcmlkZ2VIb2xkZXIKLS0gKFdlYkNvcmVGcmFt
ZUJyaWRnZSAqKSB3ZWJDb3JlQnJpZGdlOworQHByb3RvY29sIFdlYkNvcmVGcmFtZVZpZXcKKy0g
KFdlYkNvcmU6OkZyYW1lKilfd2ViX2ZyYW1lOwogQGVuZApJbmRleDogV2ViQ29yZS9wYWdlL21h
Yy9XZWJDb3JlVmlld0ZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVWaWV3RmFjdG9yeS5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsyMyw2IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi1AY2xhc3MgTlNBcnJheTsKLUBjbGFzcyBOU0RpY3Rpb25h
cnk7Ci1AY2xhc3MgTlNNZW51OwotQGNsYXNzIE5TU3RyaW5nOwotQGNsYXNzIE5TVmlldzsKLUBj
bGFzcyBXZWJDb3JlRnJhbWVCcmlkZ2U7CiBAY2xhc3MgV2ViQ29yZVRleHRNYXJrZXI7CiBAY2xh
c3MgV2ViQ29yZVRleHRNYXJrZXJSYW5nZTsKIApAQCAtMTEzLDggKzEwNyw2IEBACiAtIChBWFVJ
RWxlbWVudFJlZilBWFVJRWxlbWVudEZvckVsZW1lbnQ6KGlkKWVsZW1lbnQ7CiAtICh2b2lkKXVu
cmVnaXN0ZXJVbmlxdWVJZEZvclVJRWxlbWVudDooaWQpZWxlbWVudDsKIAotLSAoV2ViQ29yZUZy
YW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopYVZpZXc7Ci0KIC0gKE5TU3RyaW5n
ICopQVhXZWJBcmVhVGV4dDsKIC0gKE5TU3RyaW5nICopQVhMaW5rVGV4dDsKIC0gKE5TU3RyaW5n
ICopQVhMaXN0TWFya2VyVGV4dDsKQEAgLTEyNywxMSArMTE5LDcgQEAKIEBlbmQKIAogQGludGVy
ZmFjZSBXZWJDb3JlVmlld0ZhY3RvcnkgOiBOU09iamVjdAotewotfQotCiArIChXZWJDb3JlVmll
d0ZhY3RvcnkgKilzaGFyZWRGYWN0b3J5OwotCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViQ29yZVZp
ZXdGYWN0b3J5IChTdWJjbGFzc1Jlc3BvbnNpYmlsaXR5KSA8V2ViQ29yZVZpZXdGYWN0b3J5PgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJXaWRnZXQuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCisjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9f
T0JKQ19fCitAcHJvdG9jb2wgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldzsKKyNlbmRpZgorCiAjaWYg
UExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bWVu
dDsKICNlbmRpZgpAQCAtNTIsNiArNTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCB7CiAgICAgcHVibGljOgorICAgICAgICBT
Y3JvbGxWaWV3KCk7CisgICAgICAgIH5TY3JvbGxWaWV3KCk7CisKICAgICAgICAgaW50IHZpc2li
bGVXaWR0aCgpIGNvbnN0OwogICAgICAgICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OwogICAg
ICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CkBAIC04NywyMCArOTQs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZSgpOwogCiAgICAg
ICAgIC8vIEV2ZW50IGNvb3JkaW5hdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZSBjb29yZGlu
YXRlIHNwYWNlIG9mIGEgd2luZG93IHRoYXQgY29udGFpbnMKLSAgICAgICAgLy8gdGhlIGVudGly
ZSB3aWRnZXQgaGllcmFyY2h5LiAgSXQgaXMgdXAgdG8gdGhlIHBsYXRmb3JtIHRvIGRlY2lkZSB3
aGF0IHRoZSBwcmVjaXNlIGRlZmluaXRpb24KLSAgICAgICAgLy8gb2YgY29udGFpbmluZyB3aW5k
b3cgaXMuICAoRm9yIGV4YW1wbGUgb24gTWFjIGl0IGlzIHRoZSBjb250YWluaW5nIE5TV2luZG93
LikKKyAgICAgICAgLy8gdGhlIGVudGlyZSB3aWRnZXQgaGllcmFyY2h5LiBJdCBpcyB1cCB0byB0
aGUgcGxhdGZvcm0gdG8gZGVjaWRlIHdoYXQgdGhlIHByZWNpc2UgZGVmaW5pdGlvbgorICAgICAg
ICAvLyBvZiBjb250YWluaW5nIHdpbmRvdyBpcy4gKEZvciBleGFtcGxlIG9uIE1hYyBpdCBpcyB0
aGUgY29udGFpbmluZyBOU1dpbmRvdy4pCiAgICAgICAgIEludFBvaW50IHdpbmRvd1RvQ29udGVu
dHMoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICAgICAgSW50UG9pbnQgY29udGVudHNUb1dp
bmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICAKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIC8vIE9uIE1hYyBvbmx5IGJlY2F1c2Ugb2YgZmxpcHBlZCBOU1dpbmRvdyB5LWNv
b3JkaW5hdGVzLCB3ZSBoYXZlIHRvIGhhdmUgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uLgogICAg
ICAgICBJbnRSZWN0IHdpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAg
ICAgICBJbnRSZWN0IGNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UmVjdCYpIGNvbnN0OwotI2Vs
c2UKLSAgICAgICAgLy8gT3RoZXIgcGxhdGZvcm1zIGNhbiBqdXN0IGltcGxlbWVudCB0aGVzZSBo
ZWxwZXIgbWV0aG9kcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBwb2ludCBjb252ZXJzaW9uIG1l
dGhvZHMuCi0gICAgICAgIEludFJlY3QgY29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KGNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlv
bigpKSwgcmVjdC5zaXplKCkpOyB9Ci0gICAgICAgIEludFJlY3Qgd2luZG93VG9Db250ZW50cyhj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KHdpbmRvd1RvQ29udGVu
dHMocmVjdC5sb2NhdGlvbigpKSwgcmVjdC5zaXplKCkpOyB9Ci0jZW5kaWYKIAogICAgICAgICB2
b2lkIHNldFN0YXRpY0JhY2tncm91bmQoYm9vbCk7CiAKQEAgLTExNiwxNCArMTE1LDE2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5KTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgTlNWaWV3
KiBnZXREb2N1bWVudFZpZXcoKSBjb25zdDsKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQg
X19PQkpDX18KKyAgICBwdWJsaWM6CisgICAgICAgIE5TVmlldyogZG9jdW1lbnRWaWV3KCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBOU1Njcm9sbFZpZXc8V2ViQ29yZUZyYW1lU2Ny
b2xsVmlldz4qIHNjcm9sbFZpZXcoKSBjb25zdDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KQotICAgICAgICBTY3JvbGxWaWV3KCk7Ci0gICAgICAgIH5TY3JvbGxWaWV3KCk7Ci0KKyAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKICAgICAg
ICAgCkBAIC0xNjMsOSArMTY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHVEspCi0gICAgICAgIFNjcm9sbFZpZXcoKTsKLSAgICAgICAgflNjcm9sbFZp
ZXcoKTsKLQorICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEd0a0FkanVzdG1l
bnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGopOwogICAgICAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9D
aGlsZChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMTkwLDkgKzE4
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0g
ICAgICAgIFNjcm9sbFZpZXcoKTsKLSAgICAgICAgflNjcm9sbFZpZXcoKTsKLQorICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihj
b25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMjIyLDkgKzIxOSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAg
ICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFdYKQotICAgICAgICBTY3JvbGxWaWV3KCk7Ci0gICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAg
cHVibGljOgogICAgICAgICBIYXNoU2V0PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmF0aXZlV2luZG93KHd4V2luZG93KiB3aW5kb3cpOwogCkBAIC0yMzcs
NiArMjM0LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIH07CiAKKyNpZiAh
UExBVEZPUk0oTUFDKQorCisvLyBPbiBNYWMgb25seSBiZWNhdXNlIG9mIGZsaXBwZWQgTlNXaW5k
b3cgeS1jb29yZGluYXRlcywgd2UgaGF2ZSB0byBoYXZlIGEgc3BlY2lhbCBpbXBsZW1lbnRhdGlv
bi4KKy8vIE90aGVyIHBsYXRmb3JtcyBjYW4ganVzdCBpbXBsZW1lbnQgdGhlc2UgaGVscGVyIG1l
dGhvZHMgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcG9pbnQgY29udmVyc2lvbiBtZXRob2RzLgor
CitpbmxpbmUgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoY29udGVudHNUb1dpbmRvdyhy
ZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7Cit9CisKK2lubGluZSBJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW50UmVjdCh3aW5kb3dUb0NvbnRlbnRzKHJlY3QubG9jYXRpb24oKSksIHJlY3Qu
c2l6ZSgpKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFNjcm9sbFZpZXdfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuaAkocmV2aXNpb24gMzA5NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE1ICszNSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEludFNpemU7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZTsKIGNsYXNzIFN0cmluZzsKLWNsYXNzIFdpZGdldDsKIAotY2xhc3MgTWVkaWFQbGF5ZXJDbGll
bnQKLXsKK2NsYXNzIE1lZGlhUGxheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5N
ZWRpYVBsYXllckNsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllck5ldHdv
cmtTdGF0ZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKSB7IH0KQEAgLTY0LDggKzYzLDggQEAgcHVibGlj
OgogICAgIEludFNpemUgbmF0dXJhbFNpemUoKTsKICAgICBib29sIGhhc1ZpZGVvKCk7CiAgICAg
Ci0gICAgV2lkZ2V0KiBwYXJlbnRXaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFdpZGdl
dDsgfQotICAgIHZvaWQgc2V0UGFyZW50V2lkZ2V0KFdpZGdldCogcGFyZW50KSB7IG1fcGFyZW50
V2lkZ2V0ID0gcGFyZW50OyB9CisgICAgRnJhbWVWaWV3KiBwYXJlbnRXaWRnZXQoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudFdpZGdldDsgfQorICAgIHZvaWQgc2V0UGFyZW50V2lkZ2V0KEZyYW1l
VmlldyogcGFyZW50KSB7IG1fcGFyZW50V2lkZ2V0ID0gcGFyZW50OyB9CiAgICAgCiAgICAgSW50
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmIHIpOwpAQCAtMTI0LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
TWVkaWFQbGF5ZXJDbGllbnQqIG1fbWVkaWFQbGF5ZXJDbGllbnQ7CiAgICAgTWVkaWFQbGF5ZXJQ
cml2YXRlKiBtX3ByaXZhdGU7Ci0gICAgV2lkZ2V0KiBtX3BhcmVudFdpZGdldDsKKyAgICBGcmFt
ZVZpZXcqIG1fcGFyZW50V2lkZ2V0OwogICAgIEludFJlY3QgbV9yZWN0OwogICAgIGJvb2wgbV92
aXNpYmxlOwogICAgIGZsb2F0IG1fcmF0ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lv
biAzMDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW1wb3J0ICJC
bG9ja0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAi
S1VSTC5oIgotI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAj
aW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogI2ltcG9ydCA8UVRLaXQvUVRLaXQuaD4KQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZTo6Y3JlYXRlUVRNb3ZpZVZpCiAKICAgICBtX3F0TW92aWVWaWV3LmFkb3B0
TlMoW1tRVE1vdmllVmlldyBhbGxvY10gaW5pdF0pOwogICAgIHNldFJlY3QobV9wbGF5ZXItPnJl
Y3QoKSk7Ci0gICAgTlNWaWV3KiBwYXJlbnRWaWV3ID0gc3RhdGljX2Nhc3Q8U2Nyb2xsVmlldyo+
KG1fcGxheWVyLT5tX3BhcmVudFdpZGdldCktPmdldERvY3VtZW50VmlldygpOworICAgIE5TVmll
dyogcGFyZW50VmlldyA9IG1fcGxheWVyLT5tX3BhcmVudFdpZGdldC0+ZG9jdW1lbnRWaWV3KCk7
CiAgICAgW3BhcmVudFZpZXcgYWRkU3VidmlldzptX3F0TW92aWVWaWV3LmdldCgpXTsKICNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIHNldERlbGVnYXRlOiBpc24ndCBhIHB1YmxpYyBj
YWxsIGluIFRpZ2VyLCBzbyB1c2UgcGVyZm9ybVNlbGVjdG9yIHRvIGtlZXAgdGhlIGNvbXBpbGVy
IGhhcHB5CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAz
MDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmIHIsIEYKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgbnVtSXRlbXMgPT0gMiAmJiAhY2xpZW50
KCktPnNob3VsZFBvcE92ZXIoKSAmJiAhW1ttX3BvcHVwLmdldCgpIGl0ZW1BdEluZGV4OjFdIGlz
RW5hYmxlZF0pCiAgICAgICAgIGluZGV4ID0gMDsKIAotICAgIE5TVmlldyogdmlldyA9IHYtPmdl
dERvY3VtZW50VmlldygpOworICAgIE5TVmlldyogdmlldyA9IHYtPmRvY3VtZW50VmlldygpOwog
CiAgICAgW21fcG9wdXAuZ2V0KCkgYXR0YWNoUG9wVXBXaXRoRnJhbWU6ciBpblZpZXc6dmlld107
CiAgICAgW21fcG9wdXAuZ2V0KCkgc2VsZWN0SXRlbUF0SW5kZXg6aW5kZXhdOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTQ3ICsyNiw5OSBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgog
I2ltcG9ydCAiRmxvYXRSZWN0LmgiCiAjaW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJCbG9j
a0V4Y2VwdGlvbnMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFt
ZVZpZXcuaCIKIAotLyoKLSAgICBUaGlzIGNsYXNzIGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIGFj
dHVhbGx5IGVtdWxhdGUgdGhlIFF0IFNjcm9sbFZpZXcuCi0gICAgSXQgZG9lcyBwcm92aWRlIGFu
IGltcGxlbWVudGF0aW9uIHRoYXQga2h0bWwgd2lsbCB1c2UgdG8gaW50ZXJhY3Qgd2l0aAotICAg
IFdlYktpdCdzIFdlYkZyYW1lVmlldyBkb2N1bWVudFZpZXcgYW5kIG91ciBOU1Njcm9sbFZpZXcg
c3ViY2xhc3MuCi0KLSAgICBTY3JvbGxWaWV3J3MgdmlldyBpcyBhIE5TU2Nyb2xsVmlldyAob3Ig
c3ViY2xhc3Mgb2YgTlNTY3JvbGxWaWV3KQotICAgIGluIG1vc3QgY2FzZXMuIFRoYXQgc2Nyb2xs
dmlldyBpcyBhIHN1YnZpZXcgb2YgYW4KLSAgICBXZWJDb3JlRnJhbWVWaWV3LiBUaGUgV2ViQ29y
ZUZyYW1lVmlldydzIGRvY3VtZW50VmlldyB3aWxsIGFsc28gYmUKLSAgICB0aGUgc2Nyb2xsIHZp
ZXcncyBkb2N1bWVudFZpZXcuCi0gICAgCi0gICAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBzaXpl
IGlzIHRoZSBmcmFtZSBzaXplLiAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcK
LSAgICBjb3JyZXNwb25kcyB0byB0aGUgZnJhbWUgY29udGVudCBzaXplLiAgVGhlIHNjcm9sbHZp
ZXcgaXRzZWxmIGlzIGF1dG9zaXplZCB0byB0aGUKLSAgICBXZWJDb3JlRnJhbWVWaWV3J3Mgc2l6
ZSAoc2VlIFdpZGdldDo6cmVzaXplKS4KLSovCit1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWludCBTY3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAor
U2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiB7Ci0gICAgTlNTY3JvbGxWaWV3ICp2aWV3ID0gKE5T
U2Nyb2xsVmlldyAqKWdldFZpZXcoKTsKK30KIAorU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQor
eworfQorCitpbmxpbmUgTlNTY3JvbGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3Jv
bGxWaWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWdldFZpZXcoKSB8fCBb
Z2V0VmlldygpIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKTsKKyAgICBBU1NF
UlQoIWdldFZpZXcoKSB8fCBbZ2V0VmlldygpIGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2wo
V2ViQ29yZUZyYW1lU2Nyb2xsVmlldyldKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlNTY3Jv
bGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICo+KGdldFZpZXcoKSk7Cit9CisKK2ludCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAorewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNs
YXNzXV0pCi0gICAgICAgIHJldHVybiAoaW50KVt2aWV3IGRvY3VtZW50VmlzaWJsZVJlY3RdLnNp
emUud2lkdGg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKGludClbdmlldyBib3VuZHNdLnNp
emUud2lkdGg7CisgICAgcmV0dXJuIFtzY3JvbGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0u
c2l6ZS53aWR0aDsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgcmV0dXJu
IDA7CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBO
U1Njcm9sbFZpZXcgKnZpZXcgPSAoTlNTY3JvbGxWaWV3ICopZ2V0VmlldygpOwotICAgIAogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFz
czpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiAoaW50KVt2aWV3IGRvY3Vt
ZW50VmlzaWJsZVJlY3RdLnNpemUuaGVpZ2h0OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChp
bnQpW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodDsKKyAgICByZXR1cm4gW3Njcm9sbFZpZXcoKSBk
b2N1bWVudFZpc2libGVSZWN0XS5zaXplLmhlaWdodDsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAogICAgIHJldHVybiAwOwogfQogCiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6
dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKLSAgICBOU1Njcm9sbFZpZXcgKnZpZXcgPSAo
TlNTY3JvbGxWaWV3ICopZ2V0VmlldygpOyAKLSAgICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsgCi0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xsVmlldyBj
bGFzc11dKSAKLSAgICAgICAgcmV0dXJuIFt2aWV3IGRvY3VtZW50VmlzaWJsZVJlY3RdOyAKLSAg
ICBlbHNlIAotICAgICAgICByZXR1cm4gW3ZpZXcgdmlzaWJsZVJlY3RdOyAKKyAgICByZXR1cm4g
W3Njcm9sbFZpZXcoKSBkb2N1bWVudFZpc2libGVSZWN0XTsgCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsgCi0KICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKIEZsb2F0UmVjdCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3RDb25zaWRlcmluZ0V4dGVybmFsU2Nyb2xsZXJz
KCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKE5T
VmlldyAqZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpKQotICAgICAgICByZXR1cm4gW2RvY1Zp
ZXcgdmlzaWJsZVJlY3RdOworICAgIHJldHVybiBbZG9jdW1lbnRWaWV3KCkgdmlzaWJsZVJlY3Rd
OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CiB9CiAKLQogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdAogewotICAg
IE5TVmlldyAqZG9jVmlldywgKnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgZG9jVmlldyA9IGdldERv
Y3VtZW50VmlldygpOwotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlm
IChkb2NWaWV3KQotICAgICAgICByZXR1cm4gKGludClbZG9jVmlldyBib3VuZHNdLnNpemUud2lk
dGg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKGludClbdmlldyBib3VuZHNdLnNpemUud2lk
dGg7CisgICAgcmV0dXJuIFtkb2N1bWVudFZpZXcoKSBib3VuZHNdLnNpemUud2lkdGg7CiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Ny
b2xsVmlldzo6Y29udGVudHNIZWlnaHQoKSBjb25zdAogewotICAgIE5TVmlldyAqZG9jVmlldywg
KnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpOwotCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmIChkb2NWaWV3KQotICAgICAg
ICByZXR1cm4gKGludClbZG9jVmlldyBib3VuZHNdLnNpemUuaGVpZ2h0OwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIChpbnQpW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodDsKKyAgICByZXR1cm4g
W2RvY3VtZW50VmlldygpIGJvdW5kc10uc2l6ZS5oZWlnaHQ7CiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6Y29udGVu
dHNYKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05T
U2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gKGludClbKE5TU2Nyb2xsVmlldyAq
KXZpZXcgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLng7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gKGludClbdmlldyB2aXNpYmxlUmVjdF0ub3JpZ2luLng7CisgICAgcmV0dXJuIFtzY3Jv
bGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLng7CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBpbnQgU2Nyb2xsVmlldzo6Y29u
dGVudHNZKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICByZXR1cm4gKGludClbKE5TU2Nyb2xsVmll
dyAqKXZpZXcgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLnk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gKGludClbdmlldyB2aXNpYmxlUmVjdF0ub3JpZ2luLnk7CisgICAgcmV0dXJuIFtz
Y3JvbGxWaWV3KCkgZG9jdW1lbnRWaXNpYmxlUmVjdF0ub3JpZ2luLnk7CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQogICAgIHJldHVybiAwOwogfQogCiBJbnRTaXplIFNjcm9sbFZp
ZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgTlNWaWV3ICp2aWV3ID0gZ2V0Vmlldygp
OwotICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcg
aXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBJbnRQ
b2ludChbWyhOU1Njcm9sbFZpZXcgKil2aWV3IGNvbnRlbnRWaWV3XSB2aXNpYmxlUmVjdF0ub3Jp
Z2luKSAtIEludFBvaW50KCk7CisgICAgcmV0dXJuIEludFBvaW50KFtbc2Nyb2xsVmlldygpIGNv
bnRlbnRWaWV3XSB2aXNpYmxlUmVjdF0ub3JpZ2luKSAtIEludFBvaW50KCk7CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gSW50U2l6ZSgpOwogfQpAQCAtMTgxLDEx
NiArMTMzLDY2IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXIKICAg
ICBOU1JlY3QgcmVjdCA9IHI7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0g
ICAgTlNWaWV3ICpkb2NWaWV3OwotICAgIE5TVmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0g
ICAgZG9jVmlldyA9IGdldERvY3VtZW50VmlldygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAg
ICB2aWV3ID0gZG9jVmlldzsKLQotICAgIE5TVmlldyAqb3JpZ2luYWxWaWV3ID0gdmlldzsKLSAg
ICB3aGlsZSAodmlldykgeworICAgIE5TVmlldyAqb3JpZ2luYWxWaWV3ID0gZG9jdW1lbnRWaWV3
KCk7CisgICAgZm9yIChOU1ZpZXcgKnZpZXcgPSBvcmlnaW5hbFZpZXc7IHZpZXc7IHZpZXcgPSBb
dmlldyBzdXBlcnZpZXddKSB7CiAgICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltOU0Ns
aXBWaWV3IGNsYXNzXV0pIHsKICAgICAgICAgICAgIE5TQ2xpcFZpZXcgKmNsaXBWaWV3ID0gKE5T
Q2xpcFZpZXcgKil2aWV3OwogICAgICAgICAgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbY2xp
cFZpZXcgZG9jdW1lbnRWaWV3XTsKICAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgc2Nyb2xsUmVj
dFRvVmlzaWJsZTpbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6b3JpZ2lu
YWxWaWV3XV07CiAgICAgICAgIH0KLQotICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsK
ICAgICB9Ci0KICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNldENvbnRlbnRzUG9zKGludCB4LCBpbnQgeSkKIHsKLSAgICB4ID0gKHggPCAwKSA/
IDAgOiB4OwotICAgIHkgPSAoeSA8IDApID8gMCA6IHk7Ci0gICAgTlNQb2ludCBwID0gIE5TTWFr
ZVBvaW50KHgseSk7Ci0KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgTlNW
aWV3ICpkb2NWaWV3OwotICAgIE5TVmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0gICAgZG9j
VmlldyA9IGdldERvY3VtZW50VmlldygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3
ID0gZG9jVmlldzsKLSAgICBbdmlldyBzY3JvbGxQb2ludDpwXTsKKyAgICBbZG9jdW1lbnRWaWV3
KCkgc2Nyb2xsUG9pbnQ6TlNNYWtlUG9pbnQobWF4KDAsIHgpLCBtYXgoMCwgeSkpXTsKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3Jv
bGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgdk1vZGUpCiB7Ci0gICAgTlNWaWV3KiB2aWV3ID0gZ2V0
VmlldygpOwotCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGlmIChbdmll
dyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgewotICAg
ICAgICBOU1ZpZXc8V2ViQ29yZUZyYW1lVmlldz4qIGZyYW1lVmlldyA9IChOU1ZpZXc8V2ViQ29y
ZUZyYW1lVmlldz4qKXZpZXc7Ci0gICAgICAgIFtmcmFtZVZpZXcgc2V0VmVydGljYWxTY3JvbGxp
bmdNb2RlOiAoV2ViQ29yZVNjcm9sbGJhck1vZGUpdk1vZGVdOwotICAgIH0KKyAgICBbc2Nyb2xs
VmlldygpIHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTp2TW9kZV07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRIU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJNb2RlIGhNb2RlKQogewotICAgIE5TVmlldyogdmlldyA9IGdldFZpZXcoKTsKLQog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3ZpZXcgY29uZm9ybXNU
b1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAgICAgICAgTlNWaWV3
PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+
Kil2aWV3OwotICAgICAgICBbZnJhbWVWaWV3IHNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlOiAo
V2ViQ29yZVNjcm9sbGJhck1vZGUpaE1vZGVdOwotICAgIH0KKyAgICBbc2Nyb2xsVmlldygpIHNl
dEhvcml6b250YWxTY3JvbGxpbmdNb2RlOmhNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKFNjcm9sbGJh
ck1vZGUgbW9kZSkKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBnZXRWaWV3KCk7Ci0KICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGNvbmZvcm1zVG9Qcm90b2Nv
bDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKSB7Ci0gICAgICAgIE5TVmlldzxXZWJDb3Jl
RnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiopdmlldzsK
LSAgICAgICAgW2ZyYW1lVmlldyBzZXRTY3JvbGxpbmdNb2RlOiAoV2ViQ29yZVNjcm9sbGJhck1v
ZGUpbW9kZV07Ci0gICAgfQorICAgIFtzY3JvbGxWaWV3KCkgc2V0U2Nyb2xsaW5nTW9kZTptb2Rl
XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OnZTY3JvbGxiYXJNb2RlKCkgY29uc3QKIHsKLSAgICBOU1ZpZXcqIHZpZXcgPSBn
ZXRWaWV3KCk7Ci0KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2
aWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViQ29yZUZyYW1lVmlldyldKSB7Ci0g
ICAgICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKE5TVmlldzxXZWJD
b3JlRnJhbWVWaWV3PiopdmlldzsKLSAgICAgICAgcmV0dXJuIChTY3JvbGxiYXJNb2RlKVtmcmFt
ZVZpZXcgdmVydGljYWxTY3JvbGxpbmdNb2RlXTsKLSAgICB9CisgICAgcmV0dXJuIFtzY3JvbGxW
aWV3KCkgdmVydGljYWxTY3JvbGxpbmdNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwotCiAgICAgcmV0dXJuIFNjcm9sbGJhckF1dG87CiB9CiAKIFNjcm9sbGJhck1vZGUgU2Ny
b2xsVmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25zdAogewotICAgIE5TVmlldyogdmlldyA9IGdl
dFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3Zp
ZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAg
ICAgICAgTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNv
cmVGcmFtZVZpZXc+Kil2aWV3OwotICAgICAgICByZXR1cm4gKFNjcm9sbGJhck1vZGUpW2ZyYW1l
VmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZV07Ci0gICAgfQorICAgIHJldHVybiBbc2Nyb2xs
VmlldygpIGhvcml6b250YWxTY3JvbGxpbmdNb2RlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotCiAgICAgcmV0dXJuIFNjcm9sbGJhckF1dG87CiB9CiAKLXZvaWQgU2Nyb2xsVmll
dzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJvb2wgc3VwcHJlc3NlZCwgIGJvb2wgcmVwYWludE9uVW5z
dXBwcmVzcykKK3ZvaWQgU2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJvb2wgc3VwcHJl
c3NlZCwgYm9vbCByZXBhaW50T25VbnN1cHByZXNzKQogewotICAgIE5TVmlldyogdmlldyA9IGdl
dFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBpZiAoW3Zp
ZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3KV0pIHsKLSAg
ICAgICAgTlNWaWV3PFdlYkNvcmVGcmFtZVZpZXc+KiBmcmFtZVZpZXcgPSAoTlNWaWV3PFdlYkNv
cmVGcmFtZVZpZXc+Kil2aWV3OwotICAgICAgICBbZnJhbWVWaWV3IHNldFNjcm9sbEJhcnNTdXBw
cmVzc2VkOiBzdXBwcmVzc2VkCi0gICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRPblVuc3Vw
cHJlc3M6IHJlcGFpbnRPblVuc3VwcHJlc3NdOwotICAgIH0KKyAgICBbc2Nyb2xsVmlldygpIHNl
dFNjcm9sbEJhcnNTdXBwcmVzc2VkOnN1cHByZXNzZWQKKyAgICAgICAgICAgICAgICAgICAgICBy
ZXBhaW50T25VbnN1cHByZXNzOnJlcGFpbnRPblVuc3VwcHJlc3NdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTI5OCwxOCArMjAwLDEzIEBAIHZvaWQgU2Nyb2xsVmll
dzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQgIT0gdGhpcyk7
CiAKLSAgICBOU1ZpZXcgKnRoaXNWaWV3ID0gZ2V0VmlldygpOwotICAgIE5TVmlldyAqdGhpc0Rv
Y1ZpZXcgPSBnZXREb2N1bWVudFZpZXcoKTsKLSAgICBpZiAodGhpc0RvY1ZpZXcpCi0gICAgICAg
IHRoaXNWaWV3ID0gdGhpc0RvY1ZpZXc7Ci0KICNpZm5kZWYgTkRFQlVHCi0gICAgTlNWaWV3ICpz
dWJ2aWV3ID0gY2hpbGQtPmdldE91dGVyVmlldygpOwotICAgIAorICAgIE5TVmlldyAqc3Vidmll
dyA9IGNoaWxkLT5nZXRPdXRlclZpZXcoKTsgICAgCiAgICAgTE9HKEZyYW1lcywgIkFkZGluZyAl
cCAlQCB3aXRoIHNpemUgdyAlZCBoICVkXG4iLCBzdWJ2aWV3LAogICAgICAgICBbKGlkKVtzdWJ2
aWV3IGNsYXNzXSBjbGFzc05hbWVdLCAoaW50KVtzdWJ2aWV3IGZyYW1lXS5zaXplLndpZHRoLCAo
aW50KVtzdWJ2aWV3IGZyYW1lXS5zaXplLmhlaWdodCk7CiAjZW5kaWYKLSAgICBjaGlsZC0+YWRk
VG9TdXBlcnZpZXcodGhpc1ZpZXcpOworCisgICAgY2hpbGQtPmFkZFRvU3VwZXJ2aWV3KGRvY3Vt
ZW50VmlldygpKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNo
aWxkKQpAQCAtMzIwLDM2ICsyMTcsMTcgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChX
aWRnZXQqIGNoaQogdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50IGgp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGludCBfdyA9IHc7Ci0g
ICAgaW50IF9oID0gaDsKLQotICAgIExPRyhGcmFtZXMsICIlcCAlQCBhdCB3ICVkIGggJWRcbiIs
IGdldFZpZXcoKSwgWyhpZClbZ2V0VmlldygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBoKTsKLSAg
ICBOU1ZpZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6
W05TU2Nyb2xsVmlldyBjbGFzc11dKXsKLSAgICAgICAgdmlldyA9IGdldERvY3VtZW50Vmlldygp
OwotICAgICAgICAKLSAgICAgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwg
dmlldywgWyhpZClbdmlldyBjbGFzc10gY2xhc3NOYW1lXSwgdywgaCk7Ci0gICAgICAgIGlmIChf
dyA8IDApCi0gICAgICAgICAgICBfdyA9IDA7Ci0gICAgICAgIGlmIChfaCA8IDApCi0gICAgICAg
ICAgICBfaCA9IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgTlNTaXplIHRlbXBTaXplID0geyBf
dywgX2ggfTsgLy8gd29ya2Fyb3VuZCBmb3IgNDIxMzMxNAotICAgICAgICBbdmlldyBzZXRGcmFt
ZVNpemU6dGVtcFNpemVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc2l6ZSAoX3csIF9oKTsK
LSAgICB9CisgICAgTE9HKEZyYW1lcywgIiVwICVAIGF0IHcgJWQgaCAlZFxuIiwgZG9jdW1lbnRW
aWV3KCksIFsoaWQpW2RvY3VtZW50VmlldygpIGNsYXNzXSBjbGFzc05hbWVdLCB3LCBoKTsgICAg
ICAgICAgICAKKyAgICBOU1NpemUgdGVtcFNpemUgPSB7IG1heCgwLCB3KSwgbWF4KDAsIGgpIH07
IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBbZG9jdW1lbnRWaWV3KCkgc2V0RnJhbWVT
aXplOnRlbXBTaXplXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IEludFJlY3QgJnJlY3QsIGJvb2wgbm93
KQordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0LCBi
b29sIG5vdykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU1Zp
ZXcgKnZpZXcgPSBnZXRWaWV3KCk7Ci0KLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNT
Y3JvbGxWaWV3IGNsYXNzXV0pCi0gICAgICAgIHZpZXcgPSBnZXREb2N1bWVudFZpZXcoKTsKKyAg
ICBOU1ZpZXcgKnZpZXcgPSBkb2N1bWVudFZpZXcoKTsKIAogICAgIE5TUmVjdCB2aXNpYmxlUmVj
dCA9IHZpc2libGVDb250ZW50UmVjdCgpOwogCkBAIC0zODQsMTA3ICsyNjIsNTQgQEAgdm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGUoKQogSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgY29udGVudHNQb2ludCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1ZpZXcgKmRvY1ZpZXc7Ci0gICAgTlNWaWV3ICp2
aWV3ID0gZ2V0VmlldygpOyAgICAKLSAgICAgCi0gICAgZG9jVmlldyA9IGdldERvY3VtZW50Vmll
dygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3ID0gZG9jVmlldzsKLSAgICAKICAg
ICBOU1BvaW50IHRlbXBQb2ludCA9IHsgY29udGVudHNQb2ludC54KCksIGNvbnRlbnRzUG9pbnQu
eSgpIH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKLSAgICBOU1BvaW50IG5wID0gW3ZpZXcg
Y29udmVydFBvaW50OnRlbXBQb2ludCB0b1ZpZXc6IG5pbF07Ci0gICAgcmV0dXJuIEludFBvaW50
KG5wKTsKLQorICAgIHJldHVybiBJbnRQb2ludChbZG9jdW1lbnRWaWV3KCkgY29udmVydFBvaW50
OnRlbXBQb2ludCB0b1ZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAKICAgICByZXR1cm4gSW50UG9pbnQoKTsKIH0KIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6
d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNWaWV3ICpkb2NWaWV3OwotICAgIE5T
VmlldyAqdmlldyA9IGdldFZpZXcoKTsgICAgCi0KLSAgICBkb2NWaWV3ID0gZ2V0RG9jdW1lbnRW
aWV3KCk7Ci0gICAgaWYgKGRvY1ZpZXcpCi0gICAgICAgIHZpZXcgPSBkb2NWaWV3OwotICAgIAog
ICAgIE5TUG9pbnQgdGVtcFBvaW50ID0geyBwb2ludC54KCksIHBvaW50LnkoKSB9OyAvLyB3b3Jr
YXJvdW5kIGZvciA0MjEzMzE0Ci0gICAgTlNQb2ludCBucCA9IFt2aWV3IGNvbnZlcnRQb2ludDp0
ZW1wUG9pbnQgZnJvbVZpZXc6IG5pbF07Ci0KLSAgICByZXR1cm4gSW50UG9pbnQobnApOwotCisg
ICAgcmV0dXJuIEludFBvaW50KFtkb2N1bWVudFZpZXcoKSBjb252ZXJ0UG9pbnQ6dGVtcFBvaW50
IGZyb21WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KICAgICBy
ZXR1cm4gSW50UG9pbnQoKTsKIH0KIAogSW50UmVjdCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2lu
ZG93KGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkgY29uc3QKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBOU1ZpZXcqIGRvY1ZpZXc7Ci0gICAgTlNWaWV3KiB2
aWV3ID0gZ2V0VmlldygpOyAgICAKLSAgICAgCi0gICAgZG9jVmlldyA9IGdldERvY3VtZW50Vmll
dygpOwotICAgIGlmIChkb2NWaWV3KQotICAgICAgICB2aWV3ID0gZG9jVmlldzsKLSAgICAKLSAg
ICBOU1JlY3QgbnIgPSBbdmlldyBjb252ZXJ0UmVjdDpjb250ZW50c1JlY3QgdG9WaWV3OiBuaWxd
OwotICAgIHJldHVybiBJbnRSZWN0KG5yKTsKLQorICAgIHJldHVybiBJbnRSZWN0KFtkb2N1bWVu
dFZpZXcoKSBjb252ZXJ0UmVjdDpjb250ZW50c1JlY3QgdG9WaWV3Om5pbF0pOwogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAog
SW50UmVjdCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgTlNWaWV3
KiBkb2NWaWV3OwotICAgIE5TVmlldyogdmlldyA9IGdldFZpZXcoKTsgICAgCi0KLSAgICBkb2NW
aWV3ID0gZ2V0RG9jdW1lbnRWaWV3KCk7Ci0gICAgaWYgKGRvY1ZpZXcpCi0gICAgICAgIHZpZXcg
PSBkb2NWaWV3OwotICAgIAotICAgIE5TUmVjdCBuciA9IFt2aWV3IGNvbnZlcnRSZWN0OnJlY3Qg
ZnJvbVZpZXc6IG5pbF07Ci0KLSAgICByZXR1cm4gSW50UmVjdChucik7Ci0KKyAgICByZXR1cm4g
SW50UmVjdChbZG9jdW1lbnRWaWV3KCkgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgcmV0dXJuIEludFJlY3QoKTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzZXRTdGF0aWNCYWNrZ3JvdW5kKGJvb2wgYikKK3ZvaWQg
U2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIHN0YXRpY0JhY2tncm91bmQpCiB7
Ci0gICAgTlNTY3JvbGxWaWV3ICp2aWV3ID0gKE5TU2Nyb2xsVmlldyAqKWdldFZpZXcoKTsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xh
c3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKQotICAgICAgICBbW3ZpZXcgY29udGVudFZpZXddIHNl
dENvcGllc09uU2Nyb2xsOiAhYl07CisgICAgW1tzY3JvbGxWaWV3KCkgY29udGVudFZpZXddIHNl
dENvcGllc09uU2Nyb2xsOiFzdGF0aWNCYWNrZ3JvdW5kXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi1OU1ZpZXcgKlNjcm9sbFZpZXc6OmdldERvY3VtZW50VmlldygpIGNv
bnN0CitOU1ZpZXcgKlNjcm9sbFZpZXc6OmRvY3VtZW50VmlldygpIGNvbnN0CiB7Ci0gICAgaWQg
dmlldyA9IGdldFZpZXcoKTsKLQogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb2N1bWVudFZpZXcpXSkg
Ci0gICAgICAgIHJldHVybiBbdmlldyBkb2N1bWVudFZpZXddOworICAgIHJldHVybiBbc2Nyb2xs
VmlldygpIGRvY3VtZW50Vmlld107CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKICAgICByZXR1cm4gbmlsOwogfQogCi1QbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6
c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQp
CitQbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQogewotICAgIC8vIE9uIE1hYywgdGhlIFNjcm9sbFZpZXcg
aXMgcmVhbGx5IHRoZSAiZG9jdW1lbnQiLCBzbyBldmVudHMgd2lsbCBuZXZlciBmbG93IGludG8g
aXQgdG8gZ2V0IHRvIHRoZSBzY3JvbGxlcnMuCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQ5NSw3
ICszMjAsNyBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKIAogdm9pZCBTY3Jv
bGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCiB7Ci0gICAgLy8gRG8gbm90
aGluZy4gIE5TU2Nyb2xsVmlldyBoYW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9yIHVzLgorICAg
IC8vIERvIG5vdGhpbmcuIE5TU2Nyb2xsVmlldyBoYW5kbGVzIGRvaW5nIHRoZSBzY3JvbGwgZm9y
IHVzLgogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiAz
MDk2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDEwICsyMDAsMTEgQEAgdm9pZCBXaWRnZXQ6OnNldFZpZXcoTlNWaWV3KiB2aWV3
KQogCiBOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKIHsKLSAgICAvLyBJZiB0
aGlzIHdpZGdldCdzIHZpZXcgaXMgYSBXZWJDb3JlRnJhbWVWaWV3IHRoZSB3ZSByZXNpemUgaXRz
IGNvbnRhaW5pbmcgdmlldywgYSBXZWJGcmFtZVZpZXcuCi0KICAgICBOU1ZpZXcqIHZpZXcgPSBk
YXRhLT52aWV3LmdldCgpOwotICAgIGlmIChbdmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3Rv
Y29sKFdlYkNvcmVGcmFtZVZpZXcpXSkgeworCisgICAgLy8gSWYgdGhpcyB3aWRnZXQncyB2aWV3
IGlzIGEgV2ViQ29yZUZyYW1lU2Nyb2xsVmlldyB0aGVuIHdlCisgICAgLy8gcmVzaXplIGl0cyBj
b250YWluaW5nIHZpZXcsIGEgV2ViRnJhbWVWaWV3LgorICAgIGlmIChbdmlldyBjb25mb3Jtc1Rv
UHJvdG9jb2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVNjcm9sbFZpZXcpXSkgewogICAgICAgICB2
aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKICAgICAgICAgQVNTRVJUKHZpZXcpOwogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTgs
NyArNTk4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRDaGVja2JveChSZW5kZQogICAg
IC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBv
ZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KICAgICBOU0J1dHRvbkNlbGwq
IGNoZWNrYm94ID0gdGhpcy0+Y2hlY2tib3goKTsKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9
IGluZmxhdGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtbY2hlY2tib3ggY29udHJvbFNpemVdXSwg
Y2hlY2tib3hNYXJnaW5zKCkpOwotICAgIFtjaGVja2JveCBkcmF3V2l0aEZyYW1lOk5TUmVjdChp
bmZsYXRlZFJlY3QpIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZp
ZXcoKV07CisgICAgW2NoZWNrYm94IGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkg
aW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKICAgICBbY2hl
Y2tib3ggc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTY1NCw3
ICs2NTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKFJlbmRlck9iCiAgICAg
Ly8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9m
IHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgogICAgIE5TQnV0dG9uQ2VsbCog
cmFkaW8gPSB0aGlzLT5yYWRpbygpOwogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0
ZVJlY3QociwgcmFkaW9TaXplcygpW1tyYWRpbyBjb250cm9sU2l6ZV1dLCByYWRpb01hcmdpbnMo
KSk7Ci0gICAgW3JhZGlvIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3
Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpXTsKKyAgICBbcmFkaW8g
ZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFt
ZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtyYWRpbyBzZXRDb250cm9sVmlldzpuaWxd
OwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODM1LDcgKzgzNSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50QnV0dG9uKFJlbmRlck8KICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0
ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBidXR0b25NYXJnaW5zKCkpOwogICAgIH0KIAotICAg
IFtidXR0b24gZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmll
dygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOworICAgIFtidXR0b24gZHJhd1dp
dGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXco
KS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtidXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAog
ICAgIHJldHVybiBmYWxzZTsKQEAgLTkyMiw3ICs5MjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0KFJlbmRlCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoaW5mbGF0
ZWRSZWN0KTsKICNlbmRpZgogCi0gICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0
ZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZpZXcoKV07
CisgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpvLT52
aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CiAgICAgW3BvcHVwQnV0dG9uIHNl
dENvbnRyb2xWaWV3Om5pbF07CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTEzMDcs
NyArMTMwNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmUKICAg
ICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxBcHBl
YXJhbmNlKQogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRp
Y2FsU2xpZGVySGVpZ2h0UGFkZGluZyk7CiAKLSAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRo
RnJhbWU6TlNSZWN0KGJvdW5kcykgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERv
Y3VtZW50VmlldygpXTsKKyAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0
KGJvdW5kcykgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsK
ICAgICBbc2xpZGVyVGh1bWJDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMzM5LDcgKzEzMzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkKFJlCiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBiZWZvcmUg
ZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCiAgICAgW3Nl
YXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNoIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KHIpIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZp
ZXcoKV07CisgICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdChyKSBpblZpZXc6by0+dmll
dygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJ
R0VSCiAgICAgaWYgKFtzZWFyY2ggc2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJh
d1RleHRGaWVsZENlbGxGb2N1c1Jpbmcoc2VhcmNoLCBOU1JlY3QocikpOwpAQCAtMTQxOSw3ICsx
NDE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHVw
ZGF0ZVByZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKIAogICAgIE5T
UmVjdCBib3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlu
cHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKV07Ci0gICAgW1tzZWFy
Y2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpib3VuZHMgaW5WaWV3Om8tPnZpZXco
KS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBjYW5jZWxC
dXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwogICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNl
dENvbnRyb2xWaWV3Om5pbF07CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDc4LDcgKzE0Nzgs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgICAgIFtz
ZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOm5pbF07CiAKICAgICBOU1JlY3QgYm91bmRzID0g
W3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyZXIo
KS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSldOwotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRv
bkNlbGxdIGRyYXdXaXRoRnJhbWU6Ym91bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygp
LT5nZXREb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJh
d1dpdGhGcmFtZTpib3VuZHMgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50
VmlldygpXTsKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpu
aWxdOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE1MDMsNyArMTUwMyw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICAgICAgW3NlYXJjaCBzZXRTZWFy
Y2hNZW51VGVtcGxhdGU6c2VhcmNoTWVudVRlbXBsYXRlKCldOwogCiAgICAgTlNSZWN0IGJvdW5k
cyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRl
cmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpXTsKLSAgICBbW3NlYXJjaCBzZWFyY2hC
dXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOworICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxd
IGRyYXdXaXRoRnJhbWU6Ym91bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1
bWVudFZpZXcoKV07CiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZp
ZXc6bmlsXTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBACisyMDA4LTAzLTExICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBDaGFuZ2UgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0gdG8gYmUgT2JqLUMrKy4KKyAgICAg
ICAgV2UgY2FuIHJlbmFtZSB0aGUgZmlsZSBsYXRlci4KKwogMjAwOC0wMy0wNyAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJ
bmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzA5
NjMpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDYgKzg2LDcgQEAKIAkJOTMwNEIzMDAwQjAyMzQxNTAwRjc4NTBEIC8qIFdl
Ykljb25EYXRhYmFzZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA0QjJGRjBCMDIzNDE1MDBGNzg1MEQgLyogV2ViSWNvbkRhdGFiYXNl
SW50ZXJuYWwuaCAqLzsgfTsKIAkJOTMxNjMzRUIwQUVERkY5MzAwNjJCOTJEIC8qIFdlYkZyYW1l
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzE2MzNFQTBBRURGRjkzMDA2MkI5MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCAq
LzsgfTsKIAkJOTMxNjMzRUYwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxNjMz
RUUwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tICovOyB9OworCQk5
MzRDMTE2NzBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEMx
MTY2MEQ4NzEwQkIwMEMzMkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5o
ICovOyB9OwogCQk5Mzk4MTAxMTA4MjRCRjAxMDA4REYwMzggLyogV2ViQmFja0ZvcndhcmRMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzOTQ0NjA3
RDAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5Mzk4MTAxMjA4MjRCRjAxMDA4REYw
MzggLyogV2ViSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdlYkhpc3RvcnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTkzOTgxMDEzMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwN0YwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkhpc3Rv
cnlJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwpA
QCAtMzU5LDcgKzM2MCw3IEBACiAJCTM1MDgxRDk2MDJCNkQ0RDgwQUNBMkFDQSAvKiBXZWJIVE1M
Vmlld1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJIVE1MVmlld1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM1MDgxREFFMDJCNkQ0RjUwQUNBMkFDQSAv
KiBXZWJEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA2QjAyMEY1MEVEMEVDQTE3NjcgLyogV2Vi
RHluYW1pY1Njcm9sbEJhcnNWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQkzOTQ0NjA2QzAy
MEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OworCQkzOTQ0NjA2QzAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBwYXRoID0gV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA2RTAyMEY1MEVE
MEVDQTE3NjcgLyogV2ViUHJlZmVyZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzk0NDYwNzAwMjBGNTBF
RDBFQ0ExNzY3IC8qIFdlYkRhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA3MTAyMEY1MEVE
MEVDQTE3NjcgLyogV2ViRGF0YVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRGF0YVNvdXJjZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC01MDIsNiAr
NTAzLDcgQEAKIAkJOTM0NUREQUYwMzY1RkIyNzAwODYzNUNFIC8qIFdlYk5TV2luZG93RXh0cmFz
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
V2ViTlNXaW5kb3dFeHRyYXMubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzNDVEREIyMDM2NUZGRDAwMDg2MzVDRSAvKiBXZWJOU0Nv
bnRyb2xFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJOU0NvbnRyb2xFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzNDVEREIzMDM2NUZGRDAwMDg2MzVDRSAv
KiBXZWJOU0NvbnRyb2xFeHRyYXMubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBXZWJOU0NvbnRyb2xFeHRyYXMubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTkzNEMxMTY2MEQ4NzEw
QkIwMEMzMkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzk4MTEzMjA4MjRCRjAxMDA4REYw
MzggLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IG5hbWUgPSBJbmZvLnBs
aXN0OyBwYXRoID0gbWFjL0luZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDE7IH07CiAJCTkzOTgxMTMzMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
OTNBRUIxN0QwMzJDMTczNTAwODYzNUNFIC8qIFdlYktpdExvZ2dpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRMb2dnaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAt
OTUwLDYgKzk1Miw3IEBACiAJCQkJNjVGRkI3RkEwQUQwQjdEMzAwNDhDRDA1IC8qIFdlYkRvY3Vt
ZW50TG9hZGVyTWFjLmggKi8sCiAJCQkJODMzOTg3ODEwNTQzMDEyRDAwRUUxNDZFIC8qIFdlYkRv
Y3VtZW50UHJpdmF0ZS5oICovLAogCQkJCTM5NDQ2MDZCMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJE
eW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCAqLywKKwkJCQk5MzRDMTE2NjBEODcxMEJCMDBDMzJBQkQg
LyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCAqLywKIAkJCQlCRTRGQkVDQjA2
NTNERjQ3MDA1RURFMTUgLyogV2ViRWRpdGluZ0RlbGVnYXRlLmggKi8sCiAJCQkJMUM4Q0IwNzkw
QUU5ODMwQzAwQjFGNkU5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLywKIAkJCQky
RDgxREFCMjAzRUIwQjJEMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlLmggKi8sCkBAIC0xMzI0
LDYgKzEzMjcsNyBAQAogCQkJCTkzOTgxMDk3MDgyNEJGMDEwMDhERjAzOCAvKiBucGZ1bmN0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGREU5MzMwRDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhp
c3RvcnlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzAxNjdCRjgwRDdGNUREMDAwMjg2
OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MzRDMTE2NzBE
ODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwOTYzKQorKysgV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAwOC0wMy0xMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgLSByZW1vdmUgY29kZSBkZXBlbmRpbmcgb24gdGhlIGJyaWRnZSB0byBn
ZXQgZnJvbSBhbiBOU1ZpZXcgdG8gYSBXZWJDb3JlOjpGcmFtZQorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IFJlbW92ZSBpbmNvcnJl
Y3QgY2FsbAorICAgICAgICB0byBzZXRWaWV3LiBBIGNvdXBsZSBsaW5lcyBsYXRlciwgdGhlcmUg
aXMgYSBjYWxsIHRvIF9pbnN0YWxsLCB3aGljaCBzZXRzIHRoZQorICAgICAgICB2aWV3IHRvIHRo
ZSBzY3JvbGwgdmlldy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5
Lm1tOiBSZW1vdmVkIGJyaWRnZUZvclZpZXcgbWV0aG9kLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaDogTW92ZWQgbW9zdCBvZiB0aGUgZGVjbGFyYXRpb25z
IG91dCBvZgorICAgICAgICB0aGlzIGZpbGUsIHNpbmNlIGl0J3MgdXNlZCBieSBTYWZhcmkuCisg
ICAgICAgICogV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tOgorICAgICAg
ICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgdXBkYXRlU2Nyb2xsZXJzXSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgc2V0QWxsb3dzU2Nyb2xsaW5nOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IGFsbG93c1Njcm9s
bGluZ10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IHNldEFs
bG93c0hvcml6b250YWxTY3JvbGxpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJEeW5hbWlj
U2Nyb2xsQmFyc1ZpZXcgc2V0QWxsb3dzVmVydGljYWxTY3JvbGxpbmc6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcgYWxsb3dzSG9yaXpvbnRhbFNjcm9sbGlu
Z10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IGFsbG93c1Zl
cnRpY2FsU2Nyb2xsaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJEeW5hbWljU2Nyb2xsQmFy
c1ZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9k
ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRIb3Jp
em9udGFsU2Nyb2xsaW5nTW9kZTphbmRMb2NrOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3IHNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyBzZXRWZXJ0aWNhbFNjcm9sbGluZ01v
ZGU6YW5kTG9jazpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkR5bmFtaWNTY3JvbGxCYXJzVmll
dyBzZXRTY3JvbGxpbmdNb2RlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRHluYW1pY1Njcm9s
bEJhcnNWaWV3IHNldFNjcm9sbGluZ01vZGU6YW5kTG9jazpdKTogRGl0dG8uCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lVmlldy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IF93ZWJf
ZnJhbWVdKTogQWRkZWQuIFJlcGxhY2VzIHRoZSB3ZWJDb3JlQnJpZGdlIG1ldGhvZC4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRBbHdheXNT
aG93VmVydGljYWxTY3JvbGxlcjpdKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBXZWJDb3JlRnJh
bWVWaWV3LmguCisgICAgICAgICgtW1dlYlZpZXcgYWx3YXlzU2hvd1ZlcnRpY2FsU2Nyb2xsZXJd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0QWx3YXlzU2hvd0hvcml6b250YWxTY3Jv
bGxlcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgYWx3YXlzU2hvd0hvcml6b250YWxT
Y3JvbGxlcl0pOiBEaXR0by4KKwogMjAwOC0wMy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDk2
MykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbXBvcnQgIldlYkRvY3VtZW50SW50
ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRvY3VtZW50TG9hZGVyTWFjLmgiCiAjaW1wb3J0ICJXZWJE
b3dubG9hZEludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCIK
KyNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJX
ZWJFbGVtZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAiV2ViRm9ybURlbGVnYXRlLmgiCiAjaW1w
b3J0ICJXZWJGcmFtZUJyaWRnZS5oIgpAQCAtMTAyMyw3ICsxMDIzLDYgQEAgdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQwogICAgIEZyYW1lVmlldyogY29yZVZpZXcgPSBu
ZXcgRnJhbWVWaWV3KGNvcmVGcmFtZSk7CiAgICAgY29yZUZyYW1lLT5zZXRWaWV3KGNvcmVWaWV3
KTsKICAgICBjb3JlVmlldy0+ZGVyZWYoKTsgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIGNyYXp5
IHJlZmNvdW50aW5nIQotICAgIGNvcmVWaWV3LT5zZXRWaWV3KGRvY3VtZW50Vmlldyk7CiAgICAg
aW50IG1hcmdpbldpZHRoID0gW3YgX21hcmdpbldpZHRoXTsKICAgICBpZiAobWFyZ2luV2lkdGgg
Pj0gMCkKICAgICAgICAgY29yZVZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbldpZHRoKTsKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQkocmV2aXNp
b24gMzA5NjMpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03NiwxOSArNzYsNiBAQAogICAgIFtbV2ViUGx1Z2luRGF0YWJh
c2Ugc2hhcmVkRGF0YWJhc2VdIHJlZnJlc2hdOwogfQogCi0tIChXZWJDb3JlRnJhbWVCcmlkZ2Ug
KilicmlkZ2VGb3JWaWV3OihOU1ZpZXcgKil2Ci17Ci0gICAgTlNWaWV3ICphVmlldyA9IFt2IHN1
cGVydmlld107Ci0gICAgCi0gICAgd2hpbGUgKGFWaWV3KSB7Ci0gICAgICAgIGlmIChbYVZpZXcg
aXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewotICAgICAgICAgICAgcmV0dXJu
IFtbWyhXZWJIVE1MVmlldyAqKWFWaWV3IF9mcmFtZV0gX2RhdGFTb3VyY2VdIF9icmlkZ2VdOwot
ICAgICAgICB9Ci0gICAgICAgIGFWaWV3ID0gW2FWaWV3IHN1cGVydmlld107Ci0gICAgfQotICAg
IHJldHVybiBuaWw7Ci19Ci0KIC0gKE5TU3RyaW5nICopaW5wdXRFbGVtZW50QWx0VGV4dAogewog
ICAgIHJldHVybiBVSV9TVFJJTkdfS0VZKCJTdWJtaXQiLCAiU3VibWl0IChpbnB1dCBlbGVtZW50
KSIsICJhbHQgdGV4dCBmb3IgPGlucHV0PiBlbGVtZW50cyB3aXRoIG5vIGFsdCwgdGl0bGUsIG9y
IHZhbHVlIik7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxC
YXJzVmlldy5oCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5h
bWljU2Nyb2xsQmFyc1ZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw0NiArMjYs
MjAgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8QXBwS2l0L05TU2Nyb2xsVmlldy5o
PgorLy8gVGhpcyBpcyBhIFByaXZhdGUgaGVhZGVyIChjb250YWluaW5nIFNQSSksIGRlc3BpdGUg
dGhlIGZhY3QgdGhhdCBpdHMgbmFtZQorLy8gZG9lcyBub3QgY29udGFpbiB0aGUgd29yZCBQcml2
YXRlLgogCi0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVGcmFtZVZpZXcuaD4KKy8vIEZJWE1FOiBE
b2VzIFNhZmFyaSByZWFsbHkgbmVlZCB0byB1c2UgdGhpcyBhbnkgbW9yZT8gQXBwS2l0IGFkZGVk
IGF1dG9oaWRlc1Njcm9sbGVycworLy9pbiBQYW50aGVyLCBhbmQgdGhhdCB3YXMgdGhlIG9yaWdp
bmFsIHJlYXNvbiB3ZSBuZWVkZWQgdGhpcyB2aWV3IGluIFNhZmFyaS4KIAotLy8gRklYTUUgMjk4
MDc3OTogVGhpcyBoYXMgZ3Jvd24gdG8gYmUgbW9yZSB0aGFuIGp1c3QgYSBkeW5hbWljIHNjcm9s
bCBiYXIgdmlldywKLS8vIGFuZCBpdCBpcyBubyBsb25nZXIgY29tcGxldGVseSBhcHByb3ByaWF0
ZSBmb3IgdXNlIG91dHNpZGUgb2YgV2ViS2l0LgotCi1AaW50ZXJmYWNlIFdlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlldyA6IE5TU2Nyb2xsVmlldyA8V2ViQ29yZUZyYW1lVmlldz4KLXsKLSAgICBXZWJD
b3JlU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsOwotICAgIFdlYkNvcmVTY3JvbGxiYXJNb2RlIHZTY3Jv
bGw7CitAaW50ZXJmYWNlIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyA6IE5TU2Nyb2xsVmlldyB7
CisgICAgaW50IGhTY3JvbGw7IC8vIEZJWE1FOiBTaG91bGQgYmUgV2ViQ29yZTo6U2Nyb2xsYmFy
TW9kZSBpZiB0aGlzIHdhcyBhbiBPYmpDKysgaGVhZGVyLgorICAgIGludCB2U2Nyb2xsOyAvLyBE
aXR0by4KICAgICBCT09MIGhTY3JvbGxNb2RlTG9ja2VkOwogICAgIEJPT0wgdlNjcm9sbE1vZGVM
b2NrZWQ7CiAgICAgQk9PTCBzdXBwcmVzc0xheW91dDsKICAgICBCT09MIHN1cHByZXNzU2Nyb2xs
ZXJzOwogICAgIEJPT0wgaW5VcGRhdGVTY3JvbGxlcnM7CiB9Ci0KIC0gKHZvaWQpc2V0QWxsb3dz
SG9yaXpvbnRhbFNjcm9sbGluZzooQk9PTClmbGFnOwotLSAoQk9PTClhbGxvd3NIb3Jpem9udGFs
U2Nyb2xsaW5nOwotLSAodm9pZClzZXRBbGxvd3NWZXJ0aWNhbFNjcm9sbGluZzooQk9PTClmbGFn
OwotLSAoQk9PTClhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZzsKLQotLSAodm9pZClzZXRIb3Jpem9u
dGFsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZVNjcm9sbGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09M
KWxvY2s7Ci0tICh2b2lkKXNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZVNjcm9sbGJh
ck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxvY2s7Ci0tICh2b2lkKXNldFNjcm9sbGluZ01vZGU6
KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTClsb2NrOwotCi0tICh2b2lk
KXNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlTG9ja2VkOihCT09MKWxvY2tlZDsKLS0gKHZvaWQp
c2V0VmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkOihCT09MKWxvY2tlZDsKLS0gKHZvaWQpc2V0
U2Nyb2xsaW5nTW9kZXNMb2NrZWQ6KEJPT0wpbW9kZTsKLQotLSAoQk9PTClob3Jpem9udGFsU2Ny
b2xsaW5nTW9kZUxvY2tlZDsKLS0gKEJPT0wpdmVydGljYWxTY3JvbGxpbmdNb2RlTG9ja2VkOwot
Ci0vLyBDb252ZW5pZW5jZSBtZXRob2QgdG8gYWZmZWN0IGJvdGggc2Nyb2xsaW5nIGRpcmVjdGlv
bnMgYXQgb25jZS4KLS0gKHZvaWQpc2V0QWxsb3dzU2Nyb2xsaW5nOihCT09MKWZsYWc7Ci0KLS8v
IFJldHVybnMgWUVTIGlmIGVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNjcm9sbGluZyBp
cyBhbGxvd2VkLgotLSAoQk9PTClhbGxvd3NTY3JvbGxpbmc7Ci0KLS0gKHZvaWQpdXBkYXRlU2Ny
b2xsZXJzOwotLSAodm9pZClzZXRTdXBwcmVzc0xheW91dDogKEJPT0wpZmxhZzsKIEBlbmQKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lm0JKHJl
dmlzaW9uIDMwOTYzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJz
Vmlldy5tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE0ICsyNiwzMSBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0IDxXZWJLaXQvV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lmg+
CisjaW1wb3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oIgogCi0jaW1wb3J0
IDxXZWJLaXQvV2ViRG9jdW1lbnQuaD4KKyNpbXBvcnQgIldlYkRvY3VtZW50LmgiCiAjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
IEBpbXBsZW1lbnRhdGlvbiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcKIAotLSAodm9pZClzZXRT
dXBwcmVzc0xheW91dDogKEJPT0wpZmxhZzsKKy0gKHZvaWQpc2V0QWxsb3dzSG9yaXpvbnRhbFNj
cm9sbGluZzooQk9PTClmbGFnCit7CisgICAgaWYgKGhTY3JvbGxNb2RlTG9ja2VkKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGZsYWcgJiYgaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPZmYp
CisgICAgICAgIGhTY3JvbGwgPSBTY3JvbGxiYXJBdXRvOworICAgIGVsc2UgaWYgKCFmbGFnICYm
IGhTY3JvbGwgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQorICAgICAgICBoU2Nyb2xsID0gU2Nyb2xs
YmFyQWx3YXlzT2ZmOworICAgIFtzZWxmIHVwZGF0ZVNjcm9sbGVyc107Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAoV2ViSW50ZXJuYWwpCisK
Ky0gKHZvaWQpc2V0U3VwcHJlc3NMYXlvdXQ6KEJPT0wpZmxhZzsKIHsKICAgICBzdXBwcmVzc0xh
eW91dCA9IGZsYWc7CiB9CkBAIC04Miw3ICs5OSw3IEBACiAgICAgICAgIEJPT0wgc2Nyb2xsc1Zl
cnRpY2FsbHk7CiAgICAgICAgIEJPT0wgc2Nyb2xsc0hvcml6b250YWxseTsKIAotICAgICAgICBp
ZiAoIXN1cHByZXNzTGF5b3V0ICYmICFzdXBwcmVzc1Njcm9sbGVycyAmJiAoaFNjcm9sbCA9PSBX
ZWJDb3JlU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBdXRvKSkg
eworICAgICAgICBpZiAoIXN1cHByZXNzTGF5b3V0ICYmICFzdXBwcmVzc1Njcm9sbGVycyAmJiAo
aFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8IHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsK
ICAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0IGlmIHBlbmRpbmcsIGJlZm9yZSBjaGVja2luZyBp
ZiBzY3JvbGxiYXJzIGFyZSBuZWVkZWQuCiAgICAgICAgICAgICAvLyBUaGlzIGZpeGVzIDI5Njkz
NjcsIGFsdGhvdWdoIG1heSBpbnRyb2R1Y2UgYSBzbG93ZG93biBpbiBsaXZlIHJlc2l6ZSBwZXJm
b3JtYW5jZS4KICAgICAgICAgICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW3NlbGYgZG9jdW1l
bnRWaWV3XTsKQEAgLTk5LDIyICsxMTYsMjIgQEAKICAgICAgICAgICAgICAgICBOU1NpemUgZG9j
dW1lbnRTaXplID0gW2RvY3VtZW50VmlldyBmcmFtZV0uc2l6ZTsKICAgICAgICAgICAgICAgICBO
U1NpemUgZnJhbWVTaXplID0gW3NlbGYgZnJhbWVdLnNpemU7CiAKLSAgICAgICAgICAgICAgICBz
Y3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPbikg
fHwKLSAgICAgICAgICAgICAgICAgICAgKHZTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckF1dG8g
JiYgZG9jdW1lbnRTaXplLmhlaWdodCA+IGZyYW1lU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAg
ICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8
CisgICAgICAgICAgICAgICAgICAgICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgZG9jdW1l
bnRTaXplLmhlaWdodCA+IGZyYW1lU2l6ZS5oZWlnaHQpOwogICAgICAgICAgICAgICAgIGlmIChz
Y3JvbGxzVmVydGljYWxseSkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxs
eSA9IChoU2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPbikgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIChoU2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBdXRvICYmIGRvY3VtZW50
U2l6ZS53aWR0aCArIFtOU1Njcm9sbGVyIHNjcm9sbGVyV2lkdGhdID4gZnJhbWVTaXplLndpZHRo
KTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09
IFNjcm9sbGJhckFsd2F5c09uKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQXV0byAmJiBkb2N1bWVudFNpemUud2lkdGggKyBbTlNTY3JvbGxlciBzY3Jv
bGxlcldpZHRoXSA+IGZyYW1lU2l6ZS53aWR0aCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBXZWJD
b3JlU2Nyb2xsYmFyQWx3YXlzT24pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaFNjcm9s
bCA9PSBXZWJDb3JlU2Nyb2xsYmFyQXV0byAmJiBkb2N1bWVudFNpemUud2lkdGggPiBmcmFtZVNp
emUud2lkdGgpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhT
Y3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAo
aFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGRvY3VtZW50U2l6ZS53aWR0aCA+IGZyYW1lU2l6
ZS53aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBX
ZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT24pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckF1dG8gJiYgZG9jdW1lbnRTaXplLmhlaWdodCAr
IFtOU1Njcm9sbGVyIHNjcm9sbGVyV2lkdGhdID4gZnJhbWVTaXplLmhlaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckFsd2F5c09uKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8gJiYgZG9jdW1lbnRTaXplLmhlaWdodCArIFtOU1Njcm9sbGVyIHNjcm9sbGVy
V2lkdGhdID4gZnJhbWVTaXplLmhlaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9
IChoU2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxl
ciA6IChoU2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPbik7Ci0gICAgICAgICAgICBz
Y3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFdlYkNvcmVTY3JvbGxiYXJBdXRvKSA/IGhh
c1ZlcnRpY2FsU2Nyb2xsZXIgOiAodlNjcm9sbCA9PSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT24p
OworICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8pID8gaGFzSG9yaXpvbnRhbFNjcm9sbGVyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3
YXlzT24pOworICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3Jv
bGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Nyb2xsZXIgOiAodlNjcm9sbCA9PSBTY3JvbGxiYXJB
bHdheXNPbik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxlciAh
PSBzY3JvbGxzVmVydGljYWxseSkgewpAQCAtMTcyLDE1ICsxODksMTUgQEAKICAgICBpZiAoaFNj
cm9sbE1vZGVMb2NrZWQgJiYgdlNjcm9sbE1vZGVMb2NrZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChmbGFnICYmIHZTY3JvbGwgPT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09mZikKLSAg
ICAgICAgdlNjcm9sbCA9IFdlYkNvcmVTY3JvbGxiYXJBdXRvOwotICAgIGVsc2UgaWYgKCFmbGFn
ICYmIHZTY3JvbGwgIT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09mZikKLSAgICAgICAgdlNjcm9s
bCA9IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmY7Ci0KLSAgICBpZiAoZmxhZyAmJiBoU2Nyb2xs
ID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmYpCi0gICAgICAgIGhTY3JvbGwgPSBXZWJDb3Jl
U2Nyb2xsYmFyQXV0bzsKLSAgICBlbHNlIGlmICghZmxhZyAmJiBoU2Nyb2xsICE9IFdlYkNvcmVT
Y3JvbGxiYXJBbHdheXNPZmYpCi0gICAgICAgIGhTY3JvbGwgPSBXZWJDb3JlU2Nyb2xsYmFyQWx3
YXlzT2ZmOworICAgIGlmIChmbGFnICYmIHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQor
ICAgICAgICB2U2Nyb2xsID0gU2Nyb2xsYmFyQXV0bzsKKyAgICBlbHNlIGlmICghZmxhZyAmJiB2
U2Nyb2xsICE9IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgdlNjcm9sbCA9IFNjcm9sbGJh
ckFsd2F5c09mZjsKKworICAgIGlmIChmbGFnICYmIGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlz
T2ZmKQorICAgICAgICBoU2Nyb2xsID0gU2Nyb2xsYmFyQXV0bzsKKyAgICBlbHNlIGlmICghZmxh
ZyAmJiBoU2Nyb2xsICE9IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgaFNjcm9sbCA9IFNj
cm9sbGJhckFsd2F5c09mZjsKIAogICAgIFtzZWxmIHVwZGF0ZVNjcm9sbGVyc107CiB9CkBAIC0x
ODgsNTcgKzIwNSw0NiBAQAogLSAoQk9PTClhbGxvd3NTY3JvbGxpbmcKIHsKICAgICAvLyBSZXR1
cm5zIFlFUyBpZiBlaXRoZXIgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBzY3JvbGxpbmcgaXMgYWxs
b3dlZC4KLSAgICByZXR1cm4gaFNjcm9sbCAhPSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2ZmIHx8
IHZTY3JvbGwgIT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5c09mZjsKLX0KLQotLSAodm9pZClzZXRB
bGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nOihCT09MKWZsYWcKLXsKLSAgICBpZiAoaFNjcm9sbE1v
ZGVMb2NrZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZmxhZyAmJiBoU2Nyb2xsID09IFdl
YkNvcmVTY3JvbGxiYXJBbHdheXNPZmYpCi0gICAgICAgIGhTY3JvbGwgPSBXZWJDb3JlU2Nyb2xs
YmFyQXV0bzsKLSAgICBlbHNlIGlmICghZmxhZyAmJiBoU2Nyb2xsICE9IFdlYkNvcmVTY3JvbGxi
YXJBbHdheXNPZmYpCi0gICAgICAgIGhTY3JvbGwgPSBXZWJDb3JlU2Nyb2xsYmFyQWx3YXlzT2Zm
OwotICAgIFtzZWxmIHVwZGF0ZVNjcm9sbGVyc107CisgICAgcmV0dXJuIGhTY3JvbGwgIT0gU2Ny
b2xsYmFyQWx3YXlzT2ZmIHx8IHZTY3JvbGwgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwogfQogCiAt
ICh2b2lkKXNldEFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nOihCT09MKWZsYWcKIHsKICAgICBpZiAo
dlNjcm9sbE1vZGVMb2NrZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoZmxhZyAmJiB2U2Ny
b2xsID09IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHZTY3JvbGwgPSBXZWJD
b3JlU2Nyb2xsYmFyQXV0bzsKLSAgICBlbHNlIGlmICghZmxhZyAmJiB2U2Nyb2xsICE9IFdlYkNv
cmVTY3JvbGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHZTY3JvbGwgPSBXZWJDb3JlU2Nyb2xsYmFy
QWx3YXlzT2ZmOworICAgIGlmIChmbGFnICYmIHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT2Zm
KQorICAgICAgICB2U2Nyb2xsID0gU2Nyb2xsYmFyQXV0bzsKKyAgICBlbHNlIGlmICghZmxhZyAm
JiB2U2Nyb2xsICE9IFNjcm9sbGJhckFsd2F5c09mZikKKyAgICAgICAgdlNjcm9sbCA9IFNjcm9s
bGJhckFsd2F5c09mZjsKICAgICBbc2VsZiB1cGRhdGVTY3JvbGxlcnNdOwogfQogCiAtIChCT09M
KWFsbG93c0hvcml6b250YWxTY3JvbGxpbmcKIHsKLSAgICByZXR1cm4gaFNjcm9sbCAhPSBXZWJD
b3JlU2Nyb2xsYmFyQWx3YXlzT2ZmOworICAgIHJldHVybiBoU2Nyb2xsICE9IFNjcm9sbGJhckFs
d2F5c09mZjsKIH0KIAogLSAoQk9PTClhbGxvd3NWZXJ0aWNhbFNjcm9sbGluZwogewotICAgIHJl
dHVybiB2U2Nyb2xsICE9IFdlYkNvcmVTY3JvbGxiYXJBbHdheXNPZmY7CisgICAgcmV0dXJuIHZT
Y3JvbGwgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwogfQogCi0tKFdlYkNvcmVTY3JvbGxiYXJNb2Rl
KWhvcml6b250YWxTY3JvbGxpbmdNb2RlCistIChTY3JvbGxiYXJNb2RlKWhvcml6b250YWxTY3Jv
bGxpbmdNb2RlCiB7Ci0gICAgcmV0dXJuIGhTY3JvbGw7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNjcm9sbGJhck1vZGU+KGhTY3JvbGwpOwogfQogCi0tKFdlYkNvcmVTY3JvbGxiYXJNb2RlKXZl
cnRpY2FsU2Nyb2xsaW5nTW9kZQorLSAoU2Nyb2xsYmFyTW9kZSl2ZXJ0aWNhbFNjcm9sbGluZ01v
ZGUKIHsKLSAgICByZXR1cm4gdlNjcm9sbDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xs
YmFyTW9kZT4odlNjcm9sbCk7CiB9CiAKLS0gKHZvaWQpc2V0SG9yaXpvbnRhbFNjcm9sbGluZ01v
ZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUKKy0gKHZvaWQpc2V0SG9yaXpvbnRhbFNjcm9s
bGluZ01vZGU6KFNjcm9sbGJhck1vZGUpbW9kZQogewogICAgIFtzZWxmIHNldEhvcml6b250YWxT
Y3JvbGxpbmdNb2RlOm1vZGUgYW5kTG9jazpOT107CiB9CiAKLS0gKHZvaWQpc2V0SG9yaXpvbnRh
bFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUgYW5kTG9jazooQk9PTCls
b2NrCistICh2b2lkKXNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlOihTY3JvbGxiYXJNb2RlKW1v
ZGUgYW5kTG9jazooQk9PTClsb2NrCiB7CiAgICAgaWYgKG1vZGUgPT0gaFNjcm9sbCB8fCBoU2Ny
b2xsTW9kZUxvY2tlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUxLDEyICsyNTcsMTIgQEAKICAg
ICBbc2VsZiB1cGRhdGVTY3JvbGxlcnNdOwogfQogCi0tICh2b2lkKXNldFZlcnRpY2FsU2Nyb2xs
aW5nTW9kZTooV2ViQ29yZVNjcm9sbGJhck1vZGUpbW9kZQorLSAodm9pZClzZXRWZXJ0aWNhbFNj
cm9sbGluZ01vZGU6KFNjcm9sbGJhck1vZGUpbW9kZQogewogICAgIFtzZWxmIHNldFZlcnRpY2Fs
U2Nyb2xsaW5nTW9kZTptb2RlIGFuZExvY2s6Tk9dOwogfQogCi0tICh2b2lkKXNldFZlcnRpY2Fs
U2Nyb2xsaW5nTW9kZTooV2ViQ29yZVNjcm9sbGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxv
Y2sKKy0gKHZvaWQpc2V0VmVydGljYWxTY3JvbGxpbmdNb2RlOihTY3JvbGxiYXJNb2RlKW1vZGUg
YW5kTG9jazooQk9PTClsb2NrCiB7CiAgICAgaWYgKG1vZGUgPT0gdlNjcm9sbCB8fCB2U2Nyb2xs
TW9kZUxvY2tlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjY5LDEyICsyNzUsMTIgQEAKICAgICBb
c2VsZiB1cGRhdGVTY3JvbGxlcnNdOwogfQogCi0tICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdl
YkNvcmVTY3JvbGxiYXJNb2RlKW1vZGUKKy0gKHZvaWQpc2V0U2Nyb2xsaW5nTW9kZTooU2Nyb2xs
YmFyTW9kZSltb2RlCiB7CiAgICAgW3NlbGYgc2V0U2Nyb2xsaW5nTW9kZTptb2RlIGFuZExvY2s6
Tk9dOwogfQogCi0tICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFdlYkNvcmVTY3JvbGxiYXJNb2Rl
KW1vZGUgYW5kTG9jazooQk9PTClsb2NrCistICh2b2lkKXNldFNjcm9sbGluZ01vZGU6KFNjcm9s
bGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxvY2sKIHsKICAgICBpZiAoKG1vZGUgPT0gdlNj
cm9sbCAmJiBtb2RlID09IGhTY3JvbGwpIHx8ICh2U2Nyb2xsTW9kZUxvY2tlZCAmJiBoU2Nyb2xs
TW9kZUxvY2tlZCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlld0ludGVybmFs
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldy5oIgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVWaWV3
Lmg+CisKK0BpbnRlcmZhY2UgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3IChXZWJJbnRlcm5hbCkg
PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+CisKKy0gKEJPT0wpYWxsb3dzSG9yaXpvbnRhbFNjcm9s
bGluZzsKKy0gKHZvaWQpc2V0QWxsb3dzVmVydGljYWxTY3JvbGxpbmc6KEJPT0wpZmxhZzsKKy0g
KEJPT0wpYWxsb3dzVmVydGljYWxTY3JvbGxpbmc7CisKKy0gKHZvaWQpc2V0SG9yaXpvbnRhbFNj
cm9sbGluZ01vZGU6KFdlYkNvcmU6OlNjcm9sbGJhck1vZGUpbW9kZSBhbmRMb2NrOihCT09MKWxv
Y2s7CistICh2b2lkKXNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZTooV2ViQ29yZTo6U2Nyb2xsYmFy
TW9kZSltb2RlIGFuZExvY2s6KEJPT0wpbG9jazsKKy0gKHZvaWQpc2V0U2Nyb2xsaW5nTW9kZToo
V2ViQ29yZTo6U2Nyb2xsYmFyTW9kZSltb2RlIGFuZExvY2s6KEJPT0wpbG9jazsKKworLSAodm9p
ZClzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxvY2tlZDooQk9PTClsb2NrZWQ7CistICh2b2lk
KXNldFZlcnRpY2FsU2Nyb2xsaW5nTW9kZUxvY2tlZDooQk9PTClsb2NrZWQ7CistICh2b2lkKXNl
dFNjcm9sbGluZ01vZGVzTG9ja2VkOihCT09MKW1vZGU7CisKKy0gKEJPT0wpaG9yaXpvbnRhbFNj
cm9sbGluZ01vZGVMb2NrZWQ7CistIChCT09MKXZlcnRpY2FsU2Nyb2xsaW5nTW9kZUxvY2tlZDsK
KworLy8gQ29udmVuaWVuY2UgbWV0aG9kIHRvIGFmZmVjdCBib3RoIHNjcm9sbGluZyBkaXJlY3Rp
b25zIGF0IG9uY2UuCistICh2b2lkKXNldEFsbG93c1Njcm9sbGluZzooQk9PTClmbGFnOworCisv
LyBSZXR1cm5zIFlFUyBpZiBlaXRoZXIgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBzY3JvbGxpbmcg
aXMgYWxsb3dlZC4KKy0gKEJPT0wpYWxsb3dzU2Nyb2xsaW5nOworCistICh2b2lkKXVwZGF0ZVNj
cm9sbGVyczsKKy0gKHZvaWQpc2V0U3VwcHJlc3NMYXlvdXQ6KEJPT0wpZmxhZzsKKworQGVuZAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkR5bmFtaWNTY3JvbGxC
YXJzVmlld0ludGVybmFsLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCShyZXZpc2lvbiAzMDk2MykK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIldlYkNsaXBWaWV3LmgiCiAjaW1wb3J0ICJXZWJEYXRh
U291cmNlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViRG9jdW1lbnQuaCIKLSNpbXBvcnQgIldlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldy5oIgorI2ltcG9ydCAiV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3
SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVy
bmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgpAQCAtODMsOSArODMsOCBAQCBlbnVt
IHsKICAgICBTcGFjZUtleSA9IDB4MDAyMAogfTsKIAotQGludGVyZmFjZSBXZWJGcmFtZVZpZXcg
KFdlYkZyYW1lVmlld0ZpbGVJbnRlcm5hbCkgPFdlYkNvcmVCcmlkZ2VIb2xkZXI+CitAaW50ZXJm
YWNlIFdlYkZyYW1lVmlldyAoV2ViRnJhbWVWaWV3RmlsZUludGVybmFsKSA8V2ViQ29yZUZyYW1l
Vmlldz4KIC0gKGZsb2F0KV92ZXJ0aWNhbEtleWJvYXJkU2Nyb2xsRGlzdGFuY2U7Ci0tIChXZWJD
b3JlRnJhbWVCcmlkZ2UgKikgd2ViQ29yZUJyaWRnZTsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJG
cmFtZVZpZXdQcml2YXRlIDogTlNPYmplY3QgewpAQCAtMTI4LDkgKzEyNyw5IEBAIGVudW0gewog
ICAgIHJldHVybiBbW3NlbGYgX3Njcm9sbFZpZXddIHZlcnRpY2FsTGluZVNjcm9sbF07CiB9CiAK
LS0gKFdlYkNvcmVGcmFtZUJyaWRnZSAqKSB3ZWJDb3JlQnJpZGdlCistIChGcmFtZSopX3dlYl9m
cmFtZQogewotICAgIHJldHVybiBbX3ByaXZhdGUtPndlYkZyYW1lIF9icmlkZ2VdOworICAgIHJl
dHVybiBjb3JlKF9wcml2YXRlLT53ZWJGcmFtZSk7CiB9CiAKIEBlbmQKSW5kZXg6IFdlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCShyZXZpc2lvbiAzMDk2MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCArMzAsMTIgQEAKICNpbXBvcnQgIldlYlZpZXdJ
bnRlcm5hbC5oIgogCiAjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdEludGVybmFsLmgi
CiAjaW1wb3J0ICJXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgiCiAjaW1wb3J0ICJXZWJDaHJv
bWVDbGllbnQuaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51Q2xpZW50LmgiCiAjaW1wb3J0ICJX
ZWJET01PcGVyYXRpb25zUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViRGF0YWJhc2VNYW5hZ2VySW50
ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaCIKICNpbXBvcnQg
IldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRGVmYXVsdEVkaXRpbmdEZWxl
Z2F0ZS5oIgogI2ltcG9ydCAiV2ViRGVmYXVsdFBvbGljeURlbGVnYXRlLmgiCkBAIC00OCw3ICs0
Niw3IEBACiAjaW1wb3J0ICJXZWJEb3dubG9hZC5oIgogI2ltcG9ydCAiV2ViRG93bmxvYWRJbnRl
cm5hbC5oIgogI2ltcG9ydCAiV2ViRHJhZ0NsaWVudC5oIgotI2ltcG9ydCAiV2ViRHluYW1pY1Nj
cm9sbEJhcnNWaWV3LmgiCisjaW1wb3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJFZGl0b3JD
bGllbnQuaCIKICNpbXBvcnQgIldlYkZvcm1EZWxlZ2F0ZVByaXZhdGUuaCIKQEAgLTU4LDcgKzU2
LDYgQEAKICNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvbi5oIgogI2ltcG9ydCAiV2ViSFRN
TFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2lt
cG9ydCAiV2ViSWNvbkRhdGFiYXNlLmgiCiAjaW1wb3J0ICJXZWJJY29uRGF0YWJhc2VJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yLmgiCiAjaW1wb3J0ICJXZWJJbnNwZWN0b3JDbGll
bnQuaCIKQEAgLTE0NjUsMjcgKzE0NjIsMjcgQEAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbkNhY2hlKgogewogICAgIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldyAqc2Nyb2xsdmll
dyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XTsKICAgICBpZiAo
ZmxhZykgewotICAgICAgICBbc2Nyb2xsdmlldyBzZXRWZXJ0aWNhbFNjcm9sbGluZ01vZGU6V2Vi
Q29yZVNjcm9sbGJhckFsd2F5c09uIGFuZExvY2s6WUVTXTsKKyAgICAgICAgW3Njcm9sbHZpZXcg
c2V0VmVydGljYWxTY3JvbGxpbmdNb2RlOlNjcm9sbGJhckFsd2F5c09uIGFuZExvY2s6WUVTXTsK
ICAgICB9IGVsc2UgewogICAgICAgICBbc2Nyb2xsdmlldyBzZXRWZXJ0aWNhbFNjcm9sbGluZ01v
ZGVMb2NrZWQ6Tk9dOwotICAgICAgICBbc2Nyb2xsdmlldyBzZXRWZXJ0aWNhbFNjcm9sbGluZ01v
ZGU6V2ViQ29yZVNjcm9sbGJhckF1dG9dOworICAgICAgICBbc2Nyb2xsdmlldyBzZXRWZXJ0aWNh
bFNjcm9sbGluZ01vZGU6U2Nyb2xsYmFyQXV0b107CiAgICAgfQogfQogCiAtIChCT09MKWFsd2F5
c1Nob3dWZXJ0aWNhbFNjcm9sbGVyCiB7CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3ICpz
Y3JvbGx2aWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddOwot
ICAgIHJldHVybiBbc2Nyb2xsdmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVMb2NrZWRdICYmIFtz
Y3JvbGx2aWV3IHZlcnRpY2FsU2Nyb2xsaW5nTW9kZV0gPT0gV2ViQ29yZVNjcm9sbGJhckFsd2F5
c09uOworICAgIHJldHVybiBbc2Nyb2xsdmlldyB2ZXJ0aWNhbFNjcm9sbGluZ01vZGVMb2NrZWRd
ICYmIFtzY3JvbGx2aWV3IHZlcnRpY2FsU2Nyb2xsaW5nTW9kZV0gPT0gU2Nyb2xsYmFyQWx3YXlz
T247CiB9CiAKIC0gKHZvaWQpc2V0QWx3YXlzU2hvd0hvcml6b250YWxTY3JvbGxlcjooQk9PTClm
bGFnCiB7CiAgICAgV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3ICpzY3JvbGx2aWV3ID0gW1tbc2Vs
ZiBtYWluRnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddOwogICAgIGlmIChmbGFnKSB7Ci0g
ICAgICAgIFtzY3JvbGx2aWV3IHNldEhvcml6b250YWxTY3JvbGxpbmdNb2RlOldlYkNvcmVTY3Jv
bGxiYXJBbHdheXNPbiBhbmRMb2NrOllFU107CisgICAgICAgIFtzY3JvbGx2aWV3IHNldEhvcml6
b250YWxTY3JvbGxpbmdNb2RlOlNjcm9sbGJhckFsd2F5c09uIGFuZExvY2s6WUVTXTsKICAgICB9
IGVsc2UgewogICAgICAgICBbc2Nyb2xsdmlldyBzZXRIb3Jpem9udGFsU2Nyb2xsaW5nTW9kZUxv
Y2tlZDpOT107Ci0gICAgICAgIFtzY3JvbGx2aWV3IHNldEhvcml6b250YWxTY3JvbGxpbmdNb2Rl
OldlYkNvcmVTY3JvbGxiYXJBdXRvXTsKKyAgICAgICAgW3Njcm9sbHZpZXcgc2V0SG9yaXpvbnRh
bFNjcm9sbGluZ01vZGU6U2Nyb2xsYmFyQXV0b107CiAgICAgfQogfQogCkBAIC0xNDk5LDcgKzE0
OTYsNyBAQCBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqCiAtIChCT09M
KWFsd2F5c1Nob3dIb3Jpem9udGFsU2Nyb2xsZXIKIHsKICAgICBXZWJEeW5hbWljU2Nyb2xsQmFy
c1ZpZXcgKnNjcm9sbHZpZXcgPSBbW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xs
Vmlld107Ci0gICAgcmV0dXJuIFtzY3JvbGx2aWV3IGhvcml6b250YWxTY3JvbGxpbmdNb2RlTG9j
a2VkXSAmJiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xsaW5nTW9kZV0gPT0gV2ViQ29yZVNj
cm9sbGJhckFsd2F5c09uOworICAgIHJldHVybiBbc2Nyb2xsdmlldyBob3Jpem9udGFsU2Nyb2xs
aW5nTW9kZUxvY2tlZF0gJiYgW3Njcm9sbHZpZXcgaG9yaXpvbnRhbFNjcm9sbGluZ01vZGVdID09
IFNjcm9sbGJhckFsd2F5c09uOwogfQogCiAtICh2b2lkKV9zZXRJblZpZXdTb3VyY2VNb2RlOihC
T09MKWZsYWcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19693</attachid>
            <date>2008-03-11 20:35:18 -0700</date>
            <delta_ts>2008-03-11 22:29:38 -0700</delta_ts>
            <desc>patch that removes every last use of the bridge in WebCore</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>24682</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDgtMDMtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gcmVt
b3ZlIGFsbCBicmlkZ2UtcmVsYXRlZCB0aGluZ3MgZnJvbSBXZWJDb3JlIGV4Y2VwdCB0aGUgYnJp
ZGdlIGl0c2VsZgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDogUmVtb3ZlZCB0aGUgYnJp
ZGdlIGFuZCBzZXRCcmlkZ2UgZnVuY3Rpb25zLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hGcm9tUGFyZW50
KTogUmVtb3ZlZCBjYWxsIHRvIHRoZSBicmlkZ2UncworICAgICAgICBjbG9zZSBtZXRob2QuCisK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjp+RnJh
bWUpOiBSZW1vdmVkIGNhbGwgdG8gc2V0QnJpZGdlKDApLgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVQcml2YXRlOjpGcmFtZVByaXZhdGUpOiBSZW1vdmVkIGluaXRpYWxpemF0aW9uIG9mIG1fYnJp
ZGdlLgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDogUmVtb3ZlZCBzZXRCcmlkZ2UgYW5kIGJyaWRn
ZSBmdW5jdGlvbnMuCisgICAgICAgICogcGFnZS9GcmFtZVByaXZhdGUuaDogUmVtb3ZlZCBtX2Jy
aWRnZSBwb2ludGVyLgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOiBSZW1vdmVkIHNl
dEJyaWRnZSBhbmQgYnJpZGdlIGZ1bmN0aW9ucy4KKworICAgICAgICAqIHBhZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5oOiBBZGRlZCBzZXRXZWJDb3JlRnJhbWU6IG1ldGhvZC4KKyAgICAgICAg
UmVtb3ZlZCBicmlkZ2VGb3JET01Eb2N1bWVudDogYW5kIGNsZWFyRnJhbWUgbWV0aG9kcy4KKyAg
ICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06IERpdHRvLgorICAgICAgICAo
LVtXZWJDb3JlRnJhbWVCcmlkZ2UgY2xvc2VdKTogQ2hhbmdlZCB0byBzZXQgbV9mcmFtZSB0byAw
IGRpcmVjdGx5LgorICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ugc2V0V2ViQ29yZUZyYW1l
Ol0pOiBBZGRlZC4KKwogMjAwOC0wMy0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgLSBmaXggUmVsZWFzZSBidWlsZApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
MzA5NzQpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
Niw3ICs0MDYsNiBAQCBfX1pON1dlYkNvcmU1RnJhbWUyMXNldFByb2hpYml0c1Njcm9sbGluCiBf
X1pON1dlYkNvcmU1RnJhbWUyNmRhc2hib2FyZFJlZ2lvbnNEaWN0aW9uYXJ5RXYKIF9fWk43V2Vi
Q29yZTVGcmFtZTI5Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW5FUHYKIF9fWk43V2ViQ29y
ZTVGcmFtZTRpbml0RXYKLV9fWk43V2ViQ29yZTVGcmFtZTlzZXRCcmlkZ2VFUDE4V2ViQ29yZUZy
YW1lQnJpZGdlCiBfX1pON1dlYkNvcmU1RnJhbWVDMUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1l
T3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNUltYWdl
MTBnZXROU0ltYWdlRXYKIF9fWk43V2ViQ29yZTVJbWFnZTIwbG9hZFBsYXRmb3JtUmVzb3VyY2VF
UEtjCkBAIC02NjgsNyArNjY3LDYgQEAgX19aTks3V2ViQ29yZTVGcmFtZTM3YmFzZVdyaXRpbmdE
aXJlY3RpbwogX19aTks3V2ViQ29yZTVGcmFtZTRwYWdlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU0
dHJlZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNHZpZXdFdgotX19aTks3V2ViQ29yZTVGcmFtZTZi
cmlkZ2VFdgogX19aTks3V2ViQ29yZTVGcmFtZTZlZGl0b3JFdgogX19aTks3V2ViQ29yZTVGcmFt
ZTZsb2FkZXJFdgogX19aTks3V2ViQ29yZTVGcmFtZThkb2N1bWVudEV2CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDk3NCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwMCw5ICszMjAwLDYgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6ZGV0YWNoRnJvbVBhcmVudCgpCiAgICAgICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7CiAg
ICAgICAgIG1fZnJhbWUtPnBhZ2VEZXN0cm95ZWQoKTsKICAgICB9Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgIFttX2ZyYW1lLT5icmlkZ2UoKSBjbG9zZV07Ci0jZW5kaWYKICAgICBtX2NsaWVudC0+
ZGV0YWNoZWRGcm9tUGFyZW50NCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDMwOTc0KQor
KysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDExICsxNTUs
NiBAQCBGcmFtZTo6fkZyYW1lKCkKIHsKICAgICBzZXRWaWV3KDApOwogICAgIGxvYWRlcigpLT5j
bGVhclJlY29yZGVkRm9ybVZhbHVlcygpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHNldEJy
aWRnZSgwKTsKLSNlbmRpZgotICAgIAogICAgIGxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIGRvaW5nIGFsbCB0aGlzIHdvcmsg
aW5zaWRlIHRoZSBkZXN0cnVjdG9yCkBAIC0xODg3LDcgKzE4ODIsNiBAQCBGcmFtZVByaXZhdGU6
OkZyYW1lUHJpdmF0ZShQYWdlKiBwYWdlLCBGCiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgLCBtX3dpbmRvd1NjcmlwdE9iamVjdChuaWwpCi0gICAgLCBtX2JyaWRnZShuaWwpCiAjZW5k
aWYKIHsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAzMDk3NSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsMTIgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICNp
ZiBQTEFURk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KLUBjbGFzcyBXZWJDb3JlRnJhbWVCcmlk
Z2U7CiBAY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwogI2Vsc2UKIGNsYXNzIE5TQXJyYXk7CiBjbGFz
cyBOU0RpY3Rpb25hcnk7CiBjbGFzcyBOU011dGFibGVEaWN0aW9uYXJ5OwogY2xhc3MgTlNTdHJp
bmc7Ci1jbGFzcyBXZWJDb3JlRnJhbWVCcmlkZ2U7CiBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiB0
eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CiAjZW5kaWYKQEAgLTg3LDExICs4NSw2IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGluaXQoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykgICAg
Ci0gICAgdm9pZCBzZXRCcmlkZ2UoV2ViQ29yZUZyYW1lQnJpZGdlKik7Ci0gICAgV2ViQ29yZUZy
YW1lQnJpZGdlKiBicmlkZ2UoKSBjb25zdDsKLSNlbmRpZgotCiAgICAgUGFnZSogcGFnZSgpIGNv
bnN0OwogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CiAK
SW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDMwOTc0KQorKysgV2ViQ29yZS9wYWdlL0Zy
YW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsOCBAQCBuYW1lc3BhY2Ug
S0pTIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwotQGNsYXNzIFdlYkNv
cmVGcmFtZUJyaWRnZTsKIEBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiAjZWxzZQotY2xhc3MgV2Vi
Q29yZUZyYW1lQnJpZGdlOwogY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwogI2VuZGlmCiAjZW5kaWYK
QEAgLTEyOSw3ICsxMjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgICAgIFJldGFpblB0cjxXZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2Ny
aXB0T2JqZWN0OwotICAgICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UqIG1fYnJpZGdlOwogI2VuZGlm
CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMzA5NzYpCisrKyBX
ZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw2
IEBACiAjaW1wb3J0ICJTeXN0ZW1UaW1lLmgiCiAjaW1wb3J0ICJUZXh0UmVzb3VyY2VEZWNvZGVy
LmgiCiAjaW1wb3J0ICJVc2VyU3R5bGVTaGVldExvYWRlci5oIgotI2ltcG9ydCAiV2ViQ29yZUZy
YW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgIldl
YkRhc2hib2FyZFJlZ2lvbi5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgpA
QCAtMTE0LDI3ICsxMTMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXZvaWQgRnJhbWU6OnNl
dEJyaWRnZShXZWJDb3JlRnJhbWVCcmlkZ2UqIGJyaWRnZSkKLXsgCi0gICAgaWYgKGQtPm1fYnJp
ZGdlID09IGJyaWRnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFicmlkZ2UpIHsKLSAg
ICAgICAgW2QtPm1fYnJpZGdlIGNsZWFyRnJhbWVdOwotICAgICAgICBIYXJkUmVsZWFzZShkLT5t
X2JyaWRnZSk7Ci0gICAgICAgIGQtPm1fYnJpZGdlID0gbmlsOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEhhcmRSZXRhaW4oYnJpZGdlKTsKLSAgICBIYXJkUmVsZWFzZShkLT5tX2JyaWRn
ZSk7Ci0gICAgZC0+bV9icmlkZ2UgPSBicmlkZ2U7Ci19Ci0KLVdlYkNvcmVGcmFtZUJyaWRnZSog
RnJhbWU6OmJyaWRnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm1fYnJpZGdlOwotfQotCiAv
LyBFaXRoZXIgZ2V0IGNhY2hlZCByZWdleHAgb3IgYnVpbGQgb25lIHRoYXQgbWF0Y2hlcyBhbnkg
b2YgdGhlIGxhYmVscy4KIC8vIFRoZSByZWdleHAgd2UgYnVpbGQgaXMgb2YgdGhlIGZvcm06ICAo
U1RSMXxTVFIyfFNUUk4pCiBSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwRm9yTGFiZWxzKE5TQXJy
YXkqIGxhYmVscykKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UuaAkocmV2
aXNpb24gMzA5NzUpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCwxNSArNTQsMTIgQEAKICAgICBCT09MIF9jbG9zZWQ7CiB9CiAK
Ky0gKHZvaWQpc2V0V2ViQ29yZUZyYW1lOihXZWJDb3JlOjpGcmFtZSopd2ViQ29yZUZyYW1lOwog
LSAoV2ViQ29yZTo6RnJhbWUqKV9mcmFtZTsgLy8gdW5kZXJzY29yZSB0byBwcmV2ZW50IGNvbmZs
aWN0IHdpdGggLVtOU1ZpZXcgZnJhbWVdCiAKLSsgKFdlYkNvcmVGcmFtZUJyaWRnZSAqKWJyaWRn
ZUZvckRPTURvY3VtZW50OihET01Eb2N1bWVudCAqKWRvY3VtZW50OwotCiAtIChpZClpbml0Owog
LSAodm9pZCljbG9zZTsKIAotLSAodm9pZCljbGVhckZyYW1lOwotCiAtIChOU1VSTCAqKWJhc2VV
Ukw7CiAKIC0gKHZvaWQpZm9yY2VMYXlvdXRBZGp1c3RpbmdWaWV3U2l6ZTooQk9PTClhZGp1c3RT
aXplRmxhZzsKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZp
c2lvbiAzMDk3NikKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTUsMTMgKzIxNSw2IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNj
cmlwdG9yKiBhZURlc2NGcm8KIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVGcmFtZUJyaWRnZQog
Ci1zdGF0aWMgaW5saW5lIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlKEZyYW1lICpmcmFtZSkK
LXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBmcmFt
ZS0+YnJpZGdlKCk7Ci19Ci0KIC0gKE5TU3RyaW5nICopZG9tYWluCiB7CiAgICAgRG9jdW1lbnQg
KmRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CkBAIC0yMzAsMTEgKzIyMyw2IEBAIHN0YXRpYyBp
bmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UKICAgICByZXR1cm4gbmlsOwogfQogCi0r
IChXZWJDb3JlRnJhbWVCcmlkZ2UgKilicmlkZ2VGb3JET01Eb2N1bWVudDooRE9NRG9jdW1lbnQg
Kilkb2N1bWVudAotewotICAgIHJldHVybiBicmlkZ2UoW2RvY3VtZW50IF9kb2N1bWVudF0tPmZy
YW1lKCkpOwotfQotCiAtIChpZClpbml0CiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRL
SlM7CkBAIC0yNjcsNyArMjU1LDcgQEAgc3RhdGljIGlubGluZSBXZWJDb3JlRnJhbWVCcmlkZ2Ug
KmJyaWRnZQogCiAtICh2b2lkKWNsb3NlCiB7Ci0gICAgW3NlbGYgY2xlYXJGcmFtZV07CisgICAg
bV9mcmFtZSA9IDA7CiAgICAgX2Nsb3NlZCA9IFlFUzsKIH0KIApAQCAtMjg1LDExICsyNzMsNiBA
QCBzdGF0aWMgaW5saW5lIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlCiAgICAgfQogfQogCi0t
ICh2b2lkKWNsZWFyRnJhbWUKLXsKLSAgICBtX2ZyYW1lID0gMDsKLX0KLQogLSAoTlNTdHJpbmcg
Kilfc3RyaW5nV2l0aERvY3VtZW50VHlwZVN0cmluZ0FuZE1hcmt1cFN0cmluZzooTlNTdHJpbmcg
KiltYXJrdXBTdHJpbmcKIHsKICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnRUeXBlU3RyaW5n
KCkgKyBtYXJrdXBTdHJpbmc7CkBAIC0xMTc5LDYgKzExNjIsMTEgQEAgc3RhdGljIEhUTUxGb3Jt
RWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy0g
KHZvaWQpc2V0V2ViQ29yZUZyYW1lOihGcmFtZSopd2ViQ29yZUZyYW1lCit7CisgICAgbV9mcmFt
ZSA9IHdlYkNvcmVGcmFtZTsKK30KKwogLSAoRnJhbWUqKV9mcmFtZQogewogICAgIHJldHVybiBt
X2ZyYW1lOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwOTc3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NiBAQAorMjAwOC0wMy0xMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSByZW1vdmUgYWxsIGJyaWRnZS1yZWxhdGVkIHRoaW5ncyBmcm9tIFdlYkNv
cmUgZXhjZXB0IHRoZSBicmlkZ2UgaXRzZWxmCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0
aW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBfYnJpZGdlXSk6IFJlaW1wbGVtZW50ZWQgdG8g
bm90IHVzZSB0aGUgYnJpZGdlRm9yRE9NRG9jdW1lbnQ6IG1ldGhvZC4KKworICAgICAgICAqIERl
ZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdENvbnRleHRNZW51RGVsZWdhdGUubW06IFJlbW92ZWQg
dW5uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxl
ci5tbTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5o
OiBSZW1vdmVkIHVubmVlZGVkIHRoaW5ncywgaW5jbHVkaW5nIHRoZQorICAgICAgICBpbml0IGFu
ZCBjbG9zZSBtZXRob2RzLiBBZGRlZCBhIHNldFdlYkZyYW1lOiBtZXRob2QuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWVC
cmlkZ2Ugc2V0V2ViRnJhbWU6XSk6IEFkZGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZnJhbWVMb2FkZXJEZXN0cm95ZWQpOiBBZGRlZCBhbiBhc3NlcnRpb24uCisgICAgICAgIChXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUGFyZW50NCk6IE1vdmVkIHRoZSBjYWxsIHRv
IGNsb3NlIG9uIHRoZQorICAgICAgICBicmlkZ2UgaGVyZS4gU29vbiB3ZSB3aWxsIGJlIGFibGUg
dG8gcmVtb3ZlIHRoaXMgZW50aXJlbHkhCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6
Y3JlYXRlRnJhbWUpOiBSZXdyb3RlIHRoaXMgdG8gdXNlIHRoZSBtZXRob2QgbW92ZWQKKyAgICAg
ICAgaW50byBXZWJGcmFtZSBmcm9tIHRoZSBicmlkZ2UuCisKKyAgICAgICAgKiBXZWJWaWV3L1dl
YkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZVByaXZhdGUgZGVhbGxvY10pOiBBZGRlZCBj
b2RlIHRvIHJlbGVhc2UgdGhlIGJyaWRnZSwgYmVjYXVzZSBpdCdzCisgICAgICAgIG5vdyBvd25l
ZCBieSB0aGUgZnJhbWUuCisgICAgICAgICgtW1dlYkZyYW1lUHJpdmF0ZSBmaW5hbGl6ZV0pOiBB
ZGRlZCB0aGlzIG1pc3NpbmcgbWV0aG9kLiBXZSdkIGxlYWsgdGhlIHNjcmlwdAorICAgICAgICBk
ZWJ1Z2dlciB1bmRlciBHQyB3aXRob3V0IHRoaXMhCisgICAgICAgIChraXQpOiBSZXdyb3RlIHRo
ZSBmdW5jdGlvbiB0aGF0IG1hcHMgZnJvbSBhIFdlYkNvcmU6OkZyYW1lIHRvIGEgV2ViRnJhbWUg
dG8KKyAgICAgICAgdXNlIFdlYkZyYW1lTG9hZGVyQ2xpZW50IGluc3RlYWQgb2YgdGhlIGJyaWRn
ZS4KKyAgICAgICAgKCtbV2ViRnJhbWUgX2NyZWF0ZUZyYW1lV2l0aFBhZ2U6ZnJhbWVOYW1lOmZy
YW1lVmlldzpvd25lckVsZW1lbnQ6XSk6IEFkZGVkLgorICAgICAgICBUaGlzIGlzIGNvZGUgdGhh
dCB1c2VkIHRvIGxpdmUgaW4gdGhlIGJyaWRnZSdzIGluaXQgZnVuY3Rpb24uCisgICAgICAgICgr
W1dlYkZyYW1lIF9jcmVhdGVNYWluRnJhbWVXaXRoUGFnZTpmcmFtZU5hbWU6ZnJhbWVWaWV3Ol0p
OiBEaXR0by4KKyAgICAgICAgKCtbV2ViRnJhbWUgV2ViQ29yZTo6X2NyZWF0ZVN1YmZyYW1lV2l0
aE93bmVyRWxlbWVudDpmcmFtZU5hbWU6ZnJhbWVWaWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgX2luaXRXaXRoV2ViRnJhbWVWaWV3OndlYlZpZXc6YnJpZGdlOl0pOiBSZXRhaW4g
dGhlIGJyaWRnZSwgc2luY2UKKyAgICAgICAgdGhlIFdlYlZpZXcgaXMgbm93IHRoZSBicmlkZ2Un
cyBvd25lci4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3VwZGF0ZUJhY2tncm91bmRdKTogQ2hhbmdl
ZCB0aGlzIG9uZSBjYWxsIHNpdGUgdGhhdCB3YXMgY2FsbGluZyB0aGUKKyAgICAgICAgV2ViQ29y
ZTo6RnJhbWU6OmJyaWRnZSBmdW5jdGlvbiBkaXJlY3RseSB0byB1c2UgdGhlIGtpdCBmdW5jdGlv
biBpbnN0ZWFkLgorICAgICAgICAoLVtXZWJGcmFtZSBkZWFsbG9jXSk6IEFkZGVkIGNvZGUgdG8g
Y2xlYXIgdGhlIFdlYkZyYW1lIHBvaW50ZXIgaW4gdGhlIGJyaWRnZS4KKyAgICAgICAgVGhpcyBj
b2RlIHdvbid0IGxhc3QgbG9uZyAtLSB3ZSdyZSBlbGltaW5hdGluZyB0aGUgYnJpZGdlIHNvb24u
CisgICAgICAgICgtW1dlYkZyYW1lIGZpbmFsaXplXSk6IERpdHRvLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZUludGVybmFsLmg6IEFkZGVkIGEgY29yZUZyYW1lIGJhY2twb2ludGVyIGFu
ZCB0d28gbmV3IG1ldGhvZHMKKyAgICAgICAgZm9yIGNyZWF0aW5nIGZyYW1lcy4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlh
bGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKTogUmV3cm90ZSB0aGlzIHRvIHVzZQor
ICAgICAgICB0aGUgbWV0aG9kIG1vdmVkIGludG8gV2ViRnJhbWUgZnJvbSB0aGUgYnJpZGdlLiBH
ZXRzIHJpZCBvZiB0aGUgdW5wbGVhc2FudCBpZGlvbQorICAgICAgICB3aGVyZSB3ZSBoYXZlIHRv
IGFsbG9jYXRlIGEgV2ViRnJhbWVCcmlkZ2UgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVsZWFzZSBp
dC4KKwogMjAwOC0wMy0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW5kZXJzLgpJbmRleDogV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0
aW9ucy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1t
CShyZXZpc2lvbiAzMDk3NCkKKysrIFdlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwzNiBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aW1wb3J0IDxXZWJLaXQvV2ViRE9NT3BlcmF0aW9uc1ByaXZhdGUuaD4KKyNpbXBvcnQgIldlYkRP
TU9wZXJhdGlvbnNQcml2YXRlLmgiCiAKKyNpbXBvcnQgIldlYkFyY2hpdmVyLmgiCisjaW1wb3J0
ICJXZWJEYXRhU291cmNlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKKyNp
bXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkZyYW1lUHJpdmF0ZS5oIgor
I2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdl
YktpdC9ET01FeHRlbnNpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NSFRNTC5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1l
QnJpZGdlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZVByaXZhdGUuaD4KLSNpbXBv
cnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0
cmluZ0V4dHJhcy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmVyLmg+CiAKICNpZiBFTkFC
TEUoU1ZHKQogI2ltcG9ydCA8V2ViS2l0L0RPTVNWRy5oPgogI2VuZGlmCiAKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCiBAaW1wbGVtZW50YXRpb24gRE9NTm9kZSAoV2ViRE9NTm9kZU9wZXJh
dGlvbnMpCiAKIC0gKFdlYkZyYW1lQnJpZGdlICopX2JyaWRnZQogewotICAgIHJldHVybiAoV2Vi
RnJhbWVCcmlkZ2UgKilbV2ViRnJhbWVCcmlkZ2UgYnJpZGdlRm9yRE9NRG9jdW1lbnQ6W3NlbGYg
b3duZXJEb2N1bWVudF1dOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmUoc2VsZiktPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBba2l0KGZyYW1lKSBfYnJpZGdlXTsKIH0KIAogLSAo
V2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKSW5kZXg6IFdlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRl
cy9XZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdENvbnRleHRNZW51RGVsZWdhdGUubW0JKHJl
dmlzaW9uIDMwOTc0KQorKysgV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRD
b250ZXh0TWVudURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZyYW1l
QnJpZGdlLmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NLmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NUHJp
dmF0ZS5oPgogCkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQkocmV2aXNpb24gMzA5NzQpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJv
bGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29y
ZUZyYW1lQnJpZGdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZUludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
RnJhbWVCcmlkZ2UuaD4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVC
cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
QnJpZGdlLmgJKHJldmlzaW9uIDMwOTc1KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMCArMjgsMTIgQEAKIAogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlRnJhbWVCcmlkZ2UuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKLSAgICBjbGFzcyBQYWdlOwotfQot
CiBAY2xhc3MgV2ViRnJhbWU7Ci1AY2xhc3MgV2ViRnJhbWVWaWV3OwogCiBAaW50ZXJmYWNlIFdl
YkZyYW1lQnJpZGdlIDogV2ViQ29yZUZyYW1lQnJpZGdlIHsKIEBwdWJsaWMKLSAgICBXZWJGcmFt
ZSAqX2ZyYW1lOworICAgIFdlYkZyYW1lICpfd2ViRnJhbWU7CiB9Ci0tIChpZClpbml0TWFpbkZy
YW1lV2l0aFBhZ2U6KFdlYkNvcmU6OlBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXc7Ci0tIChp
ZClpbml0U3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVs
ZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpbmFt
ZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldzsKLS0gKHZvaWQpY2xvc2U7Cist
ICh2b2lkKXNldFdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwogLSAoV2ViRnJhbWUgKil3
ZWJGcmFtZTsKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVC
cmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUJyaWRnZS5tbQkocmV2aXNpb24gMzA5NzUpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2MSArMjgsMTggQEAKIAog
I2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKIAotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIldlYktpdFN0YXRp
c3RpY3NQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJWaWV3LmgiCi0jaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9I
VE1MRnJhbWVPd25lckVsZW1lbnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisjaW1w
b3J0ICJXZWJGcmFtZS5oIgogCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWVCcmlkZ2UKIAotLSAo
dm9pZClmaW5pc2hJbml0aWFsaXppbmdXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KGNv
bnN0IFN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldyBvd25l
ckVsZW1lbnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50Ci17Ci0gICAgKytX
ZWJCcmlkZ2VDb3VudDsKLQotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBraXQocGFnZSk7Ci0KLSAg
ICBfZnJhbWUgPSBbW1dlYkZyYW1lIGFsbG9jXSBfaW5pdFdpdGhXZWJGcmFtZVZpZXc6ZnJhbWVW
aWV3IHdlYlZpZXc6d2ViVmlldyBicmlkZ2U6c2VsZl07Ci0KLSAgICBtX2ZyYW1lID0gbmV3IEZy
YW1lKHBhZ2UsIG93bmVyRWxlbWVudCwgbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50KF9mcmFtZSkp
OwotICAgIG1fZnJhbWUtPnNldEJyaWRnZShzZWxmKTsKLSAgICBtX2ZyYW1lLT50cmVlKCktPnNl
dE5hbWUobmFtZSk7Ci0gICAgbV9mcmFtZS0+aW5pdCgpOwotCi0gICAgW3NlbGYgc2V0VGV4dFNp
emVNdWx0aXBsaWVyOlt3ZWJWaWV3IHRleHRTaXplTXVsdGlwbGllcl1dOwotfQotCi0tIChpZClp
bml0TWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVOYW1lOihjb25zdCBTdHJpbmcm
KW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIFtzZWxmIGZpbmlzaEluaXRpYWxpemluZ1dpdGhQYWdlOnBhZ2Ug
ZnJhbWVOYW1lOm5hbWUgZnJhbWVWaWV3OmZyYW1lVmlldyBvd25lckVsZW1lbnQ6MF07Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKWluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6KEhU
TUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50IGZyYW1lTmFtZTooY29uc3QgU3RyaW5n
JiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3CistICh2b2lkKXNldFdl
YkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwogewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgW3NlbGYgZmluaXNoSW5pdGlhbGl6aW5nV2l0aFBhZ2U6b3duZXJFbGVtZW50LT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5wYWdlKCkgZnJhbWVOYW1lOm5hbWUgZnJhbWVWaWV3OmZyYW1lVmll
dyBvd25lckVsZW1lbnQ6b3duZXJFbGVtZW50XTsKLSAgICByZXR1cm4gc2VsZjsKKyAgICBfd2Vi
RnJhbWUgPSB3ZWJGcmFtZTsKIH0KIAogLSAoV2ViRnJhbWUgKil3ZWJGcmFtZQogewotICAgIHJl
dHVybiBfZnJhbWU7Ci19Ci0KLS0gKHZvaWQpY2xvc2UKLXsKLSAgICBbc3VwZXIgY2xvc2VdOwot
ICAgIGlmICghX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgLS1XZWJCcmlkZ2VDb3VudDsK
LSAgICBbX2ZyYW1lIHJlbGVhc2VdOwotICAgIF9mcmFtZSA9IG5pbDsKKyAgICByZXR1cm4gX3dl
YkZyYW1lOwogfQogCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDMwOTc2KQorKysgV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZyYW1lQnJpZGdlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdl
dC5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KQEAgLTE0Niw2ICsxNDUsNyBAQCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6V2ViRnJhbWVMb2FkZXJDbGllCiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKIHsKKyAgICBBU1NFUlQoIW1fd2Vi
RnJhbWUtPl9wcml2YXRlLT5icmlkZ2UpOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCkBAIC0yMTIs
NiArMjEyLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUAogCiB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQ0KCkKIHsKKyAgICBb
bV93ZWJGcmFtZS0+X3ByaXZhdGUtPmJyaWRnZSBjbG9zZV07CiAgICAgbV93ZWJGcmFtZS0+X3By
aXZhdGUtPmJyaWRnZSA9IG5pbDsKIH0KIApAQCAtMTEzMywyNCArMTEzNCwyMyBAQCBQYXNzUmVm
UHRyPEZyYW1lPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6CiAgICAgW2NoaWxkVmlldyBfc2V0TWFy
Z2luV2lkdGg6bWFyZ2luV2lkdGhdOwogICAgIFtjaGlsZFZpZXcgX3NldE1hcmdpbkhlaWdodDpt
YXJnaW5IZWlnaHRdOwogCi0gICAgV2ViRnJhbWVCcmlkZ2UgKm5ld0JyaWRnZSA9IFtbV2ViRnJh
bWVCcmlkZ2UgYWxsb2NdIGluaXRTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6b3duZXJFbGVtZW50
IGZyYW1lTmFtZTpuYW1lIGZyYW1lVmlldzpjaGlsZFZpZXddOworICAgIFJlZlB0cjxGcmFtZT4g
bmV3Q29yZUZyYW1lID0gW1dlYkZyYW1lIF9jcmVhdGVTdWJmcmFtZVdpdGhPd25lckVsZW1lbnQ6
b3duZXJFbGVtZW50IGZyYW1lTmFtZTpuYW1lIGZyYW1lVmlldzpjaGlsZFZpZXddOworCiAgICAg
W2NoaWxkVmlldyByZWxlYXNlXTsKIAotICAgIGlmICghbmV3QnJpZGdlKQorICAgIGlmICghbmV3
Q29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFttX3dlYkZyYW1lLmdldCgpIF9h
ZGRDaGlsZDpbbmV3QnJpZGdlIHdlYkZyYW1lXV07Ci0gICAgW25ld0JyaWRnZSByZWxlYXNlXTsK
KyAgICBXZWJGcmFtZSAqbmV3RnJhbWUgPSBraXQobmV3Q29yZUZyYW1lLmdldCgpKTsKIAotICAg
IFJlZlB0cjxGcmFtZT4gbmV3RnJhbWUgPSBbbmV3QnJpZGdlIF9mcmFtZV07Ci0gICAgCi0gICAg
W21fd2ViRnJhbWUuZ2V0KCkgX2xvYWRVUkw6dXJsIHJlZmVycmVyOnJlZmVycmVyIGludG9DaGls
ZDpraXQobmV3RnJhbWUuZ2V0KCkpXTsKKyAgICBbbV93ZWJGcmFtZS5nZXQoKSBfYWRkQ2hpbGQ6
bmV3RnJhbWVdOyAgICAKKyAgICBbbV93ZWJGcmFtZS5nZXQoKSBfbG9hZFVSTDp1cmwgcmVmZXJy
ZXI6cmVmZXJyZXIgaW50b0NoaWxkOm5ld0ZyYW1lXTsKIAogICAgIC8vIFRoZSBmcmFtZSdzIG9u
bG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAg
aWYgKCFuZXdGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICBpZiAoIW5ld0NvcmVGcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbmV3RnJh
bWUuZ2V0KCk7CisgICAgcmV0dXJuIG5ld0NvcmVGcmFtZS5yZWxlYXNlKCk7CiAKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZp
c2lvbiAzMDk3NCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDEzICsxMzYsMjEgQEAgTlNTdHJpbmcgKldlYlBhZ2VDYWNoZURvY3VtZW50
Vmlld0tleSA9IAogCiAtICh2b2lkKWRlYWxsb2MKIHsKKyAgICBbYnJpZGdlIHJlbGVhc2VdOwog
ICAgIFt3ZWJGcmFtZVZpZXcgcmVsZWFzZV07Ci0gICAgCisKICAgICBkZWxldGUgc2NyaXB0RGVi
dWdnZXI7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKKy0gKHZvaWQpZmluYWxpemUKK3sK
KyAgICBkZWxldGUgc2NyaXB0RGVidWdnZXI7CisKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQor
CiAtICh2b2lkKXNldFdlYkZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopdiAKIHsgCiAgICAgW3Yg
cmV0YWluXTsKQEAgLTIzNywxMSArMjQ1LDYgQEAgRWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShX
ZWJLaXRFZGl0YWJsZQogCiBAaW1wbGVtZW50YXRpb24gV2ViRnJhbWUgKFdlYkludGVybmFsKQog
Ci1zdGF0aWMgaW5saW5lIFdlYkZyYW1lICpmcmFtZShXZWJDb3JlRnJhbWVCcmlkZ2UgKmJyaWRn
ZSkKLXsKLSAgICByZXR1cm4gKChXZWJGcmFtZUJyaWRnZSAqKWJyaWRnZSktPl9mcmFtZTsKLX0K
LQogRnJhbWUqIGNvcmUoV2ViRnJhbWUgKmZyYW1lKQogewogICAgIGlmICghZnJhbWUpCkBAIC0y
NTUsNyArMjU4LDcgQEAgRnJhbWUqIGNvcmUoV2ViRnJhbWUgKmZyYW1lKQogCiBXZWJGcmFtZSAq
a2l0KEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gZnJhbWUgPyAoKFdlYkZyYW1lQnJpZGdl
ICopZnJhbWUtPmJyaWRnZSgpKS0+X2ZyYW1lIDogbmlsOworICAgIHJldHVybiBmcmFtZSA/IHN0
YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KSktPndlYkZyYW1lKCkgOiBuaWw7CiB9CiAKIFBhZ2UqIGNvcmUoV2ViVmlldyAqd2ViVmlldykK
QEAgLTI3Niw2ICsyNzksMzcgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJh
bWUpCiAgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnBhZ2UoKSk7CiB9CiAKKysgKFBhc3NSZWZQ
dHI8RnJhbWU+KV9jcmVhdGVGcmFtZVdpdGhQYWdlOihQYWdlKilwYWdlIGZyYW1lTmFtZTooY29u
c3QgU3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnJhbWVWaWV3IG93bmVy
RWxlbWVudDooSFRNTEZyYW1lT3duZXJFbGVtZW50Kilvd25lckVsZW1lbnQKK3sKKyAgICArK1dl
YkJyaWRnZUNvdW50OworCisgICAgV2ViVmlldyAqd2ViVmlldyA9IGtpdChwYWdlKTsKKworICAg
IFdlYkZyYW1lQnJpZGdlICpicmlkZ2UgPSBbW1dlYkZyYW1lQnJpZGdlIGFsbG9jXSBpbml0XTsK
KyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbW3NlbGYgYWxsb2NdIF9pbml0V2l0aFdlYkZyYW1lVmll
dzpmcmFtZVZpZXcgd2ViVmlldzp3ZWJWaWV3IGJyaWRnZTpicmlkZ2VdOworICAgIFJlZlB0cjxG
cmFtZT4gY29yZUZyYW1lID0gbmV3IEZyYW1lKHBhZ2UsIG93bmVyRWxlbWVudCwgbmV3IFdlYkZy
YW1lTG9hZGVyQ2xpZW50KGZyYW1lKSk7CisgICAgW2ZyYW1lIHJlbGVhc2VdOworICAgIFticmlk
Z2Ugc2V0V2ViQ29yZUZyYW1lOmNvcmVGcmFtZS5nZXQoKV07CisgICAgW2JyaWRnZSByZWxlYXNl
XTsKKworICAgIGNvcmVGcmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOworICAgIGNvcmVGcmFt
ZS0+aW5pdCgpOworCisgICAgW2JyaWRnZSBzZXRUZXh0U2l6ZU11bHRpcGxpZXI6W3dlYlZpZXcg
dGV4dFNpemVNdWx0aXBsaWVyXV07CisKKyAgICByZXR1cm4gY29yZUZyYW1lLnJlbGVhc2UoKTsK
K30KKworKyAodm9pZClfY3JlYXRlTWFpbkZyYW1lV2l0aFBhZ2U6KFBhZ2UqKXBhZ2UgZnJhbWVO
YW1lOihjb25zdCBTdHJpbmcmKW5hbWUgZnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmcmFtZVZp
ZXcKK3sKKyAgICBbc2VsZiBfY3JlYXRlRnJhbWVXaXRoUGFnZTpwYWdlIGZyYW1lTmFtZTpuYW1l
IGZyYW1lVmlldzpmcmFtZVZpZXcgb3duZXJFbGVtZW50OjBdOworfQorCisrIChQYXNzUmVmUHRy
PFdlYkNvcmU6OkZyYW1lPilfY3JlYXRlU3ViZnJhbWVXaXRoT3duZXJFbGVtZW50OihIVE1MRnJh
bWVPd25lckVsZW1lbnQqKW93bmVyRWxlbWVudCBmcmFtZU5hbWU6KGNvbnN0IFN0cmluZyYpbmFt
ZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldworeworICAgIHJldHVybiBbc2Vs
ZiBfY3JlYXRlRnJhbWVXaXRoUGFnZTpvd25lckVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkt
PnBhZ2UoKSBmcmFtZU5hbWU6bmFtZSBmcmFtZVZpZXc6ZnJhbWVWaWV3IG93bmVyRWxlbWVudDpv
d25lckVsZW1lbnRdOworfQorCiAvKgogICAgIEluIHRoZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBh
Ym91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1p
cnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKICAgICBUaGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFyZ2V0
IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0SXRl
bSIuICAKQEAgLTM4OSw3ICs0MjMsNyBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3
ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIF9wcml2YXRlID0gW1tXZWJGcmFt
ZVByaXZhdGUgYWxsb2NdIGluaXRdOwotICAgIF9wcml2YXRlLT5icmlkZ2UgPSBicmlkZ2U7Cisg
ICAgX3ByaXZhdGUtPmJyaWRnZSA9IFticmlkZ2UgcmV0YWluXTsKIAogICAgIGlmIChmdikgewog
ICAgICAgICBbX3ByaXZhdGUgc2V0V2ViRnJhbWVWaWV3OmZ2XTsKQEAgLTQyMCw4ICs0NTQsOCBA
QCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSkKIAogICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1l
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkg
ewotICAgICAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gKFdlYkZyYW1lQnJpZGdlICopZnJh
bWUtPmJyaWRnZSgpOwotICAgICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbYnJpZGdlIHdlYkZy
YW1lXTsKKyAgICAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0ga2l0KGZyYW1lKTsKKyAgICAgICAg
V2ViRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IFt3ZWJGcmFtZSBfYnJpZGdlXTsKICAgICAgICAgLy8g
TmV2ZXIgY2FsbCBzZXREcmF3c0JhY2tncm91bmQ6WUVTIGhlcmUgb24gdGhlIHNjcm9sbCB2aWV3
IG9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHdpbGwKICAgICAgICAgLy8gZmxhc2ggYmV0d2VlbiBw
YWdlcyBsb2Fkcy4gc2V0RHJhd3NCYWNrZ3JvdW5kOllFUyB3aWxsIGJlIGNhbGxlZCBpbiBfZnJh
bWVMb2FkQ29tcGxldGVkLgogICAgICAgICBpZiAoIWRyYXdzQmFja2dyb3VuZCkKQEAgLTY3NSw3
ICs3MDksNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAKIC0g
KHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVChfcHJpdmF0ZS0+YnJpZGdlID09IG5pbCk7Cisg
ICAgW19wcml2YXRlLT5icmlkZ2Ugc2V0V2ViRnJhbWU6bmlsXTsKICAgICBbX3ByaXZhdGUgcmVs
ZWFzZV07CiAgICAgLS1XZWJGcmFtZUNvdW50OwogICAgIFtzdXBlciBkZWFsbG9jXTsKQEAgLTY4
Myw3ICs3MTcsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAK
IC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPmJyaWRnZSA9PSBuaWwp
OworICAgIFtfcHJpdmF0ZS0+YnJpZGdlIHNldFdlYkZyYW1lOm5pbF07CiAgICAgLS1XZWJGcmFt
ZUNvdW50OwogICAgIFtzdXBlciBmaW5hbGl6ZV07CiB9CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZUludGVybmFsLmgJKHJldmlzaW9uIDMwOTc0KQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXI7CiAgICAgY2xhc3MgSGlzdG9y
eUl0ZW07CiAgICAgY2xhc3MgSFRNTEVsZW1lbnQ7CisgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJF
bGVtZW50OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBSYW5n
ZTsKQEAgLTk0LDYgKzk1LDcgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJh
bWUpOwogCiBAaW50ZXJmYWNlIFdlYkZyYW1lUHJpdmF0ZSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMK
KyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lOwogICAgIFdlYkZyYW1lVmlldyAqd2ViRnJh
bWVWaWV3OwogICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2U7CiAgICAgV2ViU2NyaXB0RGVidWdn
ZXIqIHNjcmlwdERlYnVnZ2VyOwpAQCAtMTA3LDYgKzEwOSw5IEBAIHN0cnVjdCBXZWJDb3JlSGlz
dG9yeUl0ZW07CiAKIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdlYkludGVybmFsKQogCisrICh2b2lk
KV9jcmVhdGVNYWluRnJhbWVXaXRoUGFnZTooV2ViQ29yZTo6UGFnZSopcGFnZSBmcmFtZU5hbWU6
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZy
YW1lVmlldzsKKysgKFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+KV9jcmVhdGVTdWJmcmFtZVdp
dGhPd25lckVsZW1lbnQ6KFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVt
ZW50IGZyYW1lTmFtZTooY29uc3QgV2ViQ29yZTo6U3RyaW5nJiluYW1lIGZyYW1lVmlldzooV2Vi
RnJhbWVWaWV3ICopZnJhbWVWaWV3OworCiAtICh2b2lkKV91cGRhdGVCYWNrZ3JvdW5kOwogLSAo
dm9pZClfc2V0SW50ZXJuYWxMb2FkRGVsZWdhdGU6KGlkKWludGVybmFsTG9hZERlbGVnYXRlOwog
LSAoaWQpX2ludGVybmFsTG9hZERlbGVnYXRlOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJl
dmlzaW9uIDMwOTc2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw3ICsxMTIsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHRSZXNvdXJjZURlY29kZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZyYW1lQnJp
ZGdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZp
ZXcuaD4KQEAgLTE4MTksNyArMTgxOCw3IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSoKICAgICBXZWJLaXRJbml0aWFsaXplRGF0YWJhc2VzSWZOZWNlc3NhcnkoKTsK
IAogICAgIF9wcml2YXRlLT5wYWdlID0gbmV3IFBhZ2UobmV3IFdlYkNocm9tZUNsaWVudChzZWxm
KSwgbmV3IFdlYkNvbnRleHRNZW51Q2xpZW50KHNlbGYpLCBuZXcgV2ViRWRpdG9yQ2xpZW50KHNl
bGYpLCBuZXcgV2ViRHJhZ0NsaWVudChzZWxmKSwgbmV3IFdlYkluc3BlY3RvckNsaWVudChzZWxm
KSk7Ci0gICAgW1tbV2ViRnJhbWVCcmlkZ2UgYWxsb2NdIGluaXRNYWluRnJhbWVXaXRoUGFnZTpf
cHJpdmF0ZS0+cGFnZSBmcmFtZU5hbWU6ZnJhbWVOYW1lIGZyYW1lVmlldzpmcmFtZVZpZXddIHJl
bGVhc2VdOworICAgIFtXZWJGcmFtZSBfY3JlYXRlTWFpbkZyYW1lV2l0aFBhZ2U6X3ByaXZhdGUt
PnBhZ2UgZnJhbWVOYW1lOmZyYW1lTmFtZSBmcmFtZVZpZXc6ZnJhbWVWaWV3XTsKIAogI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgogICAgIGlmIChXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lU
X0ZJUlNUX1ZFUlNJT05fV0lUSF9MT0FESU5HX0RVUklOR19DT01NT05fUlVOTE9PUF9NT0RFUykp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19700</attachid>
            <date>2008-03-12 10:03:04 -0700</date>
            <delta_ts>2008-03-12 10:17:58 -0700</delta_ts>
            <desc>patch that drives a stake through the heart of the bridge</desc>
            <filename>BridgePatch.txt</filename>
            <type>text/plain</type>
            <size>255758</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDgtMDMtMTIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NDAKKyAgICAgICAgICBlbGlt
aW5hdGUgV2ViQ29yZUZyYW1lQnJpZGdlCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBB
ZGRlZCBtb3JlIGV4cG9ydHMsIG5lZWRlZCBieSBjb2RlIG1vdmVkIGZyb20gV2ViQ29yZUZyYW1l
QnJpZGdlCisgICAgICAgIHRvIFdlYkZyYW1lIGluIFdlYktpdC4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIG1vcmUgaGVhZGVycywgc2FtZSByZWFz
b24uIEFsc28gZGVsZXRlZAorICAgICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UuaCBhbmQgV2ViQ29y
ZUZyYW1lQnJpZGdlLm1tLgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6RnJhbWUpOiBBZGRlZCBjYWxsIHRvIGluaXRKYXZhSlNCaW5kaW5ncygp
LCBmb3JtZXJseSBoYW5kbGVkIGJ5CisgICAgICAgIHRoZSBXZWJDb3JlRnJhbWVCcmlkZ2UuCisg
ICAgICAgICogcGFnZS9GcmFtZS5oOiBBZGRlZCBpbml0SmF2YUpTQmluZGluZ3MgZnVuY3Rpb24u
CisKKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZVJlbmRlcmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgaGVyZSBmcm9tIFdlYkNvcmVGcmFtZUJy
aWRnZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbml0SmF2YUpTQmluZGluZ3MpOiBEaXR0
bzsgY29kZSB3YXMgaW4gdGhlIGluaXQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3Jl
RnJhbWVCcmlkZ2UubW06IFJlbW92ZWQuCisKIDIwMDgtMDMtMTIgIERhdmlkIEhhcnJpc29uICA8
aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQAogLm9iamNfY2xhc3NfbmFtZV9ET01UcmVl
V2Fsa2VyCiAub2JqY19jbGFzc19uYW1lX0RPTVVJRXZlbnQKIC5vYmpjX2NsYXNzX25hbWVfRE9N
V2hlZWxFdmVudAotLm9iamNfY2xhc3NfbmFtZV9XZWJDb3JlRnJhbWVCcmlkZ2UKIC5vYmpjX2Ns
YXNzX25hbWVfV2ViQ29yZUtleUdlbmVyYXRvcgogLm9iamNfY2xhc3NfbmFtZV9XZWJDb3JlVmll
d0ZhY3RvcnkKIC5vYmpjX2NsYXNzX25hbWVfV2ViRGFzaGJvYXJkUmVnaW9uCkBAIC0xNDksOCAr
MTQ4LDEwIEBAIF9fWk43V2ViQ29yZTExRWRpdENvbW1hbmQ3dW5hcHBseUV2CiBfX1pON1dlYkNv
cmUxMUZpbGVDaG9vc2VyMTBjaG9vc2VGaWxlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEx
RmlsZUNob29zZXJEMUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFjb21wbGV0ZVVSTEVS
S05TXzZTdHJpbmdFCitfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTFzZXRFbmNvZGluZ0VSS05T
XzZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEyY2FuQ2FjaGVQYWdlRXYKIF9f
Wk43V2ViQ29yZTExRnJhbWVMb2FkZXIxMnNob3VsZFJlbG9hZEVSS05TXzRLVVJMRVMzXworX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjEzZXhlY3V0ZVNjcmlwdEVSS05TXzZTdHJpbmdFYgogX19a
TjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE0ZGV0YWNoQ2hpbGRyZW5FdgogX19aTjdXZWJDb3JlMTFG
cmFtZUxvYWRlcjE0c2Nyb2xsVG9BbmNob3JFUktOU180S1VSTEUKIF9fWk43V2ViQ29yZTExRnJh
bWVMb2FkZXIxNHN0b3BBbGxMb2FkZXJzRXYKQEAgLTE4MCw2ICsxODEsNyBAQCBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyNGxvYWRFUktOU180S1VSCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVy
NGxvYWRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFTlNfMTNGcmFtZUxvYWRUeXBlRVM2X1BOU181
RXZlbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOUZvcm1TdGF0ZUVFRQogX19aTjdXZWJDb3JlMTFG
cmFtZUxvYWRlcjVjbGVhckViYgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjZyZWxvYWRFdgor
X19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjdhZGREYXRhRVBLY2kKIF9fWk43V2ViQ29yZTExRnJh
bWVMb2FkZXI3Y2FuTG9hZEVSS05TXzRLVVJMRVBLTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3Jl
MTFIaXN0b3J5SXRlbTEyYWRkQ2hpbGRJdGVtRU4zV1RGMTBQYXNzUmVmUHRySVMwX0VFCiBfX1pO
N1dlYkNvcmUxMUhpc3RvcnlJdGVtMTJzZXRVUkxTdHJpbmdFUktOU182U3RyaW5nRQpAQCAtMjA1
LDYgKzIwNyw5IEBAIF9fWk43V2ViQ29yZTExSGlzdG9yeUl0ZW1DMUVSS05TXzZTdHJpbmcKIF9f
Wk43V2ViQ29yZTExSGlzdG9yeUl0ZW1DMUV2CiBfX1pON1dlYkNvcmUxMUhpc3RvcnlJdGVtRDFF
dgogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE4Z0FsaWduQ2VudGVyQWx3YXlzRQorX19aTjdX
ZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzdJbnRSZWN0RVJL
TlMwXzE1U2Nyb2xsQWxpZ25tZW50RVM2XworX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjIwZ0Fs
aWduVG9FZGdlSWZOZWVkZWRFCitfX1pON1dlYkNvcmUxMWN1cnJlbnRUaW1lRXYKIF9fWk43V2Vi
Q29yZTExZ2xvYmFsUG9pbnRFUks4X05TUG9pbnRQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMXRv
VXNlclNwYWNlRVJLN19OU1JlY3RQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMkF0b21pY1N0cmlu
ZzNhZGRFUEtjCkBAIC0yMTQsNiArMjE5LDggQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIx
MHdoZWVsRXZlbnRFUAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxMm1vdXNlRHJhZ2dlZEVQ
N05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTRjdXJyZW50TlNFdmVudEV2CiBf
X1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxEaXJl
Y3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MTdkcmFnU291cmNlRW5kZWRBdEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RU5TXzEzRHJhZ09w
ZXJhdGlvbkUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdkcmFnU291cmNlTW92ZWRUb0VS
S05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhh
bmRsZVRleHRJbnB1dEV2ZW50RVJLTlNfNlN0cmluZ0VQTlNfNUV2ZW50RWJiCiBfX1pON1dlYkNv
cmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYgog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMHNlbmRDb250ZXh0TWVudUV2ZW50RVJLTlNfMThQ
bGF0Zm9ybU1vdXNlRXZlbnRFCkBAIC0yNTEsMTEgKzI1OCwxOSBAQCBfX1pON1dlYkNvcmUxMlNj
aGVkdWxlUGFpckMxRVA5TlNSdW5Mb29wCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3Jh
cE5TRGF0YUVQNk5TRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNyZWF0ZU5TRGF0
YUV2CiBfX1pON1dlYkNvcmUxMlRleHRFbmNvZGluZ0MxRVJLTlNfNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTEyVGV4dEl0ZXJhdG9yMTFyYW5nZUxlbmd0aEVQS05TXzVSYW5nZUViCitfX1pON1dlYkNv
cmUxMlRleHRJdGVyYXRvcjI2cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGhFUE5TXzdFbGVtZW50
RWlpYgorX19aTjdXZWJDb3JlMTJhcHBseUNvbW1hbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFF
ZGl0Q29tbWFuZEVFRQorX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU180Tm9kZUVOU18x
M0VDaGlsZHJlbk9ubHlFUE4zV1RGNlZlY3RvcklQUzBfTG0wRUVFCitfX1pON1dlYkNvcmUxMmNy
ZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFRUVOU18y
M0VBbm5vdGF0ZUZvckludGVyY2hhbmdlRWIKIF9fWk43V2ViQ29yZTEyZ2NDb250cm9sbGVyRXYK
IF9fWk43V2ViQ29yZTEyaWNvbkRhdGFiYXNlRXYKK19fWk43V2ViQ29yZTEzQVhPYmplY3RDYWNo
ZTIxZ0FjY2Vzc2liaWxpdHlFbmFibGVkRQorX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlM2dl
dEVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS1Mw
XwogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0RDFFdgogX19aTjdXZWJDb3JlMTNLZXlib2Fy
ZEV2ZW50QzFFUktOU18xMkF0b21pY1N0cmluZ0ViYlBOU185RE9NV2luZG93RVJLTlNfNlN0cmlu
Z0VqYmJiYmIKK19fWk43V2ViQ29yZTEzVHlwaW5nQ29tbWFuZDM5aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvRGV2
aWNlU3BhY2VFUktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTE0Q2FjaGVk
UmVzb3VyY2U1ZGVyZWZFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUx
NERvY3VtZW50TG9hZGVyMTJzZXRDb21taXR0ZWRFYgpAQCAtMzIxLDkgKzMzNiwxMiBAQCBfX1pO
N1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE1c2V0Rm9jdXNlCiBfX1pON1dlYkNvcmUxNUZvY3Vz
Q29udHJvbGxlcjE1c2V0SW5pdGlhbEZvY3VzRU5TXzE0Rm9jdXNEaXJlY3Rpb25FUE5TXzEzS2V5
Ym9hcmRFdmVudEUKIF9fWk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMThmb2N1c2VkT3JNYWlu
RnJhbWVFdgogX19aTjdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXI5c2V0QWN0aXZlRWIKK19fWk43
V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0QzFFUDlDR0NvbnRleHQKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0RDFFdgogX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxM3JpZ2h0VHJ1
bmNhdGVFUktOU182U3RyaW5nRWZSS05TXzRGb250RWIKIF9fWk43V2ViQ29yZTE1U3RyaW5nVHJ1
bmNhdG9yMTRjZW50ZXJUcnVuY2F0ZUVSS05TXzZTdHJpbmdFZlJLTlNfNEZvbnRFYgogX19aTjdX
ZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3I1d2lkdGhFUktOU182U3RyaW5nRVJLTlNfNEZvbnRFYgor
X19aTjdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb25DMUVSS05TXzhQb3NpdGlvbkVOU185RUFmZmlu
aXR5RQogX19aTjdXZWJDb3JlMTZGb250UGxhdGZvcm1EYXRhQzFFUDZOU0ZvbnRiYgogX19aTjdX
ZWJDb3JlMTZGb250UGxhdGZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlMTZNSU1FVHlwZVJlZ2lz
dHJ5MjRpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVFUktOU182U3RyaW5nRQpAQCAtMzM0LDggKzM1
MiwxMiBAQCBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05TXzRLCiBfX1pON1dl
YkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05TXzRLVVJMRU5TXzE0TmF2aWdhdGlvblR5cGVF
CiBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUV2CiBfX1pON1dlYkNvcmUxNmNvbG9y
RnJvbU5TQ29sb3JFUDdOU0NvbG9yCitfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUks3
X05TUmVjdAorX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FCitfX1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNSU1FVHlwZUVS
S05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmlu
Z0ltcGxFUzFfCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtTW91c2VFdmVudEMxRVA3TlNFdmVudAor
X19aTjdXZWJDb3JlMThpc1N0YXJ0T2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkUK
IF9fWk43V2ViQ29yZTE5Q1NTU3R5bGVEZWNsYXJhdGlvbjExc2V0UHJvcGVydHlFUktOU182U3Ry
aW5nRVMzX1JpCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMXNob3dDb25zb2xl
RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyYXR0YWNoV2luZG93RXYKQEAg
LTM0Niw5ICszNjgsMTIgQEAgX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dF
dgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNWNsb3NlRXYKIF9fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdpbnNwZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE5
U2VsZWN0aW9uQ29udHJvbGxlcjEwc2V0Rm9jdXNlZEViCitfX1pON1dlYkNvcmUxOVNlbGVjdGlv
bkNvbnRyb2xsZXIxMnNldFNlbGVjdGlvbkVSS05TXzlTZWxlY3Rpb25FYmJiCiBfX1pON1dlYkNv
cmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxNnNldFNlbGVjdGVkUmFuZ2VFUE5TXzVSYW5nZUVOU185
RUFmZmluaXR5RWIKIF9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjVjbGVhckV2Citf
X1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI2bW9kaWZ5RU5TMF8xMUVBbHRlcmF0aW9u
RU5TMF8xMEVEaXJlY3Rpb25FTlNfMTVUZXh0R3JhbnVsYXJpdHlFYgogX19aTjdXZWJDb3JlMTlT
ZWxlY3Rpb25Db250cm9sbGVyOXNlbGVjdEFsbEV2CitfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNv
bnRyb2xsZXJDMUVQTlNfNUZyYW1lRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2Rl
cjVmbHVzaEV2CiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXI2ZGVjb2RlRVBLY20K
IF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTlNfNlN0cmluZ0VSS05TXzEy
VGV4dEVuY29kaW5nRQpAQCAtMzYxLDEyICszODYsMjAgQEAgX19aTjdXZWJDb3JlMjFXaW5kb3dz
TGF0aW4xRW5jb2RpbmdFdgogX19aTjdXZWJDb3JlMjFmaW5kRXZlbnRXaXRoS2V5U3RhdGVFUE5T
XzVFdmVudEUKIF9fWk43V2ViQ29yZTIxaXNCYWNrRm9yd2FyZExvYWRUeXBlRU5TXzEzRnJhbWVM
b2FkVHlwZUUKIF9fWk43V2ViQ29yZTIxcmVwb3J0VGhyZWFkVmlvbGF0aW9uRVBLYworX19aTjdX
ZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVBOU181UmFuZ2VFUktOU182U3RyaW5nRQor
X19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOU18xMlJlbmRlck9iamVjdEUK
K19fWk43V2ViQ29yZTIzUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmRDMUVQTlNfOERvY3VtZW50RU4z
V1RGMTBQYXNzUmVmUHRySU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYmJiTlNfMTBFZGl0QWN0
aW9uRQorX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTlNfOERvY3VtZW50
RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFRUUKK19fWk43V2ViQ29yZTI0Y3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktOU182U3RyaW5nRVM0XwogX19aTjdXZWJD
b3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjRub3RpZnlIaXN0b3J5SXRlbUNoYW5nZWRFCitfX1pON1dlYkNvcmUyNHJhbmdlQ29tcGxpYW50
RXF1aXZhbGVudEVSS05TXzhQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTI2Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25DMUV2CiBfX1pON1dlYkNvcmUyNk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
NmNyZWF0ZUVQTlNfNUZyYW1lRVBOU18zMk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50
RQogX19aTjdXZWJDb3JlMjZ1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvckV2CitfX1pON1dlYkNv
cmUyOWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0RWliCiBfX1pON1dlYkNvcmUyOXNldFVz
ZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yRWIKK19fWk43V2ViQ29yZTMycGxhaW5UZXh0VG9NYWxs
b2NBbGxvY2F0ZWRCdWZmZXJFUEtOU181UmFuZ2VFUmoKIF9fWk43V2ViQ29yZTMzc2V0RGVmYXVs
dFRocmVhZFZpb2xhdGlvbkJlaGF2aW9yRU5TXzIzVGhyZWFkVmlvbGF0aW9uQmVoYXZpb3JFCiBf
X1pON1dlYkNvcmUzNkluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeUV2CiBfX1pO
N1dlYkNvcmUzbWFjRVJLTlNfMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUUKQEAgLTM5NSwyMiAr
NDI4LDM3IEBAIF9fWk43V2ViQ29yZTRQYWdlRDFFdgogX19aTjdXZWJDb3JlNUNhY2hlMTFzZXRE
aXNhYmxlZEViCiBfX1pON1dlYkNvcmU1Q2FjaGUxM2dldFN0YXRpc3RpY3NFdgogX19aTjdXZWJD
b3JlNUNhY2hlMTNzZXRDYXBhY2l0aWVzRWpqagorX19aTjdXZWJDb3JlNUZyYW1lMTBmaW5kU3Ry
aW5nRVJLTlNfNlN0cmluZ0ViYmJiCitfX1pON1dlYkNvcmU1RnJhbWUxMWZvcmNlTGF5b3V0RWIK
IF9fWk43V2ViQ29yZTVGcmFtZTExc2NyaXB0UHJveHlFdgogX19aTjdXZWJDb3JlNUZyYW1lMTFz
aG91bGRDbG9zZUV2CiBfX1pON1dlYkNvcmU1RnJhbWUxM293bmVyUmVuZGVyZXJFdgogX19aTjdX
ZWJDb3JlNUZyYW1lMTNyZWFwcGx5U3R5bGVzRXYKK19fWk43V2ViQ29yZTVGcmFtZTEzc2V0Wm9v
bUZhY3RvckVpYgorX19aTjdXZWJDb3JlNUZyYW1lMTVzZW5kU2Nyb2xsRXZlbnRFdgorX19aTjdX
ZWJDb3JlNUZyYW1lMTZhZGp1c3RQYWdlSGVpZ2h0RVBmZmZmCiBfX1pON1dlYkNvcmU1RnJhbWUx
N2JpbmRpbmdSb290T2JqZWN0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTE4d2luZG93U2NyaXB0T2Jq
ZWN0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTIwc2V0U2VsZWN0aW9uRnJvbU5vbmVFdgorX19aTjdX
ZWJDb3JlNUZyYW1lMjFtYXJrQWxsTWF0Y2hlc0ZvclRleHRFUktOU182U3RyaW5nRWJqCiBfX1pO
N1dlYkNvcmU1RnJhbWUyMXNldFByb2hpYml0c1Njcm9sbGluZ0ViCitfX1pON1dlYkNvcmU1RnJh
bWUyNGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5T
XzEwRWRpdEFjdGlvbkUKK19fWk43V2ViQ29yZTVGcmFtZTI1bWF0Y2hMYWJlbHNBZ2FpbnN0RWxl
bWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyNmRhc2hib2Fy
ZFJlZ2lvbnNEaWN0aW9uYXJ5RXYKK19fWk43V2ViQ29yZTVGcmFtZTI4c2VhcmNoRm9yTGFiZWxz
QmVmb3JlRWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUy
OWNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luRVB2CitfX1pON1dlYkNvcmU1RnJhbWUyOWZv
cmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgorX19aTjdXZWJDb3JlNUZyYW1lMzRzZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9fWk43V2ViQ29yZTVGcmFtZTRpbml0
RXYKK19fWk43V2ViQ29yZTVGcmFtZTVwYWludEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183
SW50UmVjdEUKIF9fWk43V2ViQ29yZTVGcmFtZUMxRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVP
d25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pON1dlYkNvcmU1SW1hZ2Ux
MGdldE5TSW1hZ2VFdgorX19aTjdXZWJDb3JlNUltYWdlMTJzdXBwb3J0c1R5cGVFUktOU182U3Ry
aW5nRQogX19aTjdXZWJDb3JlNUltYWdlMjBsb2FkUGxhdGZvcm1SZXNvdXJjZUVQS2MKIF9fWk43
V2ViQ29yZTVJbWFnZTIxZ2V0VElGRlJlcHJlc2VudGF0aW9uRXYKIF9fWk43V2ViQ29yZTVSYW5n
ZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFTlMyX0lOU180Tm9kZUVF
RWlTNl9pCitfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4zV1RGMTBQYXNzUmVmUHRySU5TXzRO
b2RlRUVFaVJpCitfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBhc3NSZWZQdHJJ
TlNfNE5vZGVFRUVpUmkKIF9fWk43V2ViQ29yZTVSYW5nZUQxRXYKIF9fWk43V2ViQ29yZTVjYWNo
ZUV2CiBfX1pON1dlYkNvcmU1ZXF1YWxFUE5TXzEwU3RyaW5nSW1wbEVQS2MKQEAgLTQ2NCw4ICs1
MTIsMTMgQEAgX19aTjdXZWJDb3JlNldpZGdldEMxRVA2TlNWaWV3CiBfX1pON1dlYkNvcmU2V2lk
Z2V0QzFFdgogX19aTjdXZWJDb3JlN0ludFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dlYkNvcmU3
bnNDb2xvckVSS05TXzVDb2xvckUKK19fWk43V2ViQ29yZThEb2N1bWVudDExY3JlYXRlUmFuZ2VF
dgogX19aTjdXZWJDb3JlOERvY3VtZW50MTNyZW1vdmVNYXJrZXJzRU5TXzE0RG9jdW1lbnRNYXJr
ZXIxME1hcmtlclR5cGVFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxNHNldEZvY3VzZWROb2RlRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCitfX1pON1dlYkNvcmU4RG9jdW1lbnQyMmNyZWF0
ZURvY3VtZW50RnJhZ21lbnRFdgorX19aTjdXZWJDb3JlOERvY3VtZW50MjNyZW5kZXJlZFJlY3Rz
Rm9yTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTBNYXJrZXJUeXBlRQorX19aTjdXZWJDb3Jl
OERvY3VtZW50MjRzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnNFYgorX19aTjdXZWJDb3JlOERvY3Vt
ZW50MzZ1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNFdgogX19aTjdXZWJDb3Jl
OERvY3VtZW50NGJvZHlFdgogX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19vYmplY3RS
S05TXzhJbnRQb2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FUE5TXzE2UGFzdGVib2FyZEhlbHBl
ckUKIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50CkBAIC01MDksMTAgKzU2Miwx
MyBAQCBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks3X05TUmVjdAogX19aTjdXZWJDb3JlOUZy
YW1lVHJlZTExYXBwZW5kQ2hpbGRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUZyYW1lRUVFCiBfX1pO
N1dlYkNvcmU5RnJhbWVUcmVlN3NldE5hbWVFUktOU18xMkF0b21pY1N0cmluZ0UKIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxMnNldE1lZGlhVHlwZUVSS05TXzZTdHJpbmdFCitfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MTRhZGp1c3RWaWV3U2l6ZUV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRpbml0
U2Nyb2xsYmFyc0V2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCitf
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRUcmFuc3BhcmVudEViCiBfX1pON1dlYkNvcmU5RnJh
bWVWaWV3MTVzZXRNYXJnaW5IZWlnaHRFaQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE4dXBkYXRl
Q29udHJvbFRpbnRzRXYKK19fWk43V2ViQ29yZTlGcmFtZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW5k
Q29sb3JFTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOUZyYW1lVmlld0MxRVBOU181RnJhbWVFCiBf
X1pON1dlYkNvcmU5SFRNTE5hbWVzMTBsaXN0aW5nVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1l
czEzYmxvY2txdW90ZVRhZ0UKQEAgLTUzOSwyMSArNTk1LDI4IEBAIF9fWk43V2ViQ29yZTlIVE1M
TmFtZXM1dWxUYWdFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzNmRpdlRhZ0UKIF9fWk43V2ViQ29y
ZTlIVE1MTmFtZXM2aW1nVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczZwcmVUYWdFCitfX1pO
N1dlYkNvcmU5SFRNTE5hbWVzN2Zvcm1UYWdFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzN3NyY0F0
dHJFCiBfX1pON1dlYkNvcmU5SFRNTE5hbWVzOGhyZWZBdHRyRQorX19aTjdXZWJDb3JlOUhUTUxO
YW1lczhpbnB1dFRhZ0UKIF9fWk43V2ViQ29yZTlQYWdlQ2FjaGUxMXNldENhcGFjaXR5RWkKIF9f
Wk43V2ViQ29yZTlQYWdlQ2FjaGUyN3JlbGVhc2VBdXRvcmVsZWFzZWRQYWdlc05vd0V2CiBfX1pO
N1dlYkNvcmU5UGFnZUdyb3VwMTRhZGRWaXNpdGVkTGlua0VQS3RtCiBfX1pON1dlYkNvcmU5UGFn
ZUdyb3VwMjFyZW1vdmVBbGxWaXNpdGVkTGlua3NFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI2
c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3NFYgogX19aTjdXZWJDb3JlOVNlbGVjdGlvbjIyZXhw
YW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKK19fWk43V2ViQ29yZTlT
ZWxlY3Rpb25DMUVQS05TXzVSYW5nZUVOU185RUFmZmluaXR5RQogX19aTjdXZWJDb3JlOVRpbWVy
QmFzZTRzdG9wRXYKIF9fWk43V2ViQ29yZTlUaW1lckJhc2U1c3RhcnRFZGQKIF9fWk43V2ViQ29y
ZTlUaW1lckJhc2VDMkV2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlRDJFdgorX19aTjdXZWJDb3Jl
OW1ha2VSYW5nZUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRVMyXwogX19aTjdXZWJDb3JlOXBhZ2VD
YWNoZUV2CiBfX1pON1dlYkNvcmVlcUVSS05TXzE5UmVzb3VyY2VSZXF1ZXN0QmFzZUVTMl8KK19f
Wk43V2ViQ29yZXBsRVJLTlNfNlN0cmluZ0VTMl8KIF9fWk5LM0tKUzhCaW5kaW5nczEwUm9vdE9i
amVjdDEyZ2xvYmFsT2JqZWN0RXYKK19fWk5LN1dlYkNvcmUxMFBsdWdpbkRhdGExNnN1cHBvcnRz
TWltZVR5cGVFUktOU182U3RyaW5nRQorX19aTks3V2ViQ29yZTEwU2Nyb2xsVmlldzEyZG9jdW1l
bnRWaWV3RXYKIF9fWk5LN1dlYkNvcmUxMUNhY2hlZEltYWdlNWltYWdlRXYKIF9fWk5LN1dlYkNv
cmUxMUNvbnRleHRNZW51MTlwbGF0Zm9ybURlc2NyaXB0aW9uRXYKIF9fWk5LN1dlYkNvcmUxMUZy
YW1lTG9hZGVyMTBpc0NvbXBsZXRlRXYKQEAgLTU2Miw2ICs2MjUsNyBAQCBfX1pOSzdXZWJDb3Jl
MTFGcmFtZUxvYWRlcjE0ZnJhbWVIYXNMb2FkCiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE1
Y29udGFpbnNQbHVnaW5zRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVmaXJzdExheW91
dERvbmVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNm91dGdvaW5nUmVmZXJyZXJFdgor
X19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNnJlc3BvbnNlTUlNRVR5cGVFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIyMGFjdGl2ZURvY3VtZW50TG9hZGVyRXYKIF9fWk5LN1dlYkNvcmUx
MUZyYW1lTG9hZGVyMjFpc1F1aWNrUmVkaXJlY3RDb21pbmdFdgogX19aTks3V2ViQ29yZTExRnJh
bWVMb2FkZXIyN251bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0c0ViCkBAIC01OTEsNiArNjU1LDcg
QEAgX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBjdXJyZW50S2V5YgogX19aTks3V2ViQ29y
ZTEySWNvbkRhdGFiYXNlMTJkYXRhYmFzZVBhdGhFdgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFi
YXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFi
YXNlOWlzRW5hYmxlZEV2CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xh
eWVyRXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDI1YmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbEV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXI0ZGF0YUV2CiBfX1pOSzdXZWJDb3Jl
MTJTaGFyZWRCdWZmZXI0c2l6ZUV2CkBAIC02MzEsNiArNjk2LDkgQEAgX19aTks3V2ViQ29yZTE0
UmVzb3VyY2VIYW5kbGUxMGNvbm5lY3RpbwogX19aTks3V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIx
MWZyYW1lTG9hZGVyRXYKIF9fWk5LN1dlYkNvcmUxNVByb2dyZXNzVHJhY2tlcjE3ZXN0aW1hdGVk
UHJvZ3Jlc3NFdgogX19aTks3V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MTJuc1VSTFJlcXVlc3RF
dgorX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uMTRjaGFyYWN0ZXJBZnRlckV2CitfX1pO
SzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb240bmV4dEViCitfX1pOSzdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb244cHJldmlvdXNFYgogX19aTks3V2ViQ29yZTE2UmVzb3VyY2VSZXNwb25zZTEzbnNV
UkxSZXNwb25zZUV2CiBfX1pOSzdXZWJDb3JlMTdSZXNvdXJjZUVycm9yQmFzZThsYXp5SW5pdEV2
CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CkBAIC02NDksMjcgKzcx
Nyw0MCBAQCBfX1pOSzdXZWJDb3JlNEtVUkwxN2xhc3RQYXRoQ29tcG9uZW50RXYKIF9fWk5LN1dl
YkNvcmU0S1VSTDRob3N0RXYKIF9fWk5LN1dlYkNvcmU0S1VSTDRwYXRoRXYKIF9fWk5LN1dlYkNv
cmU0S1VSTGN2UDVOU1VSTEV2CitfX1pOSzdXZWJDb3JlNE5vZGUxNGlzRGVzY2VuZGFudE9mRVBL
UzBfCitfX1pOSzdXZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgogX19aTks3V2ViQ29yZTRQYWdl
MzRpbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRpb25Nb2RlRXYKIF9fWk5LN1dlYkNvcmU1RnJh
bWUxMGlzRnJhbWVTZXRFdgorX19aTks3V2ViQ29yZTVGcmFtZTEwem9vbUZhY3RvckV2CitfX1pO
SzdXZWJDb3JlNUZyYW1lMTFjdXJyZW50Rm9ybUV2CitfX1pOSzdXZWJDb3JlNUZyYW1lMTF0eXBp
bmdTdHlsZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTJldmVudEhhbmRsZXJFdgogX19aTks3V2Vi
Q29yZTVGcmFtZTEyb3duZXJFbGVtZW50RXYKK19fWk5LN1dlYkNvcmU1RnJhbWUxMnNlbGVjdGVk
VGV4dEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNzZWxlY3Rpb25SZWN0RWIKIF9fWk5LN1dlYkNv
cmU1RnJhbWUxNHNlbGVjdGlvbkltYWdlRWIKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNXJldmVhbFNl
bGVjdGlvbkVSS05TXzExUmVuZGVyTGF5ZXIxNVNjcm9sbEFsaWdubWVudEUKIF9fWk5LN1dlYkNv
cmU1RnJhbWUxNmluVmlld1NvdXJjZU1vZGVFdgorX19aTks3V2ViQ29yZTVGcmFtZTE3Zmlyc3RS
ZWN0Rm9yUmFuZ2VFUE5TXzVSYW5nZUUKK19fWk5LN1dlYkNvcmU1RnJhbWUxOGRvY3VtZW50VHlw
ZVN0cmluZ0V2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMThzZWxlY3Rpb25UZXh0UmVjdHNFUk4zV1RG
NlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRWIKIF9fWk5LN1dlYkNvcmU1RnJhbWUxOXNlbGVj
dGlvbkNvbnRyb2xsZXJFdgogX19aTks3V2ViQ29yZTVGcmFtZTE5c2V0SW5WaWV3U291cmNlTW9k
ZUViCitfX1pOSzdXZWJDb3JlNUZyYW1lMjBzZWxlY3Rpb25HcmFudWxhcml0eUV2CitfX1pOSzdX
ZWJDb3JlNUZyYW1lMjViYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sRXYKIF9fWk5LN1dlYkNvcmU1
RnJhbWUzMGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlNUZy
YW1lMzFmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKK19fWk5LN1dlYkNvcmU1RnJh
bWUzMW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFdgogX19aTks3V2ViQ29yZTVGcmFt
ZTMzcmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU1RnJh
bWUzN2Jhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnRFdgorX19aTks3V2ViQ29y
ZTVGcmFtZTRtYXJrRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU0cGFnZUV2CiBfX1pOSzdXZWJDb3Jl
NUZyYW1lNHRyZWVFdgogX19aTks3V2ViQ29yZTVGcmFtZTR2aWV3RXYKIF9fWk5LN1dlYkNvcmU1
RnJhbWU2ZWRpdG9yRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU2bG9hZGVyRXYKIF9fWk5LN1dlYkNv
cmU1RnJhbWU4ZG9jdW1lbnRFdgorX19aTks3V2ViQ29yZTVGcmFtZThyZW5kZXJlckV2CiBfX1pO
SzdXZWJDb3JlNUZyYW1lOHNldHRpbmdzRXYKIF9fWk5LN1dlYkNvcmU1UmFuZ2UxMXN0YXJ0T2Zm
c2V0RVJpCiBfX1pOSzdXZWJDb3JlNVJhbmdlMTJlbmRDb250YWluZXJFUmkKQEAgLTY3OCw2ICs3
NTksOCBAQCBfX1pOSzdXZWJDb3JlNVJhbmdlMTlib3VuZGFyeVBvaW50c1ZhbGlkCiBfX1pOSzdX
ZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJzdE5vZGVF
dgogX19aTks3V2ViQ29yZTZFZGl0b3IxM2NhbkVkaXRSaWNobHlFdgorX19aTks3V2ViQ29yZTZF
ZGl0b3IxNmNvbXBvc2l0aW9uUmFuZ2VFdgorX19aTks3V2ViQ29yZTZFZGl0b3IxNmZvbnRGb3JT
ZWxlY3Rpb25FUmIKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTdzZWxlY3Rpb25IYXNTdHlsZUVQTlNf
MTlDU1NTdHlsZURlY2xhcmF0aW9uRQogX19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3VsZERlbGV0
ZVJhbmdlRVBOU181UmFuZ2VFCiBfX1pOSzdXZWJDb3JlNkVkaXRvcjIyc2VsZWN0aW9uU3RhcnRI
YXNTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRQpAQCAtNzA0LDcgKzc4NywxNCBAQCBf
X1pOSzdXZWJDb3JlN0VsZW1lbnQxMmdldEF0dHJpYnV0ZUVSS05TCiBfX1pOSzdXZWJDb3JlN0lu
dFJlY3RjdjdfTlNSZWN0RXYKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQxMWNvbXBsZXRlVVJMRVJL
TlNfNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQxMWRlZmF1bHRWaWV3RXYKK19fWk5L
N1dlYkNvcmU4RG9jdW1lbnQxM2F4T2JqZWN0Q2FjaGVFdgorX19aTks3V2ViQ29yZThEb2N1bWVu
dDE1ZG9jdW1lbnRFbGVtZW50RXYKK19fWk5LN1dlYkNvcmU4RG9jdW1lbnQ2ZG9tYWluRXYKIF9f
Wk5LN1dlYkNvcmU4SW50UG9pbnRjdjhfTlNQb2ludEV2CitfX1pOSzdXZWJDb3JlOFBvc2l0aW9u
MTBkb3duc3RyZWFtRXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb25FTlNfOUVBZmZpbml0eUViCitfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGlu
Z1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5RWIKK19fWk5LN1dlYkNvcmU4UG9zaXRp
b244dXBzdHJlYW1FdgogX19aTks3V2ViQ29yZTlGbG9hdFJlY3RjdjdfTlNSZWN0RXYKIF9fWk5L
N1dlYkNvcmU5RnJhbWVUcmVlMTJ0cmF2ZXJzZU5leHRFUEtOU181RnJhbWVFCiBfX1pOSzdXZWJD
b3JlOUZyYW1lVHJlZTE0aXNEZXNjZW5kYW50T2ZFUEtOU181RnJhbWVFCkBAIC03MTIsNyArODAy
LDkgQEAgX19aTks3V2ViQ29yZTlGcmFtZVRyZWUyMHRyYXZlcnNlTmV4dFdpdAogX19aTks3V2Vi
Q29yZTlGcmFtZVRyZWUyNHRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcEViCiBfX1pOSzdXZWJDb3Jl
OUZyYW1lVHJlZTRmaW5kRVJLTlNfMTJBdG9taWNTdHJpbmdFCiBfX1pOSzdXZWJDb3JlOUZyYW1l
VHJlZTVjaGlsZEVSS05TXzEyQXRvbWljU3RyaW5nRQorX19aTks3V2ViQ29yZTlGcmFtZVZpZXcx
MW5lZWRzTGF5b3V0RXYKIF9fWk5LN1dlYkNvcmU5U2VsZWN0aW9uMTdpc0NvbnRlbnRFZGl0YWJs
ZUV2CitfX1pOSzdXZWJDb3JlOVNlbGVjdGlvbjE5cm9vdEVkaXRhYmxlRWxlbWVudEV2CiBfX1pO
SzdXZWJDb3JlOVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5RWRpdGFibGVFdgogX19aTks3V2Vi
Q29yZTlTZWxlY3Rpb243dG9SYW5nZUV2CiBfX1pOSzdXZWJDb3JlOVRpbWVyQmFzZThpc0FjdGl2
ZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCTFBRjMyNjQ2MEQ3OEI1NTMw
MDY4RjBDNCAvKiBBWE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NDAwRDc4QjU1MzAwNjhGMEM0IC8qIEFYT2JqZWN0
Q2FjaGVNYWMubW0gKi87IH07CiAJCTFBRjMyNjQ4MEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3Jl
QVhPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBRjMyNjQyMEQ3OEI1NTMwMDY4RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QuaCAqLzsgfTsKIAkJ
MUFGMzI2NDkwRDc4QjU1MzAwNjhGMEM0IC8qIFdlYkNvcmVBWE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjMyNjQzMEQ3OEI1NTMwMDY4
RjBDNCAvKiBXZWJDb3JlQVhPYmplY3QubW0gKi87IH07Ci0JCTFBRjMyNjc4MEQ3OEI5NDQwMDY4
RjBDNCAvKiBBWE9iamVjdENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUYzMjY3NjBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZS5o
ICovOyB9OworCQkxQUYzMjY3ODBENzhCOTQ0MDA2OEYwQzQgLyogQVhPYmplY3RDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGMzI2NzYwRDc4
Qjk0NDAwNjhGMEM0IC8qIEFYT2JqZWN0Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUYzMjY3OTBENzhCOTQ0MDA2OEYwQzQgLyogRWRp
dG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUYzMjY3NzBENzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFGRTExN0QwQ0JGRkIzNjAw
MzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRTExN0IwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJl
c3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE3RTBDQkZGQjM2MDAzMDE3RkEgLyog
U1FMUmVzdWx0U2V0Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUFGRTExN0MwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xp
c3QuaCAqLzsgfTsKQEAgLTM1NCw3ICszNTQsNyBAQAogCQkxQ0ZDRUVERjBBQUNDNkEzMDAzNDg3
NTAgLyogRE9NSFRNTFByZUVsZW1lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0ZDRUVEQTBBQUNDNjgzMDAz
NDg3NTAgLyogRE9NSFRNTFByZUVsZW1lbnRQcml2YXRlLmggKi87IH07CiAJCTFDRkNFRUZBMEFB
Q0M3QTcwMDM0ODc1MCAvKiBET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oIGluIENvcHkgR2Vu
ZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNGQ0VF
RjkwQUFDQzc5MDAwMzQ4NzUwIC8qIERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmggKi87IH07
CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovOyB9OwotCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyB9
OworCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1
Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTM3MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGM0UwRDI1
QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzcxRjRGNDEwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0
RjNGMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi87IH07CiAJCTM3MUY0RkZDMEQy
NUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIFNl
Z21lbnRlZEZvbnREYXRhLmggKi87IH07CkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJNEIzMDQzQzkw
QUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5kTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEIzMDQzQzgwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5kTWFj
Lm1tICovOyB9OwogCQk0QjMwNDNDQzBBRTAzNzNCMDBBODI2NDcgLyogRWRpdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0NBMEFFMDM3
M0IwMEE4MjY0NyAvKiBFZGl0b3IuY3BwICovOyB9OwogCQk0QjMwNDNDRDBBRTAzNzNCMDBBODI2
NDcgLyogRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QjMwNDNDQjBBRTAzNzNCMDBBODI2NDcgLyogRWRpdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEI2RkE2RjQwQzM5RTQ4QzAwMDg3
MDExIC8qIFNtYXJ0UmVwbGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEI2RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oICov
OyB9OworCQk0QjZGQTZGNDBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGMjBDMzlFNDhD
MDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEI2RkE2RjUwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVw
bGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QjZGQTZGMzBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCAqLzsgfTsKIAkJNEI2
RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkY2MEMzOUU0QTEwMDA4NzAx
MSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi87IH07CiAJCTRCOEFGNEFBMEIxQ0UwMkIwMDY4NzY5
MCAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRCOEFGNEE5MEIxQ0UwMkIwMDY4NzY5MCAvKiBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJCTUxNEM3NjM4MENFOTIyNUUwMDdFRjNDRCAvKiBK
U1NRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjM2MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTFRyYW5zYWN0aW9uLmNw
cCAqLzsgfTsKIAkJNTE0Qzc2NEMwQ0U5MjM0RTAwN0VGM0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY0
MjBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTRDNzY0RDBDRTkyMzRFMDA3RUYz
Q0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY0MzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRp
b25NYWMubW0gKi87IH07Ci0JCTUxNEM3NjRFMENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0
cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE0Qzc2NDQwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1EYXRhU3RyZWFtTWFjLmggKi87IH07CisJ
CTUxNEM3NjRFMENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NDQwQ0U5MjM0RTAw
N0VGM0NEIC8qIEZvcm1EYXRhU3RyZWFtTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2NEYwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1E
YXRhU3RyZWFtTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NDUwQ0U5MjM0RTAwN0VGM0NEIC8qIEZvcm1EYXRhU3RyZWFtTWFjLm1tICov
OyB9OwogCQk1MTRDNzY1MDBDRTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VFcnJvck1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjQ2MENF
OTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZUVycm9yTWFjLm1tICovOyB9OwogCQk1MTRDNzY1MTBD
RTkyMzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY0NzBDRTkyMzRFMDA3RUYzQ0QgLyog
UmVzb3VyY2VIYW5kbGVNYWMubW0gKi87IH07CkBAIC01MDcsOCArNTA3LDYgQEAKIAkJNURGRThG
NTcwRDE2NDc3QzAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8q
IFNjaGVkdWxlZEFjdGlvbi5oICovOyB9OwogCQk2NTBGNTNEQzA5RDE1RERBMDBDOUIwQzggLyog
Q1NTR3JhbW1hci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjUwRjUzREIwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLzsgfTsKIAkJNjUw
RjUzREQwOUQxNURERjAwQzlCMEM4IC8qIENTU0dyYW1tYXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxNDQwOUQxMzA0MzAwMEU2MUQ3IC8q
IENTU0dyYW1tYXIuY3BwICovOyB9OwotCQk2NTRFQzYxMTA5Nzc3OEY1MDBEQUI1MkMgLyogV2Vi
Q29yZUZyYW1lQnJpZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTRFQzYwRjA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNjU0RUM2
MTIwOTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJyaWRnZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NEVDNjEwMDk3Nzc4RjUwMERBQjUy
QyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UubW0gKi87IH07CiAJCTY1NTBCNjlEMDk5REYwMjcwMDkw
RDc4MSAvKiBDREFUQVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU1MEI2OTMwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5j
cHAgKi87IH07CiAJCTY1NTBCNjlFMDk5REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NTBCNjk0MDk5
REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24uaCAqLzsgfTsKIAkJNjU1MEI2OUYwOTlERjAy
NzAwOTBENzgxIC8qIENoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU1MEI2OTUwOTlERjAyNzAwOTBENzgxIC8qIENoYXJhY3Rl
ckRhdGEuY3BwICovOyB9OwpAQCAtMTM1MSw3ICsxMzQ5LDcgQEAKIAkJODVFNzExOTEwQUM1RDUz
NTAwNTMyNzBGIC8qIERPTUNvdW50ZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVFNzExNDIwQUM1RDUzNDAwNTMyNzBGIC8qIERPTUNv
dW50ZXJJbnRlcm5hbC5oICovOyB9OwogCQk4NUU3MTE5MjBBQzVENTM1MDA1MzI3MEYgLyogRE9N
Q1NTUnVsZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODVFNzExNDMwQUM1RDUzNDAwNTMyNzBGIC8qIERPTUNTU1J1bGVMaXN0SW50
ZXJuYWwuaCAqLzsgfTsKIAkJODVFNzExOTMwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUNTU1N0eWxl
RGVjbGFyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODVFNzExNDQwQUM1RDUzNDAwNTMyNzBGIC8qIERPTUNTU1N0eWxlRGVjbGFy
YXRpb25JbnRlcm5hbC5oICovOyB9OwotCQk4NUU3MTE5NDBBQzVENTM1MDA1MzI3MEYgLyogRE9N
RG9jdW1lbnRGcmFnbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NUU3MTE0NTBBQzVENTM0MDA1MzI3MEYgLyogRE9NRG9jdW1lbnRG
cmFnbWVudEludGVybmFsLmggKi87IH07CisJCTg1RTcxMTk0MEFDNUQ1MzUwMDUzMjcwRiAvKiBE
T01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4NUU3MTE5NTBBQzVENTM1MDA1MzI3MEYgLyogRE9NRG9jdW1lbnRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVF
NzExNDYwQUM1RDUzNDAwNTMyNzBGIC8qIERPTURvY3VtZW50SW50ZXJuYWwuaCAqLzsgfTsKIAkJ
ODVFNzExOTYwQUM1RDUzNTAwNTMyNzBGIC8qIERPTURvY3VtZW50VHlwZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUU3MTE0NzBBQzVE
NTM0MDA1MzI3MEYgLyogRE9NRG9jdW1lbnRUeXBlSW50ZXJuYWwuaCAqLzsgfTsKIAkJODVFNzEx
OTcwQUM1RDUzNTAwNTMyNzBGIC8qIERPTURPTUltcGxlbWVudGF0aW9uSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ4MEFDNUQ1
MzQwMDUzMjcwRiAvKiBET01ET01JbXBsZW1lbnRhdGlvbkludGVybmFsLmggKi87IH07CkBAIC0x
NTAzLDE4ICsxNTAxLDE4IEBACiAJCTkzMzA5RERBMDk5RTY0OTIwMDU2RTU4MSAvKiBCcmVha0Js
b2NrcXVvdGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5RDhCMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcCAqLzsgfTsKIAkJOTMzMDlEREIwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMzA5RDhDMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgg
Ki87IH07CiAJCTkzMzA5RERDMDk5RTY0OTIwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMw
OUQ4RDA5OUU2NDkxMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwICovOyB9Owot
CQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RDhFMDk5RTY0
OTEwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICovOyB9OworCQk5MzMwOURERDA5
OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RDhFMDk5RTY0OTEwMDU2RTU4MSAv
KiBDb21wb3NpdGVFZGl0Q29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzMzA5RERFMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVGcm9t
VGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5RDhGMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmNwcCAqLzsgfTsKIAkJOTMzMDlEREYwOTlFNjQ5MjAwNTZFNTgxIC8qIERlbGV0ZUZy
b21UZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5RDkwMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmggKi87IH07CiAJCTkzMzA5REUwMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5RDkxMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcCAqLzsgfTsKLQkJOTMzMDlERTEwOTlFNjQ5MjAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMzA5RDkyMDk5RTY0OTEwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rpb25Db21tYW5kLmggKi87
IH07CisJCTkzMzA5REUxMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVTZWxlY3Rpb25Db21tYW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOUQ5
MjA5OUU2NDkxMDA1NkU1ODEgLyogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5REUyMDk5RTY0OTIw
MDU2RTU4MSAvKiBFZGl0QWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzMwOUQ5MzA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdEFjdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5REUz
MDk5RTY0OTIwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOUQ5NDA5OUU2NDkxMDA1NkU1ODEgLyogRWRp
dENvbW1hbmQuY3BwICovOyB9OwogCQk5MzMwOURFNDA5OUU2NDkyMDA1NkU1ODEgLyogRWRpdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MzA5RDk1MDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5REU1MDk5RTY0OTIwMDU2RTU4
MSAvKiBIVE1MSW50ZXJjaGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMzMDlEOTYwOTlFNjQ5MTAwNTZFNTgxIC8qIEhUTUxJbnRlcmNoYW5n
ZS5jcHAgKi87IH07Ci0JCTkzMzA5REU2MDk5RTY0OTIwMDU2RTU4MSAvKiBIVE1MSW50ZXJjaGFu
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5
RDk3MDk5RTY0OTEwMDU2RTU4MSAvKiBIVE1MSW50ZXJjaGFuZ2UuaCAqLzsgfTsKKwkJOTMzMDlE
RTYwOTlFNjQ5MjAwNTZFNTgxIC8qIEhUTUxJbnRlcmNoYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEOTcwOTlFNjQ5MTAwNTZFNTgxIC8q
IEhUTUxJbnRlcmNoYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzMzA5REU3MDk5RTY0OTIwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOUQ5ODA5
OUU2NDkxMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuY3BwICovOyB9OwotCQk5MzMwOURFODA5OUU2
NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RDk5MDk5RTY0OTEwMDU2RTU4MSAvKiBodG1sZWRpdGlu
Zy5oICovOyB9OworCQk5MzMwOURFODA5OUU2NDkyMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5RDk5MDk5
RTY0OTEwMDU2RTU4MSAvKiBodG1sZWRpdGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5REU5MDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNl
cnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5RDlBMDk5RTY0OTEwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmNwcCAqLzsgfTsKIAkJOTMzMDlERUEwOTlFNjQ5MjAwNTZFNTgxIC8qIElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5RDlCMDk5RTY0OTEwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmggKi87IH07CiAJCTkzMzA5REVCMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMzA5RDlDMDk5RTY0OTEwMDU2RTU4MSAvKiBJbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcCAqLzsgfTsKQEAgLTE1MjgsMTEgKzE1MjYsMTEgQEAKIAkJOTMzMDlERjMwOTlF
NjQ5MjAwNTZFNTgxIC8qIEpvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REE0MDk5RTY0OTEwMDU2RTU4MSAv
KiBKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5REY0MDk5RTY0OTIwMDU2
RTU4MSAvKiBKb2luVGV4dE5vZGVzQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQTUwOTlFNjQ5MTAwNTZFNTgxIC8qIEpvaW5UZXh0
Tm9kZXNDb21tYW5kLmggKi87IH07CiAJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJr
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMz
MDlEQTgwOTlFNjQ5MTAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgKi87IH07Ci0JCTkzMzA5REY4MDk5
RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5REE5MDk5RTY0OTEwMDU2RTU4MSAvKiBtYXJrdXAuaCAqLzsg
fTsKKwkJOTMzMDlERjgwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQTkwOTlFNjQ5MTAwNTZFNTgx
IC8qIG1hcmt1cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzMzA5REY5MDk5RTY0OTIwMDU2RTU4MSAvKiBNZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzMwOURBQTA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1h
bmQuY3BwICovOyB9OwogCQk5MzMwOURGQTA5OUU2NDkyMDA1NkU1ODEgLyogTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5REFCMDk5RTY0OTEwMDU2RTU4MSAvKiBNZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5oICovOyB9OwogCQk5MzMwOURGQjA5OUU2NDkyMDA1NkU1ODEgLyogTW92ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzMDlEQUMwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5k
LmNwcCAqLzsgfTsKLQkJOTMzMDlERkMwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25D
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzMwOURBRDA5OUU2NDkxMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
KwkJOTMzMDlERkMwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURBRDA5OUU2
NDkxMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzMwOUUwMDA5OUU2NDkyMDA1NkU1ODEg
LyogUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REIxMDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVD
U1NQcm9wZXJ0eUNvbW1hbmQuY3BwICovOyB9OwogCQk5MzMwOUUwMTA5OUU2NDkyMDA1NkU1ODEg
LyogUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCMjA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kLmggKi87IH07CiAJCTkzMzA5RTAyMDk5RTY0OTIwMDU2RTU4MSAvKiBS
ZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCMzA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuY3BwICovOyB9OwpAQCAtMTU0Miw3ICsxNTQwLDcgQEAKIAkJOTMz
MDlFMDYwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MzA5REI3MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29t
bWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTA3MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQjgwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmggKi87IH07CiAJCTkzMzA5RTA5MDk5RTY0OTIwMDU2
RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCQTA5OUU2NDkxMDA1NkU1ODEgLyogUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwICovOyB9OwotCQk5MzMwOUUwQTA5OUU2NDkyMDA1NkU1
ODEgLyogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REJCMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5oICovOyB9OworCQk5MzMwOUUwQTA5OUU2NDkyMDA1NkU1ODEgLyog
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5REJCMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzMzA5RTBCMDk5RTY0OTIwMDU2RTU4MSAvKiBTZWxlY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQkMwOTlFNjQ5MTAw
NTZFNTgxIC8qIFNlbGVjdGlvbi5jcHAgKi87IH07CiAJCTkzMzA5RTBDMDk5RTY0OTIwMDU2RTU4
MSAvKiBTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5REJEMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzMwOUUwRDA5OUU2NDky
MDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCRTA5OUU2NDkxMDA1NkU1ODEgLyogU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CkBAIC0xNTU4LDExICsxNTU2LDExIEBACiAJCTkz
MzA5RTE3MDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0QWZmaW5pdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REM4MDk5RTY0OTEwMDU2RTU4MSAv
KiBUZXh0QWZmaW5pdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5MzMwOUUxODA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEdyYW51bGFyaXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURDOTA5
OUU2NDkxMDA1NkU1ODEgLyogVGV4dEdyYW51bGFyaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMzMDlFMTkwOTlFNjQ5MjAwNTZFNTgxIC8q
IFR5cGluZ0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzMDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICov
OyB9OwotCQk5MzMwOUUxQTA5OUU2NDkyMDA1NkU1ODEgLyogVHlwaW5nQ29tbWFuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQ0IwOTlFNjQ5
MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuaCAqLzsgfTsKKwkJOTMzMDlFMUEwOTlFNjQ5MjAw
NTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMzA5RENCMDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMz
MDlFMUIwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEg
LyogVGV4dEl0ZXJhdG9yLmNwcCAqLzsgfTsKLQkJOTMzMDlFMUMwOTlFNjQ5MjAwNTZFNTgxIC8q
IFRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5oICovOyB9Owor
CQk5MzMwOUUxQzA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURDRDA5OUU2NDkxMDA1NkU1
ODEgLyogVGV4dEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlE
Q0UwOTlFNjQ5MTAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwICovOyB9OwotCQk5MzMwOUUx
RTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQ0YwOTlFNjQ5MTAwNTZFNTgxIC8qIHZp
c2libGVfdW5pdHMuaCAqLzsgfTsKKwkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2li
bGVfdW5pdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMzA5RENGMDk5RTY0OTEwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMzMDlFMUYwOTlFNjQ5MjAw
NTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOUREMDA5OUU2NDkxMDA1NkU1ODEgLyogVmlzaWJsZVBv
c2l0aW9uLmNwcCAqLzsgfTsKIAkJOTMzMDlFMjAwOTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2libGVQ
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMzMDlERDEwOTlFNjQ5MTAwNTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5RTIzMDk5RTY0OTIw
MDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlERDQwOTlFNjQ5MTAwNTZF
NTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAgKi87IH07CkBAIC0xNjU2
LDcgKzE2NTQsNyBAQAogCQk5M0UyMjdFNDBBRjU4OUFEMDBENDgzMjQgLyogU3VicmVzb3VyY2VM
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNFMjI3REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLzsgfTsK
IAkJOTNFMjQxRkYwQjJCNEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjQxRkUwQjJC
NEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRTI0MjVGMEIyQjUwOTUwMEM3MzJB
MSAvKiBIVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjQyNUUwQjJCNTA5NTAwQzczMkExIC8qIEhUTUxGcmFt
ZU93bmVyRWxlbWVudC5jcHAgKi87IH07Ci0JCTkzRTYyRDlCMDk4NUY0MTYwMEUxQjVFMyAvKiBT
eXN0ZW1UaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0U2MkQ5OTA5ODVGNDE2MDBFMUI1RTMgLyogU3lzdGVtVGltZS5oICovOyB9OworCQk5M0U2
MkQ5QjA5ODVGNDE2MDBFMUI1RTMgLyogU3lzdGVtVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFNjJEOTkwOTg1RjQxNjAwRTFCNUUzIC8qIFN5
c3RlbVRpbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk5M0VCMTY5NTA5Rjg4MEIwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNjk0
MDlGODgwQjAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tICovOyB9OwogCQk5
M0VCMTY5NzA5Rjg4MEMwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFQjE2OTYwOUY4ODBD
MDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0VCMzU1RjA5RTM3RkQ2MDBGNDM3OTkg
LyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyogTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgKi87IH07CkBAIC0xNjY5LDEzICsxNjY3LDEz
IEBACiAJCTkzRUVDMjA0MDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFGMjA5QzI4Nzc3
MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oICovOyB9OwogCQk5M0VFQzI2RjA5QzMyMTgwMDBD
NTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzI2RTA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVy
bi5jcHAgKi87IH07CiAJCTkzRUVDMjcxMDlDMzIxODgwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzI3
MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovOyB9OwotCQk5M0YxOThFNTA4
MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERv
Y3VtZW50LmggKi87IH07CisJCTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRG9jdW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MjNDMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThFNjA4MjQ1RTU5MDAxRTlBQkMg
LyogSFRNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OEVGMDgyNDVF
NTkwMDFFOUFCQyAvKiBIVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBhcnNlci5o
ICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTFRva2VuaXplci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTMwMkRF
NDM5NjAxODYzNUNBIC8qIEhUTUxUb2tlbml6ZXIuaCAqLzsgfTsKIAkJOTNGMTk4RjYwODI0NUU1
OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjc5MDJERTQzRDcwMTg2MzVDQSAvKiBUZXh0
UmVzb3VyY2VEZWNvZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwNDAyREU0NDc2MDE4
NjM1Q0EgLyogUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk5M0YxOTkyMTA4MjQ1RTU5MDAxRTlBQkMgLyogWE1MVG9rZW5pemVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwQTAyREU0
NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVyLmggKi87IH07CisJCTkzRjE5OTIxMDgyNDVFNTkw
MDFFOUFCQyAvKiBYTUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OTkyRjA4MjQ1RTU5MDAxRTlBQkMgLyogQ3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY4NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vyc29y
LmggKi87IH07CiAJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hlUG9saWN5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY0
OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY4Myw3ICsxNjgxLDcgQEAKIAkJOTNGMTk5
NkQwODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MTUwMkRFMzc1OTAxRUE0
MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTgyMDgyNDVFNTkwMDFFOUFCQyAvKiBEZXBy
ZWNhdGVkUHRyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjU4Nzg2OTkwMkRFM0I4NjAxRUE0MTIyIC8qIERlcHJlY2F0ZWRQdHJMaXN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5ODMw
ODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRQdHJRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2QUQwMkRFM0I4NjAxRUE0MTIyIC8q
IERlcHJlY2F0ZWRQdHJRdWV1ZS5oICovOyB9OwotCQk5M0YxOTk4QzA4MjQ1RTU5MDAxRTlBQkMg
LyogUmVuZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM5NTVBNDEwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQu
aCAqLzsgfTsKKwkJOTNGMTk5OEMwODI0NUU1OTAwMUU5QUJDIC8qIFJlbmRlclRyZWVBc1RleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTU1QTQx
MDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJUcmVlQXNUZXh0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5OUQwODI0NUU1OTAwMUU5QUJD
IC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1ODc4NkMyMDJERTNCODYwMUVBNDEyMiAvKiBEZXByZWNhdGVkVmFs
dWVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTNGMTk5OUUwODI0NUU1OTAwMUU5QUJDIC8qIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUzQjAy
REUzNzU5MDFFQTQxMjIgLyogRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTlBODA4MjQ1RTU5MDAx
RTlBQkMgLyogV2ViQ29yZUZyYW1lVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NEMwMkRFMzc1OTAxRUE0MTIyIC8qIFdlYkNvcmVGcmFt
ZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTk5Nyw5ICsxOTk1LDkgQEAKIAkJQTgwRjQzNUQwQ0NERTYzQzAwMkREOTkwIC8qIERPTVNW
R0FuaW1hdGVFbGVtZW50SW50ZXJuYWwuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1QUNFRjg2MEFDREQwNEEwMDEyMTRGRiAv
KiBET01TVkdBbmltYXRlRWxlbWVudEludGVybmFsLmggKi87IH07CiAJCUE4MTM2OUNBMDk3Mzc0
RjYwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRleEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUFFMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
SXNJbmRleEVsZW1lbnQuaCAqLzsgfTsKIAkJQTgxMzY5Q0IwOTczNzRGNjAwRDc0NDYzIC8qIEhU
TUxJc0luZGV4RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODEzNjlBRjA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50
LmNwcCAqLzsgfTsKLQkJQTgxMzY5Q0MwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2
OUIwMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmggKi87IH07CisJCUE4MTM2
OUNDMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMg
LyogSFRNTElucHV0RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE4MTM2OUNEMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MTM2OUIxMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmNwcCAqLzsgfTsKLQkJ
QTgxMzY5Q0UwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTM2OUIyMDk3Mzc0
RjUwMEQ3NDQ2MyAvKiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmggKi87IH07CisJCUE4MTM2OUNF
MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlCMjA5NzM3NEY1MDBENzQ0
NjMgLyogSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MTM2OUNGMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4MTM2OUIzMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50LmNwcCAqLzsgfTsKIAkJQTgxMzY5RDAwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxGb3Jt
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgxMzY5QjQwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxGb3JtRWxlbWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MTM2OUQxMDk3Mzc0RjYw
MEQ3NDQ2MyAvKiBIVE1MRm9ybUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMzY5QjUwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxGb3Jt
RWxlbWVudC5jcHAgKi87IH07CkBAIC0yMDI0LDExICsyMDIyLDExIEBACiAJCUE4MTM2OUU1MDk3
Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MS2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlDOTA5NzM3NEY2MDBENzQ0NjMgLyog
SFRNTEtleWdlbkVsZW1lbnQuY3BwICovOyB9OwogCQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMg
LyogRm9ybURhdGFMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODEzNkQzNjA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggKi87IH07
CiAJCUE4MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMzZEMzcwOTczQThFNzAw
RDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi87IH07Ci0JCUE4MTg1RjM5MDk3NjU3NjYwMDU4
MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4MTg1RjMxMDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCAq
LzsgfTsKKwkJQTgxODVGMzkwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50VHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODVGMzEwOTc2NTc2
NTAwNTgyNkQ5IC8qIERvY3VtZW50VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE4MTg1RjNBMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVu
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgxODVGMzIwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50VHlwZS5jcHAgKi87IH07Ci0JCUE4
MTg1RjNCMDk3NjU3NjYwMDU4MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODVGMzMwOTc2NTc2NTAwNTgy
NkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggKi87IH07CisJCUE4MTg1RjNCMDk3NjU3NjYwMDU4
MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTgxODVGMzMwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVu
dGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTgxODVGM0MwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjM0MDk3NjU3NjUwMDU4MjZE
OSAvKiBEb2N1bWVudC5jcHAgKi87IH07Ci0JCUE4MTg1RjNEMDk3NjU3NjYwMDU4MjZEOSAvKiBE
b2N1bWVudEZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODE4NUYzNTA5NzY1NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRGcmFnbWVudC5oICov
OyB9OworCQlBODE4NUYzRDA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRGcmFnbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODVGMzUwOTc2
NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODE4NUYzRTA5NzY1NzY2MDA1ODI2RDkgLyog
RE9NSW1wbGVtZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9u
LmNwcCAqLzsgfTsKIAkJQTgxODVGM0YwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgx
ODVGMzcwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnQuY3BwICovOyB9OwogCQlB
ODE4NUY0MDA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjM4MDk3NjU3NjUwMDU4MjZEOSAvKiBE
b2N1bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yNTc5LDcgKzI1NzcsNyBAQAogCQlBOUM2RTRFRjBENzQ1RTM4MDA2NDQyRTkgLyogUGx1
Z2luQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RUQwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmNwcCAqLzsgfTsKIAkJ
QTlDNkU0RjAwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFRTBENzQ1RTM4MDA2NDQyRTkg
LyogUGx1Z2luQXJyYXkuaCAqLzsgfTsKIAkJQTlDNkU0RjMwRDc0NUU0ODAwNjQ0MkU5IC8qIFBs
dWdpbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTlDNkU0RjEwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwICovOyB9OwotCQlB
OUM2RTRGNDBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU0RjIwRDc0NUU0ODAwNjQ0MkU5IC8q
IFBsdWdpbkRhdGEuaCAqLzsgfTsKKwkJQTlDNkU0RjQwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdp
bkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5
QzZFNEYyMEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTlDNkU0RjYwRDc0NUU2MTAwNjQ0MkU5
IC8qIFBsdWdpbkRhdGFNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOUM2RTRGNTBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSAq
LzsgfTsKIAkJQTlDNkU1QTUwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTVBMzBENzQ2NDU4
MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCAqLzsgfTsKIAkJQTlDNkU1QTYwRDc0NjQ1ODAwNjQ0
MkU5IC8qIE5hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlDNkU1QTQwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oICovOyB9OwpA
QCAtMzExOSw3ICszMTE3LDcgQEAKIAkJQjI4QzZBMkUwRDAwQzQ0ODAwMzM0QUE0IC8qIFRpbWVT
Y2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyOEM2QTI1MEQwMEM0NDgwMDMzNEFBNCAvKiBUaW1lU2NoZWR1bGVyLmggKi87IH07CiAJCUIy
OTdCQzcwMEIzQzE0Q0YwMDQ1QTU5MCAvKiBKU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOTdCQzZGMEIzQzE0
Q0YwMDQ1QTU5MCAvKiBKU1NWR1BhdGhTZWdMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQjJBMDE1
QTgwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MjBBRjZDRDUzMDA2QkNFMEUg
LyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLzsgfTsKLQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBF
IC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJBMDE1OTMwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5o
ICovOyB9OworCQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkEwMTU5MzBB
RjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBFIC8q
IEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICov
OyB9OwogCQlCMkEwMTVBQjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1OTUwQUY2Q0Q1
MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
QTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovOyB9OwpAQCAtMzY4MCw3
ICszNjc4LDcgQEAKIAkJQkNDQkFENDEwQzE4QzE0MjAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQ0JB
RDNGMEMxOEMxNDIwMENFODkwRiAvKiBKU0hUTUxDb2xsZWN0aW9uLmggKi87IH07CiAJCUJDQ0Q3
NERDMEE0QzhEMzUwMDVGREE2RCAvKiBIVE1MVmlld1NvdXJjZURvY3VtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NENzREQjBBNEM4RDM1MDA1
RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oICovOyB9OwogCQlCQ0NENzRFNTBBNEM4
RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0NENzRFNDBBNEM4RERGMDA1RkRBNkQg
LyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgKi87IH07Ci0JCUJDQ0ZCQUU4MEI1MTUyRUQw
MDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQ0ZCQUU3MEI1MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCAqLzsg
fTsKKwkJQkNDRkJBRTgwQjUxNTJFRDAwMDFGMUQ3IC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDRkJBRTcwQjUxNTJFRDAwMDFG
MUQ3IC8qIFRva2VuaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDRDQxQUJCMEMwNjBERTgwMEMwRTQ0NiAvKiBKU0hUTUxGcmFtZVNldEVs
ZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNENDFBQkEwQzA2MERFODAwQzBFNDQ2IC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudEN1
c3RvbS5jcHAgKi87IH07CiAJCUJDRDlDMjYyMEMxN0FBNjcwMDVDOTBBMiAvKiBKU0RPTVdpbmRv
d0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0Q5QzI1RTBDMTdBQTY3MDA1QzkwQTIgLyogSlNET01XaW5kb3dDdXN0b20uY3BwICovOyB9
OwogCQlCQ0Q5QzI2MzBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5vZGVNYXBDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyNUYw
QzE3QUE2NzAwNUM5MEEyIC8qIEpTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTM3
MjEsNyArMzcxOSw3IEBACiAJCUJDRUE0ODY1MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCdXR0
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
QTQ4MjYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJ1dHRvbi5jcHAgKi87IH07CiAJCUJDRUE0
ODY2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCdXR0b24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODI3MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJCdXR0b24uaCAqLzsgfTsKIAkJQkNFQTQ4NjcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
clZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNFQTQ4MjgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclZpZXcuY3BwICovOyB9OwotCQlCQ0VB
NDg2ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MjkwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlclZpZXcuaCAqLzsgfTsKKwkJQkNFQTQ4NjgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclZp
ZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0
ODI5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4NjkwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckhUTUxDYW52YXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFQTQ4MkEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMu
Y3BwICovOyB9OwogCQlCQ0VBNDg2QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySFRNTENhbnZh
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4
MkIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMuaCAqLzsgfTsKIAkJQkNFQTQ4
NkIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgyQzA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyQ29udGFpbmVyLmNwcCAqLzsgfTsKQEAgLTQ4NTQsOCArNDg1Miw2IEBACiAJCTVE
Q0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTY1MEY1M0RCMDlEMTVEREEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NHcmFtbWFyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1NDhFMjQ4MDlFMUUwNEQwMEFGODAyMCAvKiBEb2N1bWVudC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERvY3VtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNjU0RUM2MEYwOTc3NzhGNTAwREFCNTJDIC8qIFdlYkNvcmVGcmFtZUJy
aWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZyYW1lQnJp
ZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1NEVDNjEwMDk3Nzc4RjUwMERB
QjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViQ29yZUZyYW1lQnJpZGdlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NTUwQjY5MzA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDREFUQVNlY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTUwQjY5NDA5OURGMDI3MDA5MEQ3ODEgLyog
Q0RBVEFTZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDREFUQVNl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU1MEI2OTUwOTlERjAyNzAw
OTBENzgxIC8qIENoYXJhY3RlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENoYXJhY3RlckRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODYyOSw5ICs4NjI1LDYgQEAKIAkJNjVCRjAyMTgwOTc0ODA2MzAwQzQzMTk2IC8qIHBhZ2Ug
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUE5QzZFNjVE
MEQ3NDY2OTQwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaWRsICovLAotCQkJCUE5QzZFNUEzMEQ3NDY0
NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovLAotCQkJCUE5QzZFNUE0MEQ3NDY0NTgwMDY0
NDJFOSAvKiBOYXZpZ2F0b3IuaCAqLywKIAkJCQkwNjY5M0Y0NTBCRkJDOTE2MDAyMTYwNzIgLyog
aW5zcGVjdG9yICovLAogCQkJCTkzQzA5QTgyMEIwNjRGMDUwMDVBQkQ0RCAvKiBtYWMgKi8sCiAJ
CQkJODUzOEYwMDAwQUQ3MTc3MDAwNkE4MUQxIC8qIEFic3RyYWN0Vmlldy5pZGwgKi8sCkBAIC04
Njg1LDYgKzg2NzgsOSBAQAogCQkJCUMwMkIxNEMxMEQ4MUUwMkEwMEQ4QTk3MCAvKiBKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXIuaCAqLywKIAkJCQk5M0VCMzU1RTA5RTM3RkQ2MDBGNDM3OTkgLyogTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgKi8sCiAJCQkJOTM1QzQ3NjIwOUFDNENFNjAw
QTZBQUI0IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCAqLywKKwkJCQlBOUM2RTVB
MzBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCAqLywKKwkJCQlBOUM2RTVBNDBENzQ2
NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmggKi8sCisJCQkJQTlDNkU2NUQwRDc0NjY5NDAwNjQ0
MkU5IC8qIE5hdmlnYXRvci5pZGwgKi8sCiAJCQkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8q
IFBhZ2UuY3BwICovLAogCQkJCTY1QTIxNDY3MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggKi8s
CiAJCQkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8sCkBAIC05
OTk0LDggKzk5OTAsNiBAQAogCQkJCUE3MTg3ODhGMEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29u
dHJvbGxlck1hYy5tbSAqLywKIAkJCQk2NUJGMDIzQzA5NzQ4MTkwMDBDNDMxOTYgLyogRnJhbWVN
YWMubW0gKi8sCiAJCQkJMUMyNjQ5N0IwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwICov
LAotCQkJCTY1NEVDNjBGMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJDb3JlRnJhbWVCcmlkZ2UuaCAq
LywKLQkJCQk2NTRFQzYxMDA5Nzc3OEY1MDBEQUI1MkMgLyogV2ViQ29yZUZyYW1lQnJpZGdlLm1t
ICovLAogCQkJCUY1ODc4NTRDMDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlRnJhbWVWaWV3Lmgg
Ki8sCiAJCQkJQkU5ODNEOTUwNTJBMkUwQTAwODkyRDg1IC8qIFdlYkNvcmVLZXlib2FyZFVJTW9k
ZS5oICovLAogCQkJCUY1ODc4NTU0MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3Rv
cnkuaCAqLywKQEAgLTE0Mzc4LDcgKzE0MzcyLDYgQEAKIAkJCQlCMjU1OTk2OTBEMDBEOEJBMDBC
QjgyNUMgLyogV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjU1OTk2QzBEMDBEOEJBMDBCQjgyNUMgLyogV0tTcG90TGlnaHRGaWx0ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyNTU5OTZGMEQwMEQ4QkEwMEJCODI1QyAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTY1NEVDNjExMDk3Nzc4RjUwMERBQjUyQyAvKiBXZWJD
b3JlRnJhbWVCcmlkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUE4MDgyNDVFNTkwMDFF
OUFCQyAvKiBXZWJDb3JlRnJhbWVWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlDMjA4
MjQ1RTU5MDAxRTlBQkMgLyogV2ViQ29yZUtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5QkIwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlib2FyZFVJTW9kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNjAzMCw3ICsxNjAyMyw2IEBACiAJCQkJQjI1NTk5NkEwRDAwRDhC
QTAwQkI4MjVDIC8qIFdLU3BlY3VsYXJMaWdodGluZ0ZpbHRlci5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI1NTk5NkQwRDAwRDhCQTAwQkI4MjVDIC8qIFdLU3BvdExpZ2h0RmlsdGVyLm0gaW4gU291
cmNlcyAqLywKIAkJCQlCMjU1OTk3MDBEMDBEOEJBMDBCQjgyNUMgLyogV0tUYWJsZVRyYW5zZmVy
RmlsdGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQk2NTRFQzYxMjA5Nzc3OEY1MDBEQUI1MkMgLyog
V2ViQ29yZUZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRTUwODI0NUU1
OTAwMUU5QUJDIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IubSBpbiBTb3VyY2VzICovLAogCQkJCTkz
NEQ5QkE1MEI4QzExNkIwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlERDA1RkUwRTBCOEJBM0M2MDA5QUNERkUgLyogV2ViQ29yZU9iakNFeHRy
YXMuYyBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRp
YUZlYXR1cmVOYW1lcy5oIgorI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTmF2
aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC02
OSwxMCArNzAsOSBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRS
ZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgotI2luY2x1ZGUgIk5QX2pz
b2JqZWN0LmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIK
ICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxF
U0hFRVQKQEAgLTEzNiw2ICsxMzYsMTQgQEAgRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxG
cmFtZU93bmVyRQogCiAgICAgWE1MTmFtZXM6OmluaXQoKTsKIAorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEphdmFKU0JpbmRpbmdzOworICAgIGlmICghaW5p
dGlhbGl6ZWRKYXZhSlNCaW5kaW5ncykgeworICAgICAgICBpbml0aWFsaXplZEphdmFKU0JpbmRp
bmdzID0gdHJ1ZTsKKyAgICAgICAgaW5pdEphdmFKU0JpbmRpbmdzKCk7CisgICAgfQorI2VuZGlm
CisKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcGFnZS0+c2V0TWFpbkZyYW1lKHRo
aXMpOwogICAgIGVsc2UgewpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wYWdl
L0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiBjcmVhdGVSb290T2JqZWN0KHZv
aWQqIG5hdGl2ZUhhbmRsZSwgS0pTOjpKU0dsb2JhbE9iamVjdCopOwogCiAjaWYgUExBVEZPUk0o
TUFDKQorICAgIHN0YXRpYyB2b2lkIGluaXRKYXZhSlNCaW5kaW5ncygpOwogICAgIFdlYlNjcmlw
dE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0KCk7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1l
TWFjLm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAj
aW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCisjaW1wb3J0ICJET01X
aW5kb3cuaCIKICNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJFZGl0Q29tbWFu
ZC5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCkBAIC02NSw2ICs2Niw3IEBACiAjaW1wb3J0
ICJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW1wb3J0ICJOUF9qc29iamVjdC5oIgogI2ltcG9y
dCAiUGFnZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybVNjcm9sbEJhci5oIgpAQCAtODYsMTMgKzg4LDEyIEBACiAjaW1wb3J0ICJXZWJEYXNo
Ym9hcmRSZWdpb24uaCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKICNpbXBv
cnQgImtqc19wcm94eS5oIgorI2ltcG9ydCAibnBydW50aW1lX2ltcGwuaCIKKyNpbXBvcnQgInJ1
bnRpbWUuaCIKKyNpbXBvcnQgInJ1bnRpbWVfcm9vdC5oIgogI2ltcG9ydCAidmlzaWJsZV91bml0
cy5oIgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QVBJQ2FzdC5oPgotI2ltcG9ydCAiTlBfanNvYmplY3QuaCIKLSNpbXBvcnQgIm5wcnVudGltZV9p
bXBsLmgiCi0jaW1wb3J0ICJydW50aW1lX3Jvb3QuaCIKLSNpbXBvcnQgInJ1bnRpbWUuaCIKIAog
QGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z2luKQogLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0
OwpAQCAtNjE0LDQgKzYxNSwzMiBAQCB2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldChjb25z
dCBTdHJpCiAgICAgICAgIGQtPm1fZG9jLT5zZXRVc2VyU3R5bGVTaGVldChzdHlsZVNoZWV0KTsK
IH0KIAorc3RhdGljIHB0aHJlYWRfdCBtYWluVGhyZWFkOworCitzdGF0aWMgdm9pZCB1cGRhdGVS
ZW5kZXJpbmdGb3JCaW5kaW5ncyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCog
cm9vdE9iamVjdCkKK3sKKyAgICBpZiAocHRocmVhZF9zZWxmKCkgIT0gbWFpblRocmVhZCkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpT
RE9NV2luZG93Kj4ocm9vdE9iamVjdCk7CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRh
dGVSZW5kZXJpbmcoKTsKK30KKwordm9pZCBGcmFtZTo6aW5pdEphdmFKU0JpbmRpbmdzKCkKK3sK
KyAgICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgS0pTOjpCaW5kaW5nczo6SmF2
YUpTT2JqZWN0Ojppbml0aWFsaXplSk5JVGhyZWFkaW5nKCk7CisgICAgS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2U6OnNldERpZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5n
cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJD
b3JlRnJhbWVCcmlkZ2UuaAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8V2ViQ29yZS9FZGl0QWN0aW9u
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+Ci0KLUBjbGFzcyBET01DU1NTdHlsZURlY2xhcmF0aW9u
OwotQGNsYXNzIERPTURvY3VtZW50OwotQGNsYXNzIERPTURvY3VtZW50RnJhZ21lbnQ7Ci1AY2xh
c3MgRE9NRWxlbWVudDsKLUBjbGFzcyBET01Ob2RlOwotQGNsYXNzIERPTVJhbmdlOwotCi1AcHJv
dG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3BpZXIgPE5TT2JqZWN0PgotLSAoTlNPYmplY3QgKilu
b2RlV2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBwb3NpdGlvbjooTlNQb2ludClwb3NpdGlvbiBy
ZWN0OihOU1JlY3QpcmVjdCB2aWV3OihOU1ZpZXcgKil2aWV3IGNoaWxkcmVuOihOU0FycmF5ICop
Y2hpbGRyZW47Ci1AZW5kCi0KLS8vIFdlYkNvcmVGcmFtZUJyaWRnZSBvYmplY3RzIGFyZSB1c2Vk
IGJ5IFdlYkNvcmUgdG8gYWJzdHJhY3QgYXdheSBvcGVyYXRpb25zIHRoYXQgbmVlZAotLy8gdG8g
YmUgaW1wbGVtZW50ZWQgYnkgbGlicmFyeSBjbGllbnRzLCBmb3IgZXhhbXBsZSBXZWJLaXQuIFRo
ZSBvYmplY3RzIGFyZSBhbHNvCi0vLyB1c2VkIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24sIGZv
ciBzaW1wbGUgYWNjZXNzIHRvIFdlYkNvcmUgZnVuY3Rpb25zIHdpdGhvdXQgZGVhbGluZwotLy8g
ZGlyZWN0bHkgd2l0aCB0aGUgS0hUTUwgQysrIGNsYXNzZXMuCi0KLS8vIEEgV2ViQ29yZUZyYW1l
QnJpZGdlIGNyZWF0ZXMgYW5kIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgRnJhbWUuCi0KLS8vIFRo
ZSBXZWJDb3JlRnJhbWVCcmlkZ2UgaW50ZXJmYWNlIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHVzZSBi
eSB0aGUgbm9uLVdlYkNvcmUgc2lkZSBvZiB0aGUgYnJpZGdlLgotCi1AaW50ZXJmYWNlIFdlYkNv
cmVGcmFtZUJyaWRnZSA6IE5TT2JqZWN0IHsKLUBwdWJsaWMKLSAgICBXZWJDb3JlOjpGcmFtZSog
bV9mcmFtZTsKLSAgICBCT09MIF9zaG91bGRDcmVhdGVSZW5kZXJlcnM7Ci0gICAgQk9PTCBfY2xv
c2VkOwotfQotCi0tICh2b2lkKXNldFdlYkNvcmVGcmFtZTooV2ViQ29yZTo6RnJhbWUqKXdlYkNv
cmVGcmFtZTsKLS0gKFdlYkNvcmU6OkZyYW1lKilfZnJhbWU7IC8vIHVuZGVyc2NvcmUgdG8gcHJl
dmVudCBjb25mbGljdCB3aXRoIC1bTlNWaWV3IGZyYW1lXQotCi0tIChpZClpbml0OwotLSAodm9p
ZCljbG9zZTsKLQotLSAoTlNVUkwgKiliYXNlVVJMOwotCi0tICh2b2lkKWZvcmNlTGF5b3V0QWRq
dXN0aW5nVmlld1NpemU6KEJPT0wpYWRqdXN0U2l6ZUZsYWc7Ci0tICh2b2lkKWZvcmNlTGF5b3V0
V2l0aE1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRo
OihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJPT0wpYWRqdXN0U2l6ZUZs
YWc7Ci0tICh2b2lkKXNlbmRTY3JvbGxFdmVudDsKLS0gKEJPT0wpbmVlZHNMYXlvdXQ7Ci0tICh2
b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdDsKLS0gKHZvaWQpYWRqdXN0UGFnZUhlaWdodE5ldzoo
ZmxvYXQgKiluZXdCb3R0b20gdG9wOihmbG9hdClvbGRUb3AgYm90dG9tOihmbG9hdClvbGRCb3R0
b20gbGltaXQ6KGZsb2F0KWJvdHRvbUxpbWl0OwotLSAoTlNBcnJheSopY29tcHV0ZVBhZ2VSZWN0
c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6KGZsb2F0KXByaW50V2lkdGhTY2FsZUZhY3RvciBw
cmludEhlaWdodDooZmxvYXQpcHJpbnRIZWlnaHQ7Ci0KLS0gKE5TT2JqZWN0ICopY29weVJlbmRl
clRyZWU6KGlkIDxXZWJDb3JlUmVuZGVyVHJlZUNvcGllcj4pY29waWVyOwotLSAoTlNTdHJpbmcg
KilyZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uOwotCi0tIChOU1VSTCAqKVVSTFdp
dGhBdHRyaWJ1dGVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotCi0tIChET01FbGVtZW50ICop
ZWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaW5Gb3JtOihET01FbGVtZW50ICopZm9y
bTsKLS0gKEJPT0wpZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVtZW50
OwotLSAoQk9PTCllbGVtZW50SXNQYXNzd29yZDooRE9NRWxlbWVudCAqKWVsZW1lbnQ7Ci0tIChE
T01FbGVtZW50ICopZm9ybUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50OwotLSAoRE9N
RWxlbWVudCAqKWN1cnJlbnRGb3JtOwotLSAoTlNBcnJheSAqKWNvbnRyb2xzSW5Gb3JtOihET01F
bGVtZW50ICopZm9ybTsKLS0gKE5TU3RyaW5nICopc2VhcmNoRm9yTGFiZWxzOihOU0FycmF5ICop
bGFiZWxzIGJlZm9yZUVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50OwotLSAoTlNTdHJpbmcg
KiltYXRjaExhYmVsczooTlNBcnJheSAqKWxhYmVscyBhZ2FpbnN0RWxlbWVudDooRE9NRWxlbWVu
dCAqKWVsZW1lbnQ7Ci0KLS0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJl
Y3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJP
T0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uOwotLSAo
dW5zaWduZWQpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vu
c2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0Oih1bnNpZ25lZClsaW1pdDsKLS0gKEJPT0wpbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDsKLS0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNo
ZXNBcmVIaWdobGlnaHRlZDooQk9PTClkb0hpZ2hsaWdodDsKLS0gKHZvaWQpdW5tYXJrQWxsVGV4
dE1hdGNoZXM7Ci0tIChOU0FycmF5ICopcmVjdHNGb3JUZXh0TWF0Y2hlczsKLQotLSAodm9pZClz
ZXRUZXh0U2l6ZU11bHRpcGxpZXI6KGZsb2F0KW11bHRpcGxpZXI7Ci0KLS0gKE5TU3RyaW5nICop
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
OwotLSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgZm9yY2VVc2VyR2VzdHVyZTooQk9PTClmb3JjZVVzZXJHZXN0dXJl
OwotLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKLQotLSAoTlNTdHJpbmcgKilzZWxlY3Rl
ZFN0cmluZzsKLQotLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZTsKLQotLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmdGcm9tTm9kZTooRE9NTm9kZSAqKW5vZGUg
bm9kZXM6KE5TQXJyYXkgKiopbm9kZXM7Ci0tIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZ0Zyb21S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZSBub2RlczooTlNBcnJheSAqKilub2RlczsKLQotLSAoTlNS
ZWN0KWNhcmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5OwotLSAoTlNSZWN0KWZpcnN0UmVj
dEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwotLSAodm9pZClzY3JvbGxET01SYW5nZVRv
VmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZTsKLQotLSAoTlNGb250ICopZm9udEZvclNlbGVjdGlv
bjooQk9PTCAqKWhhc011bHRpcGxlRm9udHM7Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nV2l0aERh
dGE6KE5TRGF0YSAqKWRhdGE7IC8vIHVzaW5nIHRoZSBlbmNvZGluZyBvZiB0aGUgZnJhbWUncyBt
YWluIHJlc291cmNlCi0rIChOU1N0cmluZyAqKXN0cmluZ1dpdGhEYXRhOihOU0RhdGEgKilkYXRh
IHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopdGV4dEVuY29kaW5nTmFtZTsgLy8gbmlsIGZv
ciB0ZXh0RW5jb2RpbmdOYW1lIG1lYW5zIExhdGluLTEKLQotLSAodm9pZClzZXRTaG91bGRDcmVh
dGVSZW5kZXJlcnM6KEJPT0wpc2hvdWxkQ3JlYXRlUmVuZGVyZXJzOwotCi0tICh2b2lkKXNldEJh
c2VCYWNrZ3JvdW5kQ29sb3I6KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3I7Ci0tICh2b2lkKXNl
dERyYXdzQmFja2dyb3VuZDooQk9PTClkcmF3c0JhY2tyb3VuZDsKLQotLSAoaWQpYWNjZXNzaWJp
bGl0eVRyZWU7Ci0KLS0gKERPTVJhbmdlICopcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlv
bjooV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBk
aXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OkVEaXJlY3Rpb24pZGlyZWN0
aW9uIGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7Ci0t
IChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7Ci0tICh2b2lk
KXNtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1Jh
bmdlOihET01SYW5nZSAqKWNoYXJSYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3RyaW5n
ICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmc7Ci0t
ICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7Ci0tIChOU1JhbmdlKXNlbGVjdGVk
TlNSYW5nZTsKLS0gKE5TUmFuZ2UpbWFya2VkVGV4dE5TUmFuZ2U7Ci0tIChET01SYW5nZSAqKWNv
bnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZTsKLS0gKE5TUmFuZ2UpY29udmVy
dERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlOwotCi0tIChET01Eb2N1bWVudEZy
YWdtZW50ICopZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFy
a3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZzsKLS0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilkb2N1bWVudEZyYWdtZW50V2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dDsKLS0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilkb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9k
ZXM7Ci0KLS0gKHZvaWQpcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2Vt
ZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRj
aFN0eWxlOwotLSAodm9pZClyZXBsYWNlU2VsZWN0aW9uV2l0aE5vZGU6KERPTU5vZGUgKilub2Rl
IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZToo
Qk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlOwotLSAodm9pZCly
ZXBsYWNlU2VsZWN0aW9uV2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcg
YmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50
OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2U7
Ci0tICh2b2lkKXJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVj
dFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClz
bWFydFJlcGxhY2U7Ci0KLS0gKHZvaWQpaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRD
b250ZW50OwotCi0tIChET01SYW5nZSAqKWNoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClw
b2ludDsKLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXR5cGluZ1N0eWxlOwotLSAodm9p
ZClzZXRUeXBpbmdTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRv
QWN0aW9uOihXZWJDb3JlOjpFZGl0QWN0aW9uKXVuZG9BY3Rpb247Ci0KLS0gKHZvaWQpZHJhZ1Nv
dXJjZU1vdmVkVG86KE5TUG9pbnQpd2luZG93TG9jOwotLSAodm9pZClkcmFnU291cmNlRW5kZWRB
dDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3BlcmF0aW9u
OwotCi0tIChCT09MKWdldERhdGE6KE5TRGF0YSAqKilkYXRhIGFuZFJlc3BvbnNlOihOU1VSTFJl
c3BvbnNlICoqKXJlc3BvbnNlIGZvclVSTDooTlNTdHJpbmcgKilVUkw7Ci0tICh2b2lkKWdldEFs
bFJlc291cmNlRGF0YXM6KE5TQXJyYXkgKiopZGF0YXMgYW5kUmVzcG9uc2VzOihOU0FycmF5ICoq
KXJlc3BvbnNlczsKLQotLSAoQk9PTCljYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2U7Ci0tIChCT09M
KWNhblNhdmVBc1dlYkFyY2hpdmU7Ci0KLS0gKHZvaWQpcmVjZWl2ZWREYXRhOihOU0RhdGEgKilk
YXRhIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopdGV4dEVuY29kaW5nTmFtZTsKLQotQGVu
ZApJbmRleDogV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIK
LQotI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgotI2ltcG9ydCAiQ1NTSGVscGVyLmgiCi0jaW1w
b3J0ICJDYWNoZS5oIgotI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgiCi0jaW1wb3J0ICJDb2xvck1h
Yy5oIgotI2ltcG9ydCAiRE9NSW1wbGVtZW50YXRpb24uaCIKLSNpbXBvcnQgIkRPTUludGVybmFs
LmgiCi0jaW1wb3J0ICJET01XaW5kb3cuaCIKLSNpbXBvcnQgIkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuaCIKLSNpbXBvcnQgIkRvY0xvYWRlci5oIgotI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5o
IgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQgIkRvY3VtZW50VHlwZS5oIgot
I2ltcG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKLSNpbXBvcnQgIkV2
ZW50SGFuZGxlci5oIgotI2ltcG9ydCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0ICJGb3JtRGF0YVN0
cmVhbU1hYy5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCi0j
aW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2ltcG9ydCAiRnJhbWVUcmVlLmgiCi0jaW1w
b3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAi
SFRNTERvY3VtZW50LmgiCi0jaW1wb3J0ICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbXBvcnQgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxOYW1lcy5oIgotI2ltcG9ydCAiSGl0VGVz
dFJlc3VsdC5oIgotI2ltcG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkpTRE9NV2luZG93LmgiCi0j
aW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiTW92ZVNlbGVjdGlvbkNvbW1h
bmQuaCIKLSNpbXBvcnQgIlBhZ2UuaCIKLSNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgot
I2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlBsdWdpbkRhdGEuaCIKLSNpbXBv
cnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0ICJSZW5kZXJQYXJ0LmgiCi0jaW1wb3J0ICJSZW5k
ZXJUcmVlQXNUZXh0LmgiCi0jaW1wb3J0ICJSZW5kZXJWaWV3LmgiCi0jaW1wb3J0ICJSZW5kZXJX
aWRnZXQuaCIKLSNpbXBvcnQgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCi0jaW1wb3J0ICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbXBvcnQgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW1wb3J0ICJTbWFydFJlcGxhY2UuaCIKLSNpbXBvcnQg
IlN1YnJlc291cmNlTG9hZGVyLmgiCi0jaW1wb3J0ICJTeXN0ZW1UaW1lLmgiCi0jaW1wb3J0ICJU
ZXh0LmgiCi0jaW1wb3J0ICJUZXh0RW5jb2RpbmcuaCIKLSNpbXBvcnQgIlRleHRJdGVyYXRvci5o
IgotI2ltcG9ydCAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2ltcG9ydCAiVHlwaW5nQ29tbWFu
ZC5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0jaW1wb3J0ICJYTUxUb2tlbml6
ZXIuaCIKLSNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJranNfcHJveHkuaCIKLSNp
bXBvcnQgIm1hcmt1cC5oIgotI2ltcG9ydCAidmlzaWJsZV91bml0cy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvYXJyYXlfaW5zdGFuY2UuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2Rh
dGVfb2JqZWN0Lmg+Ci0jaW1wb3J0ICJqbmlfanNvYmplY3QuaCIKLSNpbXBvcnQgInJ1bnRpbWVf
cm9vdC5oIgotI2ltcG9ydCAicnVudGltZS5oIgotI2ltcG9ydCA8T3BlblNjcmlwdGluZy9BU1Jl
Z2lzdHJ5Lmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBjbGFzcyBOU1ZpZXc7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXVzaW5nIEtKUzo6QXJyYXlJbnN0YW5jZTsKLXVzaW5nIEtK
Uzo6Qm9vbGVhblR5cGU7Ci11c2luZyBLSlM6OkRhdGVJbnN0YW5jZTsKLXVzaW5nIEtKUzo6RXhl
Y1N0YXRlOwotdXNpbmcgS0pTOjpHZXR0ZXJTZXR0ZXJUeXBlOwotdXNpbmcgS0pTOjpKU0ltbWVk
aWF0ZTsKLXVzaW5nIEtKUzo6SlNMb2NrOwotdXNpbmcgS0pTOjpKU09iamVjdDsKLXVzaW5nIEtK
Uzo6SlNWYWx1ZTsKLXVzaW5nIEtKUzo6TnVsbFR5cGU7Ci11c2luZyBLSlM6Ok51bWJlclR5cGU7
Ci11c2luZyBLSlM6Ok9iamVjdFR5cGU7Ci11c2luZyBLSlM6OlNhdmVkQnVpbHRpbnM7Ci11c2lu
ZyBLSlM6OlNhdmVkUHJvcGVydGllczsKLXVzaW5nIEtKUzo6U3RyaW5nVHlwZTsKLXVzaW5nIEtK
Uzo6VW5kZWZpbmVkVHlwZTsKLXVzaW5nIEtKUzo6VW5zcGVjaWZpZWRUeXBlOwotCi11c2luZyBL
SlM6OkJpbmRpbmdzOjpKYXZhSlNPYmplY3Q7Ci0KLXN0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVh
ZCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmluZ0ZvckJpbmRpbmdzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHJvb3RPYmplY3QpCi17Ci0gICAgaWYgKHB0aHJlYWRfc2VsZigp
ICE9IG1haW5UaHJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKCFyb290
T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3RPYmplY3QpOwotICAgIGlmICghd2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gd2luZG93LT5p
bXBsKCktPmZyYW1lKCkpCi0gICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBkb2MtPnVwZGF0ZVJlbmRlcmluZygpOwotfQotCi1zdGF0aWMg
TlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlKiBqc1ZhbHVlKQotewotICAgIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
YyA9IDA7Ci0gICAgc3dpdGNoIChqc1ZhbHVlLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBCb29s
ZWFuVHlwZToKLSAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRl
c2NyaXB0b3JXaXRoQm9vbGVhbjpqc1ZhbHVlLT5nZXRCb29sZWFuKCldOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIGFlRGVzYyA9IFtO
U0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoU3RyaW5nOlN0cmluZyhqc1ZhbHVl
LT5nZXRTdHJpbmcoKSldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTnVtYmVy
VHlwZTogewotICAgICAgICAgICAgZG91YmxlIHZhbHVlID0ganNWYWx1ZS0+Z2V0TnVtYmVyKCk7
Ci0gICAgICAgICAgICBpbnQgaW50VmFsdWUgPSAoaW50KXZhbHVlOwotICAgICAgICAgICAgaWYg
KHZhbHVlID09IGludFZhbHVlKQotICAgICAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZl
bnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZVNJbnQzMiBieXRl
czomaW50VmFsdWUgbGVuZ3RoOnNpemVvZihpbnRWYWx1ZSldOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0
b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZUlFRUU2NEJpdEZsb2F0aW5nUG9pbnQgYnl0ZXM6JnZh
bHVlIGxlbmd0aDpzaXplb2YodmFsdWUpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGpzVmFsdWUtPmdldE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpIHsKLSAgICAgICAgICAgICAgICBEYXRlSW5zdGFuY2Uq
IGRhdGUgPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihvYmplY3QpOwotICAgICAgICAgICAg
ICAgIGRvdWJsZSBtcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IHR6T2Zmc2V0ID0gMDsKLSAg
ICAgICAgICAgICAgICBpZiAoZGF0ZS0+Z2V0VGltZShtcywgdHpPZmZzZXQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENGQWJzb2x1dGVUaW1lIHV0Y1NlY29uZHMgPSBtcyAvIDEwMDAgLSBrQ0ZB
YnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MDsKLSAgICAgICAgICAgICAgICAgICAgTG9uZ0Rh
dGVUaW1lIGxkdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vRXJyID09IFVDQ29udmVydENG
QWJzb2x1dGVUaW1lVG9Mb25nRGF0ZVRpbWUodXRjU2Vjb25kcywgJmxkdCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9y
V2l0aERlc2NyaXB0b3JUeXBlOnR5cGVMb25nRGF0ZVRpbWUgYnl0ZXM6JmxkdCBsZW5ndGg6c2l6
ZW9mKGxkdCldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkFycmF5SW5zdGFuY2U6OmluZm8pKSB7Ci0gICAg
ICAgICAgICAgICAgc3RhdGljIEhhc2hTZXQ8SlNPYmplY3QqPiB2aXNpdGVkRWxlbXM7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF2aXNpdGVkRWxlbXMuY29udGFpbnMob2JqZWN0KSkgewotICAgICAg
ICAgICAgICAgICAgICB2aXNpdGVkRWxlbXMuYWRkKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBBcnJheUluc3RhbmNlKiBhcnJheSA9IHN0YXRpY19j
YXN0PEFycmF5SW5zdGFuY2UqPihvYmplY3QpOwotICAgICAgICAgICAgICAgICAgICBhZURlc2Mg
PSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBsaXN0RGVzY3JpcHRvcl07Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bUl0ZW1zID0gYXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFthZURlc2MgaW5zZXJ0RGVzY3JpcHRvcjphZURlc2NGcm9tSlNW
YWx1ZShleGVjLCBhcnJheS0+Z2V0SXRlbShpKSkgYXRJbmRleDowXTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRFbGVtcy5yZW1vdmUob2JqZWN0KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFlRGVz
YykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUqIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9Qcmlt
aXRpdmUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBudWxsRGVzY3JpcHRvcl07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNW
YWx1ZShleGVjLCBwcmltaXRpdmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBVbmRlZmluZWRUeXBlOgotICAgICAgICAgICAgYWVE
ZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhUeXBlQ29kZTpjTWlz
c2luZ1ZhbHVlXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmtub3duIEphdmFTY3JpcHQgdHlwZTogJWQiLCBqc1ZhbHVlLT50
eXBlKCkpOwotICAgICAgICAgICAgLy8gbm8gYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5zcGVjaWZp
ZWRUeXBlOgotICAgICAgICBjYXNlIE51bGxUeXBlOgotICAgICAgICBjYXNlIEdldHRlclNldHRl
clR5cGU6Ci0gICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBudWxs
RGVzY3JpcHRvcl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGFlRGVzYzsKLX0KLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVGcmFtZUJyaWRnZQotCi0tIChO
U1N0cmluZyAqKWRvbWFpbgotewotICAgIERvY3VtZW50ICpkb2MgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpOwotICAgIGlmIChkb2MpCi0gICAgICAgIHJldHVybiBkb2MtPmRvbWFpbigpOwotICAgIHJl
dHVybiBuaWw7Ci19Ci0KLS0gKGlkKWluaXQKLXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZEtKUzsKLSAgICBpZiAoIWluaXRpYWxpemVkS0pTKSB7Ci0gICAgICAgIGluaXRpYWxpemVkS0pT
ID0gdHJ1ZTsKLQotICAgICAgICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgICAg
IEphdmFKU09iamVjdDo6aW5pdGlhbGl6ZUpOSVRocmVhZGluZygpOwotICAgICAgICBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6c2V0RGlkRXhlY3V0ZUZ1bmN0aW9uKHVwZGF0ZVJlbmRlcmluZ0Zv
ckJpbmRpbmdzKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfc2hvdWxkQ3JlYXRlUmVuZGVyZXJzID0gWUVT
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBBU1NFUlQo
X2Nsb3NlZCk7Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17
Ci0gICAgQVNTRVJUKF9jbG9zZWQpOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKHZv
aWQpY2xvc2UKLXsKLSAgICBtX2ZyYW1lID0gMDsKLSAgICBfY2xvc2VkID0gWUVTOwotfQotCi0t
ICh2b2lkKWFkZERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBEb2N1bWVudCAqZG9jID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICAvLyBEb2N1bWVudCBtYXkgYmUgbmlsIGlmIHRo
ZSBwYXJ0IGlzIGFib3V0IHRvIHJlZGlyZWN0Ci0gICAgLy8gYXMgYSByZXN1bHQgb2YgSlMgZXhl
Y3V0aW5nIGR1cmluZyBsb2FkLCBpLmUuIG9uZSBmcmFtZQotICAgIC8vIGNoYW5naW5nIGFub3Ro
ZXIncyBsb2NhdGlvbiBiZWZvcmUgdGhlIGZyYW1lJ3MgZG9jdW1lbnQKLSAgICAvLyBoYXMgYmVl
biBjcmVhdGVkLiAKLSAgICBpZiAoZG9jKSB7Ci0gICAgICAgIGRvYy0+c2V0U2hvdWxkQ3JlYXRl
UmVuZGVyZXJzKF9zaG91bGRDcmVhdGVSZW5kZXJlcnMpOwotICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+YWRkRGF0YSgoY29uc3QgY2hhciAqKVtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7
Ci0gICAgfQotfQotCi0tIChOU1N0cmluZyAqKV9zdHJpbmdXaXRoRG9jdW1lbnRUeXBlU3RyaW5n
QW5kTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZwotewotICAgIHJldHVybiBt
X2ZyYW1lLT5kb2N1bWVudFR5cGVTdHJpbmcoKSArIG1hcmt1cFN0cmluZzsKLX0KLQotLSAoTlNB
cnJheSAqKW5vZGVzRnJvbUxpc3Q6KFZlY3RvcjxOb2RlKj4gKilub2Rlc1ZlY3RvcgotewotICAg
IHNpemVfdCBzaXplID0gbm9kZXNWZWN0b3ItPnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAq
bm9kZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtub2RlcyBhZGRPYmplY3Q6
W0RPTU5vZGUgX3dyYXBOb2RlOigqbm9kZXNWZWN0b3IpW2ldXV07Ci0gICAgcmV0dXJuIG5vZGVz
OwotfQotCi0tIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZ0Zyb21Ob2RlOihET01Ob2RlICopbm9k
ZSBub2RlczooTlNBcnJheSAqKilub2RlcwotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5ldmVy
ICJmb3IgaW50ZXJjaGFuZ2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIG5leHQgbWV0aG9kLgot
ICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7Ci0gICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9
IGNyZWF0ZU1hcmt1cChbbm9kZSBfbm9kZV0sIEluY2x1ZGVOb2RlLCBub2RlcyA/ICZub2RlTGlz
dCA6IDApOwotICAgIGlmIChub2RlcykKLSAgICAgICAgKm5vZGVzID0gW3NlbGYgbm9kZXNGcm9t
TGlzdDombm9kZUxpc3RdOwotCi0gICAgcmV0dXJuIFtzZWxmIF9zdHJpbmdXaXRoRG9jdW1lbnRU
eXBlU3RyaW5nQW5kTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5n
ICopbWFya3VwU3RyaW5nRnJvbVJhbmdlOihET01SYW5nZSAqKXJhbmdlIG5vZGVzOihOU0FycmF5
ICoqKW5vZGVzCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzICJmb3IgaW50ZXJjaGFu
Z2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIHByZXZpb3VzIG1ldGhvZC4KLSAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJr
dXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVzID8gJm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSk7Ci0gICAgaWYgKG5vZGVzKQotICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rlc0Zy
b21MaXN0OiZub2RlTGlzdF07Ci0KLSAgICByZXR1cm4gW3NlbGYgX3N0cmluZ1dpdGhEb2N1bWVu
dFR5cGVTdHJpbmdBbmRNYXJrdXBTdHJpbmc6bWFya3VwU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJp
bmcgKilzZWxlY3RlZFN0cmluZwotewotICAgIFN0cmluZyB0ZXh0ID0gbV9mcmFtZS0+c2VsZWN0
ZWRUZXh0KCk7Ci0gICAgdGV4dC5yZXBsYWNlKCdcXCcsIG1fZnJhbWUtPmJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSk7Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLS0gKE5TU3RyaW5nICopc3Ry
aW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKLXsKLSAgICAvLyBUaGlzIHdpbGwgZ2l2ZSBh
IHN5c3RlbSBtYWxsb2MnZCBidWZmZXIgdGhhdCBjYW4gYmUgdHVybmVkIGRpcmVjdGx5IGludG8g
YW4gTlNTdHJpbmcKLSAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgVUNoYXIqIGJ1ZiA9IHBsYWlu
VGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKFtyYW5nZSBfcmFuZ2VdLCBsZW5ndGgpOwotICAg
IAotICAgIGlmICghYnVmKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107Ci0gICAg
Ci0gICAgVUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCA9IG1fZnJhbWUtPmJhY2tzbGFz
aEFzQ3VycmVuY3lTeW1ib2woKTsKLSAgICBpZiAoYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCAh
PSAnXFwnKQotICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgbGVuZ3RoOyBuKyspIAot
ICAgICAgICAgICAgaWYgKGJ1ZltuXSA9PSAnXFwnKQotICAgICAgICAgICAgICAgIGJ1ZltuXSA9
IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2w7Ci0KLSAgICAvLyBUcmFuc2ZlciBidWZmZXIgb3du
ZXJzaGlwIHRvIE5TU3RyaW5nCi0gICAgcmV0dXJuIFtbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aENoYXJhY3RlcnNOb0NvcHk6YnVmIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOllFU10gYXV0
b3JlbGVhc2VdOwotfQotCi0tICh2b2lkKWZvcmNlTGF5b3V0QWRqdXN0aW5nVmlld1NpemU6KEJP
T0wpZmxhZwotewotICAgIG1fZnJhbWUtPmZvcmNlTGF5b3V0KCFmbGFnKTsKLSAgICBpZiAoZmxh
ZykKLSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotfQotCi0tICh2
b2lkKWZvcmNlTGF5b3V0V2l0aE1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBt
YXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJP
T0wpZmxhZwotewotICAgIG1fZnJhbWUtPmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKG1p
blBhZ2VXaWR0aCwgbWF4UGFnZVdpZHRoLCBmbGFnKTsKLX0KLQotLSAodm9pZClzZW5kU2Nyb2xs
RXZlbnQKLXsKLSAgICBtX2ZyYW1lLT5zZW5kU2Nyb2xsRXZlbnQoKTsKLX0KLQotLSAodm9pZClk
cmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxh
dGZvcm1Db250ZXh0ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKLSAgICBBU1NF
UlQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKLSAgICAKLSAgICBtX2Zy
YW1lLT5wYWludCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS8vIFVz
ZWQgYnkgcGFnaW5hdGlvbiBjb2RlIGNhbGxlZCBmcm9tIEFwcEtpdCB3aGVuIGEgc3RhbmRhbG9u
ZSB3ZWIgcGFnZSBpcyBwcmludGVkLgotLSAoTlNBcnJheSopY29tcHV0ZVBhZ2VSZWN0c1dpdGhQ
cmludFdpZHRoU2NhbGVGYWN0b3I6KGZsb2F0KXByaW50V2lkdGhTY2FsZUZhY3RvciBwcmludEhl
aWdodDooZmxvYXQpcHJpbnRIZWlnaHQKLXsKLSAgICBOU011dGFibGVBcnJheSogcGFnZXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6NV07Ci0gICAgaWYgKHByaW50V2lkdGhT
Y2FsZUZhY3RvciA8PSAwKSB7Ci0gICAgICAgIExPR19FUlJPUigicHJpbnRXaWR0aFNjYWxlRmFj
dG9yIGhhcyBiYWQgdmFsdWUgJS4yZiIsIHByaW50V2lkdGhTY2FsZUZhY3Rvcik7Ci0gICAgICAg
IHJldHVybiBwYWdlczsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHByaW50SGVpZ2h0IDw9IDApIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJwcmludEhlaWdodCBoYXMgYmFkIHZhbHVlICUuMmYiLCBwcmlu
dEhlaWdodCk7Ci0gICAgICAgIHJldHVybiBwYWdlczsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZnJh
bWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPnZpZXcoKSkgcmV0dXJuIHBh
Z2VzOwotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+KG1f
ZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwotICAgIGlmICghcm9vdCkgcmV0dXJuIHBh
Z2VzOwotICAgIAotICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBp
ZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBwYWdlczsKLQotICAgIE5TVmlldyogZG9jdW1lbnRW
aWV3ID0gdmlldy0+ZG9jdW1lbnRWaWV3KCk7Ci0gICAgaWYgKCFkb2N1bWVudFZpZXcpCi0gICAg
ICAgIHJldHVybiBwYWdlczsKLQotICAgIGZsb2F0IGN1cnJQYWdlSGVpZ2h0ID0gcHJpbnRIZWln
aHQ7Ci0gICAgZmxvYXQgZG9jSGVpZ2h0ID0gcm9vdC0+bGF5ZXIoKS0+aGVpZ2h0KCk7Ci0gICAg
ZmxvYXQgZG9jV2lkdGggPSByb290LT5sYXllcigpLT53aWR0aCgpOwotICAgIGZsb2F0IHByaW50
V2lkdGggPSBkb2NXaWR0aC9wcmludFdpZHRoU2NhbGVGYWN0b3I7Ci0gICAgCi0gICAgLy8gV2Ug
bmVlZCB0byBnaXZlIHRoZSBwYXJ0IHRoZSBvcHBvcnR1bml0eSB0byBhZGp1c3QgdGhlIHBhZ2Ug
aGVpZ2h0IGF0IGVhY2ggc3RlcC4KLSAgICBmb3IgKGZsb2F0IGkgPSAwOyBpIDwgZG9jSGVpZ2h0
OyBpICs9IGN1cnJQYWdlSGVpZ2h0KSB7Ci0gICAgICAgIGZsb2F0IHByb3Bvc2VkQm90dG9tID0g
bWluKGRvY0hlaWdodCwgaSArIHByaW50SGVpZ2h0KTsKLSAgICAgICAgbV9mcmFtZS0+YWRqdXN0
UGFnZUhlaWdodCgmcHJvcG9zZWRCb3R0b20sIGksIHByb3Bvc2VkQm90dG9tLCBpKTsKLSAgICAg
ICAgY3VyclBhZ2VIZWlnaHQgPSBtYXgoMS4wZiwgcHJvcG9zZWRCb3R0b20gLSBpKTsKLSAgICAg
ICAgZm9yIChmbG9hdCBqID0gMDsgaiA8IGRvY1dpZHRoOyBqICs9IHByaW50V2lkdGgpIHsKLSAg
ICAgICAgICAgIE5TVmFsdWUqIHZhbCA9IFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6IE5TTWFrZVJl
Y3QoaiwgaSwgcHJpbnRXaWR0aCwgY3VyclBhZ2VIZWlnaHQpXTsKLSAgICAgICAgICAgIFtwYWdl
cyBhZGRPYmplY3Q6IHZhbF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBh
Z2VzOwotfQotCi0vLyBUaGlzIGlzIHRvIHN1cHBvcnQgdGhlIGNhc2Ugd2hlcmUgYSB3ZWJ2aWV3
IGlzIGVtYmVkZGVkIGluIHRoZSB2aWV3IHRoYXQncyBiZWluZyBwcmludGVkCi0tICh2b2lkKWFk
anVzdFBhZ2VIZWlnaHROZXc6KGZsb2F0ICopbmV3Qm90dG9tIHRvcDooZmxvYXQpb2xkVG9wIGJv
dHRvbTooZmxvYXQpb2xkQm90dG9tIGxpbWl0OihmbG9hdClib3R0b21MaW1pdAotewotICAgIG1f
ZnJhbWUtPmFkanVzdFBhZ2VIZWlnaHQobmV3Qm90dG9tLCBvbGRUb3AsIG9sZEJvdHRvbSwgYm90
dG9tTGltaXQpOwotfQotCi0tIChOU09iamVjdCAqKWNvcHlSZW5kZXJOb2RlOihSZW5kZXJPYmpl
Y3QgKilub2RlIGNvcGllcjooaWQgPFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyPiljb3BpZXIKLXsK
LSAgICBOU011dGFibGVBcnJheSAqY2hpbGRyZW4gPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFtjaGlsZHJl
biBhZGRPYmplY3Q6W3NlbGYgY29weVJlbmRlck5vZGU6Y2hpbGQgY29waWVyOmNvcGllcl1dOwot
ICAgIH0KLSAgICAgICAgICAKLSAgICBOU1N0cmluZyAqbmFtZSA9IFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoVVRGOFN0cmluZzpub2RlLT5yZW5kZXJOYW1lKCldOwotICAgIAotICAgIFJlbmRl
cldpZGdldCogcmVuZGVyV2lkZ2V0ID0gbm9kZS0+aXNXaWRnZXQoKSA/IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KG5vZGUpIDogMDsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHJlbmRlcldpZGdl
dCA/IHJlbmRlcldpZGdldC0+d2lkZ2V0KCkgOiAwOwotICAgIE5TVmlldyAqdmlldyA9IHdpZGdl
dCA/IHdpZGdldC0+Z2V0VmlldygpIDogbmlsOwotICAgIAotICAgIGludCBueCwgbnk7Ci0gICAg
bm9kZS0+YWJzb2x1dGVQb3NpdGlvbihueCwgbnkpOwotICAgIE5TT2JqZWN0ICpjb3BpZWROb2Rl
ID0gW2NvcGllciBub2RlV2l0aE5hbWU6bmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zaXRpb246TlNNYWtlUG9pbnQobngsbnkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDpOU01ha2VSZWN0KG5vZGUtPnhQb3MoKSwg
bm9kZS0+eVBvcygpLCBub2RlLT53aWR0aCgpLCBub2RlLT5oZWlnaHQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3OnZpZXcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOmNoaWxkcmVuXTsKLSAgICAKLSAgICBb
bmFtZSByZWxlYXNlXTsKLSAgICBbY2hpbGRyZW4gcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJu
IGNvcGllZE5vZGU7Ci19Ci0KLS0gKE5TT2JqZWN0ICopY29weVJlbmRlclRyZWU6KGlkIDxXZWJD
b3JlUmVuZGVyVHJlZUNvcGllcj4pY29waWVyCi17Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJl
ciA9IG1fZnJhbWUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikgewotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIH0KLSAgICByZXR1cm4gW3NlbGYgY29weVJlbmRlck5vZGU6cmVuZGVy
ZXIgY29waWVyOmNvcGllcl07Ci19Ci0KLXN0YXRpYyBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50KiBlbGVtZW50KQotewotICAgIE5vZGUqIG5v
ZGUgPSBbZWxlbWVudCBfbm9kZV07Ci0gICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpOwot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLXN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50
RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKLXsKLSAgICBOb2RlICpub2RlID0g
W2VsZW1lbnQgX25vZGVdOwotICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1
dCBhbiBYU0wgZmlsZSBvbgotICAgIC8vIG1hcHMuZ29vZ2xlLmNvbSBjcmFzaGVzIG90aGVyd2lz
ZSBiZWNhdXNlIGl0IGlzIGFuIHhzbHQgZmlsZQotICAgIC8vIHRoYXQgY29udGFpbnMgPGZvcm0+
IGVsZW1lbnRzIHRoYXQgYXJlbid0IGluIGFueSBuYW1lc3BhY2UsIHNvCi0gICAgLy8gdGhleSBj
b21lIG91dCBhcyBnZW5lcmljIENNTCBlbGVtZW50cwotICAgIGlmIChub2RlICYmIG5vZGUtPmhh
c1RhZ05hbWUoZm9ybVRhZykpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudCAqPihub2RlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoRE9NRWxl
bWVudCAqKWVsZW1lbnRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGluRm9ybTooRE9NRWxlbWVu
dCAqKWZvcm0KLXsKLSAgICBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50ID0gZm9ybUVsZW1l
bnRGcm9tRE9NRWxlbWVudChmb3JtKTsKLSAgICBpZiAoZm9ybUVsZW1lbnQpIHsKLSAgICAgICAg
VmVjdG9yPEhUTUxHZW5lcmljRm9ybUVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+
Zm9ybUVsZW1lbnRzOwotICAgICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnQgKmVsdCA9IGVsZW1lbnRzW2ld
OwotICAgICAgICAgICAgLy8gU2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAg
ICAgICAgIGlmIChlbHQtPm5hbWUoKSA9PSB0YXJnZXROYW1lKQotICAgICAgICAgICAgICAgIHJl
dHVybiBbRE9NRWxlbWVudCBfd3JhcEVsZW1lbnQ6ZWx0XTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbmlsOwotfQotCi0tIChCT09MKWVsZW1lbnREb2VzQXV0b0NvbXBsZXRlOihET01F
bGVtZW50ICopZWxlbWVudAotewotICAgIEhUTUxJbnB1dEVsZW1lbnQgKmlucHV0RWxlbWVudCA9
IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1lbnQpOwotICAgIHJldHVybiBpbnB1dEVs
ZW1lbnQgIT0gbmlsCi0gICAgICAgICYmIGlucHV0RWxlbWVudC0+aW5wdXRUeXBlKCkgPT0gSFRN
TElucHV0RWxlbWVudDo6VEVYVAotICAgICAgICAmJiBpbnB1dEVsZW1lbnQtPmF1dG9Db21wbGV0
ZSgpOwotfQotCi0tIChCT09MKWVsZW1lbnRJc1Bhc3N3b3JkOihET01FbGVtZW50ICopZWxlbWVu
dAotewotICAgIEhUTUxJbnB1dEVsZW1lbnQgKmlucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudEZy
b21ET01FbGVtZW50KGVsZW1lbnQpOwotICAgIHJldHVybiBpbnB1dEVsZW1lbnQgIT0gbmlsCi0g
ICAgICAgICYmIGlucHV0RWxlbWVudC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6
UEFTU1dPUkQ7Ci19Ci0KLS0gKERPTUVsZW1lbnQgKilmb3JtRm9yRWxlbWVudDooRE9NRWxlbWVu
dCAqKWVsZW1lbnQ7Ci17Ci0gICAgSFRNTElucHV0RWxlbWVudCAqaW5wdXRFbGVtZW50ID0gaW5w
dXRFbGVtZW50RnJvbURPTUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYgKGlucHV0RWxlbWVudCkg
ewotICAgICAgICBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50ID0gaW5wdXRFbGVtZW50LT5m
b3JtKCk7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudCkgewotICAgICAgICAgICAgcmV0dXJuIFtE
T01FbGVtZW50IF93cmFwRWxlbWVudDpmb3JtRWxlbWVudF07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCi17Ci0gICAg
cmV0dXJuIFtET01FbGVtZW50IF93cmFwRWxlbWVudDptX2ZyYW1lLT5jdXJyZW50Rm9ybSgpXTsK
LX0KLQotLSAoTlNBcnJheSAqKWNvbnRyb2xzSW5Gb3JtOihET01FbGVtZW50ICopZm9ybQotewot
ICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOwotICAgIEhUTUxGb3JtRWxlbWVudCAq
Zm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOwotICAgIGlmIChm
b3JtRWxlbWVudCkgewotICAgICAgICBWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudCo+JiBl
bGVtZW50cyA9IGZvcm1FbGVtZW50LT5mb3JtRWxlbWVudHM7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlm
IChlbGVtZW50cy5hdChpKS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVt
ZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgICAgIERPTUVsZW1lbnQgKmRlID0gW0RPTUVs
ZW1lbnQgX3dyYXBFbGVtZW50OmVsZW1lbnRzLmF0KGkpXTsKLSAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhPYmplY3Q6ZGVdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFtyZXN1bHRzIGFkZE9iamVjdDpkZV07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOwotfQot
Ci0tIChOU1N0cmluZyAqKXNlYXJjaEZvckxhYmVsczooTlNBcnJheSAqKWxhYmVscyBiZWZvcmVF
bGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAotewotICAgIHJldHVybiBtX2ZyYW1lLT5zZWFy
Y2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGxhYmVscywgW2VsZW1lbnQgX2VsZW1lbnRdKTsKLX0K
LQotLSAoTlNTdHJpbmcgKiltYXRjaExhYmVsczooTlNBcnJheSAqKWxhYmVscyBhZ2FpbnN0RWxl
bWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+bWF0Y2hM
YWJlbHNBZ2FpbnN0RWxlbWVudChsYWJlbHMsIFtlbGVtZW50IF9lbGVtZW50XSk7Ci19Ci0KLS0g
KE5TVVJMICopVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAg
ICBEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBGSVhNRTogaXMgcGFyc2VVUkwgYXBwcm9wcmlhdGUg
aGVyZT8KLSAgICByZXR1cm4gZG9jLT5jb21wbGV0ZVVSTChwYXJzZVVSTChzdHJpbmcpKTsKLX0K
LQotLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClm
b3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBz
dGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24KLXsKLSAgICByZXR1cm4gbV9m
cmFtZS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3Rh
cnRJblNlbGVjdGlvbik7Ci19Ci0KLS0gKHVuc2lnbmVkKW1hcmtBbGxNYXRjaGVzRm9yVGV4dDoo
TlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDoodW5z
aWduZWQpbGltaXQKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0
KHN0cmluZywgY2FzZUZsYWcsIGxpbWl0KTsKLX0KLQotLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hl
c0FyZUhpZ2hsaWdodGVkCi17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPm1hcmtlZFRleHRNYXRjaGVz
QXJlSGlnaGxpZ2h0ZWQoKTsKLX0KLQotLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkOihCT09MKWRvSGlnaGxpZ2h0Ci17Ci0gICAgbV9mcmFtZS0+c2V0TWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZChkb0hpZ2hsaWdodCk7Ci19Ci0KLS0gKHZvaWQpdW5tYXJr
QWxsVGV4dE1hdGNoZXMKLXsKLSAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvYykgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvYy0+cmVt
b3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLX0KLQotLSAoTlNBcnJheSAq
KXJlY3RzRm9yVGV4dE1hdGNoZXMKLXsKLSAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsK
LSAgICAKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
XTsKLSAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBkb2MtPnJlbmRlcmVkUmVjdHNGb3JNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gcmVj
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyAr
K2luZGV4KQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnJlY3RzW2luZGV4XV1dOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKHZvaWQp
c2V0VGV4dFNpemVNdWx0aXBsaWVyOihmbG9hdCltdWx0aXBsaWVyCi17Ci0gICAgaW50IG5ld1pv
b21GYWN0b3IgPSAoaW50KXJpbnQobXVsdGlwbGllciAqIDEwMCk7Ci0gICAgaWYgKG1fZnJhbWUt
Pnpvb21GYWN0b3IoKSA9PSBuZXdab29tRmFjdG9yKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9mcmFtZS0+c2V0Wm9vbUZhY3RvcihuZXdab29tRmFjdG9yLCB0cnVlKTsKLX0KLQot
LSAoTlNTdHJpbmcgKilzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW3NlbGYgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEZyb21TdHJpbmc6c3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6dHJ1ZV07Ci19Ci0KLS0g
KE5TU3RyaW5nICopc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6KEJPT0wpZm9yY2VVc2VyR2VzdHVyZQotewot
ICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICAKLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChzdHJpbmcsIGZvcmNlVXNlckdl
c3R1cmUpOwotCi0gICAgaWYgKCFtX2ZyYW1lKSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3Zl
ZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFnZS4KLSAgICAgICAgcmV0dXJuIEAiIjsKLQotICAgIC8v
IFRoaXMgYml6YXJyZSBzZXQgb2YgcnVsZXMgbWF0Y2hlcyBiZWhhdmlvciBmcm9tIFdlYktpdCBm
b3IgU2FmYXJpIDIuMC4KLSAgICAvLyBJZiB5b3UgZG9uJ3QgbGlrZSBpdCwgdXNlIC1bV2ViU2Ny
aXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0gb3IgCi0gICAgLy8gSlNFdmFsdWF0ZVNjcmlw
dCBpbnN0ZWFkLCBzaW5jZSB0aGV5IGhhdmUgbGVzcyBzdXJwcmlzaW5nIHNlbWFudGljcy4KLSAg
ICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LT5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LT5pc1N0cmlu
ZygpICYmICFyZXN1bHQtPmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBAIiI7Ci0KLSAgICBK
U0xvY2sgbG9jazsKLSAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC0+dG9TdHJpbmcobV9mcmFtZS0+
c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSkpOwotfQotCi0tIChO
U0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50
KCkpOwotICAgIEFTU0VSVChtX2ZyYW1lID09IG1fZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkp
OwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fZnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0
KHN0cmluZywgdHJ1ZSk7Ci0gICAgaWYgKCFyZXN1bHQpIC8vIEZJWE1FOiBwYXNzIGVycm9ycwot
ICAgICAgICByZXR1cm4gMDsKLSAgICBKU0xvY2sgbG9jazsKLSAgICByZXR1cm4gYWVEZXNjRnJv
bUpTVmFsdWUobV9mcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKSwgcmVzdWx0KTsKLX0KLQotLSAoTlNSZWN0KWNhcmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAq
KW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFm
ZmluaXR5Ci17Ci0gICAgcmV0dXJuIFtub2RlIF9ub2RlXS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0
KG9mZnNldCwgc3RhdGljX2Nhc3Q8RUFmZmluaXR5PihhZmZpbml0eSkpOwotfQotCi0tIChOU1Jl
Y3QpZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKLXsKLSAgIHJldHVybiBt
X2ZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShbcmFuZ2UgX3JhbmdlXSk7Ci19Ci0KLS0gKHZvaWQp
c2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKLXsKLSAgICBOU1JlY3Qg
cmFuZ2VSZWN0ID0gW3NlbGYgZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOyAgICAKLSAgICBO
b2RlICpzdGFydE5vZGUgPSBbW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBfbm9kZV07Ci0gICAgICAg
IAotICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAg
IFJlbmRlckxheWVyICpsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKQotICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RU
b1Zpc2libGUoZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBSZW5kZXJMYXllcjo6Z0FsaWdu
VG9FZGdlSWZOZWVkZWQsIFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7Ci0gICAg
fQotfQotCi0tIChOU1VSTCAqKWJhc2VVUkwKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+YmFzZVVSTCgpOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZ1dpdGhEYXRhOihOU0Rh
dGEgKilkYXRhCi17Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgVGV4dFJlc291cmNlRGVjb2Rl
ciogZGVjb2RlciA9IGRvYy0+ZGVjb2RlcigpOwotICAgIGlmICghZGVjb2RlcikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gZGVjb2Rlci0+ZW5jb2RpbmcoKS5kZWNvZGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Ci19
Ci0KLSsgKE5TU3RyaW5nICopc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29k
aW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lCi17Ci0gICAgV2ViQ29yZTo6VGV4
dEVuY29kaW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOwotICAgIGlmICghZW5jb2Rpbmcu
aXNWYWxpZCgpKQotICAgICAgICBlbmNvZGluZyA9IFdpbmRvd3NMYXRpbjFFbmNvZGluZygpOwot
ICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
W2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Ci19Ci0KLS0gKEJPT0wpbmVlZHNMYXlvdXQK
LXsKLSAgICByZXR1cm4gbV9mcmFtZS0+dmlldygpID8gbV9mcmFtZS0+dmlldygpLT5uZWVkc0xh
eW91dCgpIDogZmFsc2U7Ci19Ci0KLS0gKE5TU3RyaW5nICopcmVuZGVyVHJlZUFzRXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbgotewotICAgIHJldHVybiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fZnJh
bWUtPnJlbmRlcmVyKCkpOwotfQotCi0tICh2b2lkKXNldFNob3VsZENyZWF0ZVJlbmRlcmVyczoo
Qk9PTClmCi17Ci0gICAgX3Nob3VsZENyZWF0ZVJlbmRlcmVycyA9IGY7Ci19Ci0KLS0gKGlkKWFj
Y2Vzc2liaWxpdHlUcmVlCi17Ci0gICAgQVhPYmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJpbGl0
eSgpOwotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmll
dyAqPihtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoIXJvb3QpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0KHJvb3QpOwotfQotCi0tICh2b2lkKXNldEJhc2VCYWNrZ3JvdW5kQ29s
b3I6KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3IKLXsKLSAgICBpZiAobV9mcmFtZSAmJiBtX2Zy
YW1lLT52aWV3KCkpIHsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFti
YWNrZ3JvdW5kQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JT
cGFjZV0pOwotICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3Io
Y29sb3IpOwotICAgIH0KLX0KLQotLSAodm9pZClzZXREcmF3c0JhY2tncm91bmQ6KEJPT0wpZHJh
d3NCYWNrZ3JvdW5kCi17Ci0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+dmlldygpKQotICAg
ICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFRyYW5zcGFyZW50KCFkcmF3c0JhY2tncm91bmQpOwot
fQotCi0tIChET01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihTZWxlY3Rp
b25Db250cm9sbGVyOjpFRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooVGV4dEdyYW51
bGFyaXR5KWdyYW51bGFyaXR5Ci17Ci0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xs
ZXIoKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBTZWxlY3Rpb25Db250
cm9sbGVyIHNlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgc2VsZWN0aW9uQ29udHJvbGxlci5zZXRT
ZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24oKSk7Ci0g
ICAgc2VsZWN0aW9uQ29udHJvbGxlci5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfd3JhcFJhbmdlOnNlbGVjdGlvbkNvbnRy
b2xsZXIudG9SYW5nZSgpLmdldCgpXTsKLX0KLQotLSAoVGV4dEdyYW51bGFyaXR5KXNlbGVjdGlv
bkdyYW51bGFyaXR5Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5
KCk7Ci19Ci0KLS0gKE5TUmFuZ2UpY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQotewot
ICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQotICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0KLSAgICBFbGVtZW50KiBzZWxlY3Rpb25S
b290ID0gbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5yb290RWRpdGFibGVFbGVtZW50
KCk7Ci0gICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6
IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwotICAgIAotICAgIC8vIE1v
dXNlIGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2Ug
Zm9yIGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUg
Y3VycmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHBy
b2R1Y2UKLSAgICAvLyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRv
IHN1Y2ggcmVxdWVzdHMuCi0gICAgaWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3Bl
ICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAg
ICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgaWYocmFuZ2UtPmVu
ZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCktPmlzRGVzY2Vu
ZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29w
ZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+
c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9
PSBzY29wZSk7Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHRlc3RSYW5nZS5nZXQoKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRlc3RS
YW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBl
Yyk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0g
ICAgaW50IGVuZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2Uu
Z2V0KCkpOwotCi0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uIC0gc3RhcnRQb3NpdGlvbik7Ci19Ci0KLS0gKFBhc3NSZWZQdHI8UmFuZ2U+KWNvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKLXsKLSAgICBpZiAobnNyYW5nZS5sb2NhdGlvbiA+
IElOVF9NQVgpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChuc3JhbmdlLmxlbmd0aCA+IElO
VF9NQVggfHwgbnNyYW5nZS5sb2NhdGlvbiArIG5zcmFuZ2UubGVuZ3RoID4gSU5UX01BWCkKLSAg
ICAgICAgbnNyYW5nZS5sZW5ndGggPSBJTlRfTUFYIC0gbnNyYW5nZS5sb2NhdGlvbjsKLQotICAg
IC8vIG91ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgYXJlIG9ubHkgY2FsbGVkIGJ5
IGlucHV0IG1ldGhvZHMgdGhhdAotICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBj
b250YWluaW5nIHRoZSBzZWxlY3Rpb24KLSAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVz
ZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QK
LSAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBzZXJpYWxpemF0aW9uIGlz
IHByb2JsZW1hdGljLiBPdXIgc29sdXRpb24gaXMKLSAgICAvLyB0byB1c2UgdGhlIHJvb3QgZWRp
dGFibGUgZWxlbWVudCBvZiB0aGUgc2VsZWN0aW9uIHN0YXJ0IGFzIHRoZSBwb3NpdGlvbmFsIGJh
c2UuCi0gICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250
ZXh0LgotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db250
cm9sbGVyKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBzY29wZSA9IHNl
bGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoc2NvcGUsIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKLX0KLQot
LSAoRE9NUmFuZ2UgKiljb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQot
ewotICAgIHJldHVybiBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpbc2VsZiBjb252ZXJ0VG9ET01SYW5n
ZTpuc3JhbmdlXS5nZXQoKV07Ci19Ci0KLS0gKE5TUmFuZ2UpY29udmVydERPTVJhbmdlVG9OU1Jh
bmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRUb05TUmFu
Z2U6W3JhbmdlIF9yYW5nZV1dOwotfQotCi0tICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2Up
cmFuZ2UKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IGRvbVJhbmdlID0gW3NlbGYgY29udmVydFRvRE9N
UmFuZ2U6cmFuZ2VdOwotICAgIGlmIChkb21SYW5nZSkKLSAgICAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uQ29udHJvbGxlcigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKGRvbVJhbmdlLmdldCgpLCBT
RUxfREVGQVVMVF9BRkZJTklUWSkpOwotfQotCi0tIChOU1JhbmdlKXNlbGVjdGVkTlNSYW5nZQot
ewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0VG9OU1JhbmdlOm1fZnJhbWUtPnNlbGVjdGlvbkNv
bnRyb2xsZXIoKS0+dG9SYW5nZSgpLmdldCgpXTsKLX0KLQotLSAoRE9NUmFuZ2UgKiltYXJrRE9N
UmFuZ2UKLXsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6bV9mcmFtZS0+bWFyaygp
LnRvUmFuZ2UoKS5nZXQoKV07Ci19Ci0KLS0gKE5TUmFuZ2UpbWFya2VkVGV4dE5TUmFuZ2UKLXsK
LSAgICByZXR1cm4gW3NlbGYgY29udmVydFRvTlNSYW5nZTptX2ZyYW1lLT5lZGl0b3IoKS0+Y29t
cG9zaXRpb25SYW5nZSgpLmdldCgpXTsKLX0KLQotLy8gR2l2ZW4gcHJvcG9zZWRSYW5nZSwgcmV0
dXJucyBhbiBleHRlbmRlZCByYW5nZSB0aGF0IGluY2x1ZGVzIGFkamFjZW50IHdoaXRlc3BhY2Ug
dGhhdCBzaG91bGQKLS8vIGJlIGRlbGV0ZWQgYWxvbmcgd2l0aCB0aGUgcHJvcG9zZWQgcmFuZ2Ug
aW4gb3JkZXIgdG8gcHJlc2VydmUgcHJvcGVyIHNwYWNpbmcgYW5kIHB1bmN0dWF0aW9uIG9mCi0v
LyB0aGUgdGV4dCBzdXJyb3VuZGluZyB0aGUgZGVsZXRpb24uCi0tIChET01SYW5nZSAqKXNtYXJ0
RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UKLXsK
LSAgICBOb2RlICpzdGFydENvbnRhaW5lciA9IFtbcHJvcG9zZWRSYW5nZSBzdGFydENvbnRhaW5l
cl0gX25vZGVdOwotICAgIE5vZGUgKmVuZENvbnRhaW5lciA9IFtbcHJvcG9zZWRSYW5nZSBlbmRD
b250YWluZXJdIF9ub2RlXTsKLSAgICBpZiAoc3RhcnRDb250YWluZXIgPT0gbmlsIHx8IGVuZENv
bnRhaW5lciA9PSBuaWwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBBU1NFUlQoc3RhcnRD
b250YWluZXItPmRvY3VtZW50KCkgPT0gZW5kQ29udGFpbmVyLT5kb2N1bWVudCgpKTsKLSAgICAK
LSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKLQotICAgIFBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcHJvcG9zZWRS
YW5nZSBzdGFydE9mZnNldF0pOwotICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWluZXIsIFtwcm9w
b3NlZFJhbmdlIGVuZE9mZnNldF0pOwotICAgIFBvc2l0aW9uIG5ld1N0YXJ0ID0gc3RhcnQudXBz
dHJlYW0oKS5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKERPV05TVFJFQU0sIHRydWUpOwotICAg
IGlmIChuZXdTdGFydC5pc051bGwoKSkKLSAgICAgICAgbmV3U3RhcnQgPSBzdGFydDsKLSAgICBQ
b3NpdGlvbiBuZXdFbmQgPSBlbmQuZG93bnN0cmVhbSgpLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0
aW9uKERPV05TVFJFQU0sIHRydWUpOwotICAgIGlmIChuZXdFbmQuaXNOdWxsKCkpCi0gICAgICAg
IG5ld0VuZCA9IGVuZDsKLQotICAgIG5ld1N0YXJ0ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50
KG5ld1N0YXJ0KTsKLSAgICBuZXdFbmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobmV3RW5k
KTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOwotICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChu
ZXdTdGFydC5ub2RlKCksIG5ld1N0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOwotICAgIHJhbmdl
LT5zZXRFbmQobmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsK
LSAgICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6cmFuZ2UuZ2V0KCldOwotfQotCi0vLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBhZGRlZCBhcm91bmQgYVN0
cmluZyB0byBwcmVzZXJ2ZSBwcm9wZXIgc3BhY2luZyBhbmQKLS8vIHB1bmN0dWF0aW9uIHdoZW4g
aXTigJlzIGluc2VydGVkIGludG8gdGhlIHJlY2VpdmVy4oCZcyB0ZXh0IG92ZXIgY2hhclJhbmdl
LiBSZXR1cm5zIGJ5IHJlZmVyZW5jZQotLy8gaW4gYmVmb3JlU3RyaW5nIGFuZCBhZnRlclN0cmlu
ZyBhbnkgd2hpdGVzcGFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCwgdW5sZXNzIGVpdGhlciBvciBi
b3RoIGFyZQotLy8gbmlsLiBCb3RoIGFyZSByZXR1cm5lZCBhcyBuaWwgaWYgYVN0cmluZyBpcyBu
aWwgb3IgaWYgc21hcnQgaW5zZXJ0aW9uIGFuZCBkZWxldGlvbiBhcmUgZGlzYWJsZWQuCi0tICh2
b2lkKXNtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2lu
Z1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcg
KiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZwotewot
ICAgIC8vIGdpdmUgYmFjayBuaWwgcG9pbnRlcnMgaW4gY2FzZSBvZiBlYXJseSByZXR1cm5zCi0g
ICAgaWYgKGJlZm9yZVN0cmluZykKLSAgICAgICAgKmJlZm9yZVN0cmluZyA9IG5pbDsKLSAgICBp
ZiAoYWZ0ZXJTdHJpbmcpCi0gICAgICAgICphZnRlclN0cmluZyA9IG5pbDsKLSAgICAgICAgCi0g
ICAgLy8gaW5zcGVjdCBkZXN0aW5hdGlvbgotICAgIE5vZGUgKnN0YXJ0Q29udGFpbmVyID0gW1ty
YW5nZVRvUmVwbGFjZSBzdGFydENvbnRhaW5lcl0gX25vZGVdOwotICAgIE5vZGUgKmVuZENvbnRh
aW5lciA9IFtbcmFuZ2VUb1JlcGxhY2UgZW5kQ29udGFpbmVyXSBfbm9kZV07Ci0KLSAgICBQb3Np
dGlvbiBzdGFydFBvcyhzdGFydENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIHN0YXJ0T2Zmc2V0
XSk7Ci0gICAgUG9zaXRpb24gZW5kUG9zKGVuZENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIGVu
ZE9mZnNldF0pOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyA9IFZpc2li
bGVQb3NpdGlvbihzdGFydFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oZW5kUG9zLCBWUF9ERUZBVUxU
X0FGRklOSVRZKTsKLSAgICAKLSAgICAvLyB0aGlzIGNoZWNrIGFsc28gZW5zdXJlcyBzdGFydENv
bnRhaW5lciwgc3RhcnRQb3MsIGVuZENvbnRhaW5lciwgYW5kIGVuZFBvcyBhcmUgbm9uLW51bGwK
LSAgICBpZiAoc3RhcnRWaXNpYmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYWRkTGVhZGluZ1NwYWNlID0gc3RhcnRQ
b3MubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlKS5p
c051bGwoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0VmlzaWJsZVBvcyk7Ci0gICAgaWYg
KGFkZExlYWRpbmdTcGFjZSkKLSAgICAgICAgaWYgKFVDaGFyIHByZXZpb3VzQ2hhciA9IHN0YXJ0
VmlzaWJsZVBvcy5wcmV2aW91cygpLmNoYXJhY3RlckFmdGVyKCkpCi0gICAgICAgICAgICBhZGRM
ZWFkaW5nU3BhY2UgPSAhaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXNDaGFy
LCB0cnVlKTsKLSAgICAKLSAgICBib29sIGFkZFRyYWlsaW5nU3BhY2UgPSBlbmRQb3MudHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkg
JiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kVmlzaWJsZVBvcyk7Ci0gICAgaWYgKGFkZFRyYWlsaW5n
U3BhY2UpCi0gICAgICAgIGlmIChVQ2hhciB0aGlzQ2hhciA9IGVuZFZpc2libGVQb3MuY2hhcmFj
dGVyQWZ0ZXIoKSkKLSAgICAgICAgICAgIGFkZFRyYWlsaW5nU3BhY2UgPSAhaXNDaGFyYWN0ZXJT
bWFydFJlcGxhY2VFeGVtcHQodGhpc0NoYXIsIGZhbHNlKTsKLSAgICAKLSAgICAvLyBpbnNwZWN0
IHNvdXJjZQotICAgIGJvb2wgaGFzV2hpdGVzcGFjZUF0U3RhcnQgPSBmYWxzZTsKLSAgICBib29s
IGhhc1doaXRlc3BhY2VBdEVuZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIHBhc3RlTGVuZ3RoID0g
W3Bhc3RlU3RyaW5nIGxlbmd0aF07Ci0gICAgaWYgKHBhc3RlTGVuZ3RoID4gMCkgewotICAgICAg
ICBOU0NoYXJhY3RlclNldCAqd2hpdGVTZXQgPSBbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFu
ZE5ld2xpbmVDaGFyYWN0ZXJTZXRdOwotICAgICAgICAKLSAgICAgICAgaWYgKFt3aGl0ZVNldCBj
aGFyYWN0ZXJJc01lbWJlcjpbcGFzdGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDowXV0pIHsKLSAg
ICAgICAgICAgIGhhc1doaXRlc3BhY2VBdFN0YXJ0ID0gWUVTOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChbd2hpdGVTZXQgY2hhcmFjdGVySXNNZW1iZXI6W3Bhc3RlU3RyaW5nIGNoYXJhY3RlckF0
SW5kZXg6KHBhc3RlTGVuZ3RoIC0gMSldXSkgewotICAgICAgICAgICAgaGFzV2hpdGVzcGFjZUF0
RW5kID0gWUVTOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIGlzc3VlIHRoZSB2ZXJk
aWN0Ci0gICAgaWYgKGJlZm9yZVN0cmluZyAmJiBhZGRMZWFkaW5nU3BhY2UgJiYgIWhhc1doaXRl
c3BhY2VBdFN0YXJ0KQotICAgICAgICAqYmVmb3JlU3RyaW5nID0gQCIgIjsKLSAgICBpZiAoYWZ0
ZXJTdHJpbmcgJiYgYWRkVHJhaWxpbmdTcGFjZSAmJiAhaGFzV2hpdGVzcGFjZUF0RW5kKQotICAg
ICAgICAqYWZ0ZXJTdHJpbmcgPSBAIiAiOwotfQotCi0tIChET01Eb2N1bWVudEZyYWdtZW50ICop
ZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5n
IGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAKLXsKLSAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF93cmFwRG9jdW1lbnRGcmFnbWVudDpjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAobV9mcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBiYXNl
VVJMU3RyaW5nKS5nZXQoKV07Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilkb2N1bWVu
dEZyYWdtZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBpbkNvbnRleHQ6KERPTVJhbmdlICop
Y29udGV4dAotewotICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBfd3JhcERvY3VtZW50
RnJhZ21lbnQ6Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChbY29udGV4dCBfcmFuZ2VdLCB0ZXh0KS5n
ZXQoKV07Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilkb2N1bWVudEZyYWdtZW50V2l0
aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXMKLXsKLSAgICBpZiAoIW1fZnJhbWUg
fHwgIW1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIE5T
RW51bWVyYXRvciAqbm9kZUVudW0gPSBbbm9kZXMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgVmVj
dG9yPE5vZGUqPiBub2Rlc1ZlY3RvcjsKLSAgICBET01Ob2RlICpub2RlOwotICAgIHdoaWxlICgo
bm9kZSA9IFtub2RlRW51bSBuZXh0T2JqZWN0XSkpCi0gICAgICAgIG5vZGVzVmVjdG9yLmFwcGVu
ZChbbm9kZSBfbm9kZV0pOwotICAgIAotICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBf
d3JhcERvY3VtZW50RnJhZ21lbnQ6Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMobV9mcmFtZS0+ZG9j
dW1lbnQoKSwgbm9kZXNWZWN0b3IpLmdldCgpXTsKLX0KLQotLSAodm9pZClyZXBsYWNlU2VsZWN0
aW9uV2l0aEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgc2VsZWN0UmVw
bGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0
UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUKLXsKLSAgICBpZiAobV9mcmFtZS0+
c2VsZWN0aW9uQ29udHJvbGxlcigpLT5pc05vbmUoKSB8fCAhZnJhZ21lbnQpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBhcHBseUNvbW1hbmQobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
KG1fZnJhbWUtPmRvY3VtZW50KCksIFtmcmFnbWVudCBfZG9jdW1lbnRGcmFnbWVudF0sIHNlbGVj
dFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpKTsKLSAgICBtX2ZyYW1lLT5y
ZXZlYWxTZWxlY3Rpb24oUmVuZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsKLX0KLQot
LSAodm9pZClyZXBsYWNlU2VsZWN0aW9uV2l0aE5vZGU6KERPTU5vZGUgKilub2RlIHNlbGVjdFJl
cGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFy
dFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCi17Ci0gICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBbRE9NRG9jdW1lbnRGcmFnbWVudCBfd3JhcERvY3VtZW50RnJh
Z21lbnQ6bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmdldCgp
XTsKLSAgICBbZnJhZ21lbnQgYXBwZW5kQ2hpbGQ6bm9kZV07Ci0gICAgW3NlbGYgcmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBs
YWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07
Ci19Ci0KLS0gKHZvaWQpcmVwbGFjZVNlbGVjdGlvbldpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5n
ICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyBz
ZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJP
T0wpc21hcnRSZXBsYWNlCi17Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBb
c2VsZiBkb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzptYXJrdXBTdHJpbmcgYmFzZVVS
TFN0cmluZzpiYXNlVVJMU3RyaW5nXTsKLSAgICBbc2VsZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0
UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpOT107Ci19Ci0KLS0gKHZvaWQpcmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJP
T0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQotewot
ICAgIFtzZWxmIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6W3NlbGYgZG9jdW1lbnRGcmFn
bWVudFdpdGhUZXh0OnRleHQKLSAgICAgICAgaW5Db250ZXh0OltET01SYW5nZSBfd3JhcFJhbmdl
Om1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+dG9SYW5nZSgpLmdldCgpXV0KLSAgICAg
ICAgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0
UmVwbGFjZSBtYXRjaFN0eWxlOllFU107Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9ySW5RdW90ZWRDb250ZW50Ci17Ci0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRy
b2xsZXIoKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBUeXBpbmdDb21t
YW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQobV9mcmFtZS0+ZG9j
dW1lbnQoKSk7Ci0gICAgbV9mcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVyOjpnQWxp
Z25Ub0VkZ2VJZk5lZWRlZCk7Ci19Ci0KLS0gKFZpc2libGVQb3NpdGlvbilfdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBJbnRQb2ludCBvdXRlclBvaW50KHBv
aW50KTsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oaXRUZXN0UmVzdWx0QXRQb2ludChvdXRlclBvaW50LCB0cnVlKTsKLSAgICBOb2RlKiBub2Rl
ID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5k
ZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IHJlbmRlcmVyLT5wb3NpdGlv
bkZvckNvb3JkaW5hdGVzKHJlc3VsdC5sb2NhbFBvaW50KCkueCgpLCByZXN1bHQubG9jYWxQb2lu
dCgpLnkoKSk7Ci0gICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHZpc2libGVQ
b3MgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgMCkpOwotICAgIHJldHVybiB2aXNp
YmxlUG9zOwotfQotCi0tIChET01SYW5nZSAqKWNoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2lu
dClwb2ludAotewotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxl
UG9zaXRpb25Gb3JQb2ludDpwb2ludF07Ci0gICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHBv
c2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgaWYgKHByZXZpb3VzLmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgIERPTVJhbmdlICpwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gW0RPTVJhbmdlIF93cmFwUmFu
Z2U6bWFrZVJhbmdlKHByZXZpb3VzLCBwb3NpdGlvbikuZ2V0KCldOwotICAgICAgICBOU1JlY3Qg
cmVjdCA9IFtzZWxmIGZpcnN0UmVjdEZvckRPTVJhbmdlOnByZXZpb3VzQ2hhcmFjdGVyUmFuZ2Vd
OwotICAgICAgICBpZiAoTlNQb2ludEluUmVjdChwb2ludCwgcmVjdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsKLSAgICB9Ci0KLSAgICBWaXNpYmxlUG9zaXRp
b24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKLSAgICBpZiAobmV4dC5pc05vdE51bGwoKSkgewot
ICAgICAgICBET01SYW5nZSAqbmV4dENoYXJhY3RlclJhbmdlID0gW0RPTVJhbmdlIF93cmFwUmFu
Z2U6bWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KS5nZXQoKV07Ci0gICAgICAgIE5TUmVjdCByZWN0
ID0gW3NlbGYgZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6bmV4dENoYXJhY3RlclJhbmdlXTsKLSAgICAg
ICAgaWYgKE5TUG9pbnRJblJlY3QocG9pbnQsIHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIG5l
eHRDaGFyYWN0ZXJSYW5nZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXR5cGluZ1N0eWxlCi17Ci0gICAgaWYgKCFtX2ZyYW1l
IHx8ICFtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiBbRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBfd3JhcENTU1N0eWxlRGVjbGFyYXRpb246bV9m
cmFtZS0+dHlwaW5nU3R5bGUoKS0+Y29weSgpLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRUeXBp
bmdTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihF
ZGl0QWN0aW9uKXVuZG9BY3Rpb24KLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2ZyYW1lLT5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoW3N0eWxlIF9DU1NTdHls
ZURlY2xhcmF0aW9uXSwgdW5kb0FjdGlvbik7Ci19Ci0KLS0gKE5TRm9udCAqKWZvbnRGb3JTZWxl
Y3Rpb246KEJPT0wgKiloYXNNdWx0aXBsZUZvbnRzCi17Ci0gICAgYm9vbCBtdWx0aXBsZUZvbnRz
ID0gZmFsc2U7Ci0gICAgTlNGb250ICpmb250ID0gbmlsOwotICAgIGlmIChtX2ZyYW1lKSB7Ci0g
ICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmZCA9IG1fZnJhbWUtPmVkaXRvcigpLT5mb250
Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpOwotICAgICAgICBpZiAoZmQpCi0gICAgICAgICAg
ICBmb250ID0gZmQtPmdldE5TRm9udCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaGFzTXVsdGlw
bGVGb250cykKLSAgICAgICAgKmhhc011bHRpcGxlRm9udHMgPSBtdWx0aXBsZUZvbnRzOwotICAg
IHJldHVybiBmb250OwotfQotCi0tICh2b2lkKWRyYWdTb3VyY2VNb3ZlZFRvOihOU1BvaW50KXdp
bmRvd0xvYwotewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJl
dHVybjsKLSAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJlLCBi
dXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCi0gICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywgW3Zp
ZXctPmdldFZpZXcoKSB3aW5kb3ddKSwKLSAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1v
dmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7Ci0gICAg
bV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VNb3ZlZFRvKGV2ZW50KTsKLX0KLQot
LSAodm9pZClkcmFnU291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihO
U0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICgh
dmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFrZSBtb2Rp
ZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVhZC4KLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwgZ2xvYmFsUG9p
bnQod2luZG93TG9jLCBbdmlldy0+Z2V0VmlldygpIHdpbmRvd10pLAotICAgICAgICBMZWZ0QnV0
dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJy
ZW50VGltZSgpKTsKLSAgICBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVk
QXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7Ci19Ci0KLS0gKEJPT0wpZ2V0RGF0
YTooTlNEYXRhICoqKWRhdGEgYW5kUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKiopcmVzcG9uc2Ug
Zm9yVVJMOihOU1N0cmluZyAqKXVybAotewotICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBkb2MtPmRvY0xvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1
cmwpOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIFNoYXJl
ZEJ1ZmZlciogYnVmZmVyID0gcmVzb3VyY2UtPmRhdGEoKTsKLSAgICBpZiAoYnVmZmVyKQotICAg
ICAgICAqZGF0YSA9IFtidWZmZXItPmNyZWF0ZU5TRGF0YSgpIGF1dG9yZWxlYXNlXTsKLSAgICBl
bHNlCi0gICAgICAgICpkYXRhID0gbmlsOwotCi0gICAgKnJlc3BvbnNlID0gcmVzb3VyY2UtPnJl
c3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZvaWQp
Z2V0QWxsUmVzb3VyY2VEYXRhczooTlNBcnJheSAqKilkYXRhcyBhbmRSZXNwb25zZXM6KE5TQXJy
YXkgKiopcmVzcG9uc2VzCi17Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2MpIHsKLSAgICAgICAgTlNBcnJheSogZW1wdHlBcnJheSA9IFtOU0Fy
cmF5IGFycmF5XTsKLSAgICAgICAgKmRhdGFzID0gZW1wdHlBcnJheTsKLSAgICAgICAgKnJlc3Bv
bnNlcyA9IGVtcHR5QXJyYXk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBI
YXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPiYgYWxsUmVzb3VyY2VzID0gZG9jLT5kb2NM
b2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7Ci0KLSAgICBOU011dGFibGVBcnJheSAqZCA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YWxsUmVzb3VyY2VzLnNp
emUoKV07Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnIgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmFsbFJlc291cmNlcy5zaXplKCldOwotCi0gICAgSGFzaE1hcDxTdHJp
bmcsIENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5l
bmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgU2hhcmVkQnVmZmVyKiBidWZmZXIgPSBpdC0+c2Vjb25kLT5kYXRhKCk7Ci0gICAgICAg
IE5TRGF0YSAqZGF0YTsKLSAgICAgICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgICAgIGRhdGEgPSBi
dWZmZXItPmNyZWF0ZU5TRGF0YSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhID0g
W1tOU0RhdGEgYWxsb2NdIGluaXRdOwotICAgICAgICBbZCBhZGRPYmplY3Q6ZGF0YV07Ci0gICAg
ICAgIFtkYXRhIHJlbGVhc2VdOwotICAgICAgICBbciBhZGRPYmplY3Q6aXQtPnNlY29uZC0+cmVz
cG9uc2UoKS5uc1VSTFJlc3BvbnNlKCldOwotICAgIH0KLQotICAgICpkYXRhcyA9IFtkIGF1dG9y
ZWxlYXNlXTsKLSAgICAqcmVzcG9uc2VzID0gW3IgYXV0b3JlbGVhc2VdOwotfQotCi0tIChCT09M
KWNhblByb3ZpZGVEb2N1bWVudFNvdXJjZQotewotICAgIFN0cmluZyBtaW1lVHlwZSA9IG1fZnJh
bWUtPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCk7Ci0gICAgCi0gICAgaWYgKFdlYkNvcmU6
OkRPTUltcGxlbWVudGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKLSAgICAgICAg
SW1hZ2U6OnN1cHBvcnRzVHlwZShtaW1lVHlwZSkgfHwKLSAgICAgICAgKG1fZnJhbWUtPnBhZ2Uo
KSAmJiBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1l
VHlwZSkpKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAoQk9PTCljYW5TYXZlQXNXZWJBcmNoaXZlCi17Ci0gICAgLy8gQ3VycmVudGx5LCBhbGwgZG9j
dW1lbnRzIHRoYXQgd2UgY2FuIHZpZXcgc291cmNlIGZvcgotICAgIC8vIChIVE1MIGFuZCBYTUwg
ZG9jdW1lbnRzKSBjYW4gYWxzbyBiZSBzYXZlZCBhcyB3ZWIgYXJjaGl2ZXMKLSAgICByZXR1cm4g
W3NlbGYgY2FuUHJvdmlkZURvY3VtZW50U291cmNlXTsKLX0KLQotLSAodm9pZClyZWNlaXZlZERh
dGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2Rp
bmdOYW1lCi17Ci0gICAgLy8gU2V0IHRoZSBlbmNvZGluZy4gVGhpcyBvbmx5IG5lZWRzIHRvIGJl
IGRvbmUgb25jZSwgYnV0IGl0J3MgaGFybWxlc3MgdG8gZG8gaXQgYWdhaW4gbGF0ZXIuCi0gICAg
U3RyaW5nIGVuY29kaW5nOwotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBlbmNvZGluZyA9IG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCk7Ci0g
ICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNvZGlu
Zy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSB0ZXh0RW5jb2RpbmdOYW1lOwotICAgIG1f
ZnJhbWUtPmxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7Ci0gICAg
W3NlbGYgYWRkRGF0YTpkYXRhXTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tICh2
b2lkKXNldFdlYkNvcmVGcmFtZTooRnJhbWUqKXdlYkNvcmVGcmFtZQotewotICAgIG1fZnJhbWUg
PSB3ZWJDb3JlRnJhbWU7Ci19Ci0KLS0gKEZyYW1lKilfZnJhbWUKLXsKLSAgICByZXR1cm4gbV9m
cmFtZTsKLX0KLQotQGVuZApJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0wMy0xMiAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY0MAor
ICAgICAgICAgIGVsaW1pbmF0ZSBXZWJDb3JlRnJhbWVCcmlkZ2UKKworICAgICAgICAqIFN0cmlu
Z3NOb3RUb0JlTG9jYWxpemVkLnR4dDogVXBkYXRlZCBmb3IgcmVjZW50IGNoYW5nZXMuCisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlbW92ZWQgV2ViRnJhbWVC
cmlkZ2UuaCBhbmQgV2ViRnJhbWVCcmlkZ2UubW0uCisKIDIwMDgtMDMtMTEgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycy4KSW5kZXg6
IFdlYktpdC9TdHJpbmdzTm90VG9CZUxvY2FsaXplZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L1N0cmluZ3NOb3RUb0JlTG9jYWxpemVkLnR4dAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQv
U3RyaW5nc05vdFRvQmVMb2NhbGl6ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3
IEBACiAiMTgwMCIKICIxcHgiCiAiMiIKKyIzLjEiCiAiM0RCRDg5RUItQ0VGQi00ZGRiLThEMUEt
NUJFNDdFRDRFOTI5IgogIjQyMCsiCiAiNUNBQ0Q2MzctRjgyRi00OTFGLTk0N0EtNURDQTM4QUEw
RkVBIgpAQCAtOTYsMTEgKzk3LDExIEBACiAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0
eXBlIgogIkFwcGxlS2V5Ym9hcmRVSU1vZGUiCiAiQXBwbGVMYW5ndWFnZXMiCisiQXBwbGVUZXh0
RGlyZWN0aW9uIgogIkJFR0lOOlZDQUxFTkRBUiIKICJCRUdJTjpWQ0FSRCIKICJCUF9DcmVhdGVQ
bHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyIKICJDU1MiCi0iQ2FjaGUtQ29udHJvbCIKICJDb250
ZW50LUVuY29kaW5nIgogIkNvbnRlbnQtTGVuZ3RoIgogIkNvbnRlbnQtVHlwZSIKQEAgLTEzNiw2
ICsxMzcsNyBAQAogIkluc2VydEJhY2t0YWIiCiAiSW5zZXJ0TmV3bGluZSIKICJJbnNlcnRUYWIi
CisiSW5zcGVjdG9yTG9jYWxpemVkU3RyaW5ncyIKICJJbnRlbCIKICJKYXZhU2NyaXB0IgogIkpv
eSFwZWZmIgpAQCAtMTc0LDYgKzE3Niw3IEBACiAiTlBfSW5pdGlhbGl6ZSIKICJOUF9TaHV0ZG93
biIKICJOU0FsbG93Q29udGludW91c1NwZWxsQ2hlY2tpbmciCisiTlNBbGxvd3NCYXNlV3JpdGlu
Z0RpcmVjdGlvbktleUJpbmRpbmdzIgogIk5TQXBwbGljYXRpb25JY29uIgogIk5TQ2FyYm9uV2lu
ZG93IgogIk5TRXJyb3JGYWlsaW5nVVJMS2V5IgpAQCAtMTgxLDYgKzE4NCw4IEBACiAiTlNFdmVu
dCIKICJOU1ZpZXciCiAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJkIHR5cGUiCisiT2xkTWFp
blRocmVhZFduZENsYXNzIgorIk9sZU1haW5UaHJlYWRXbmROYW1lIgogIlBERkRvY3VtZW50Igog
IlBERlByZXZpZXdWaWV3IgogIlBERlZpZXciCkBAIC0yNTMsNiArMjU4LDcgQEAKICJXZWJJY29u
RGF0YWJhc2VWZXJzaW9uIgogIldlYkljb25Ob3RpZmljYXRpb25Vc2VySW5mb1VSTEtleSIKICJX
ZWJJbnNwZWN0b3JQb2ludGVyIgorIldlYkluc3BlY3RvclByZWZlcmVuY2VzIgogIldlYkluc3Bl
Y3RvcldpbmRvd0NsYXNzIgogIldlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbCIKICJXZWJLaXRF
cnJvckRvbWFpbiIKQEAgLTMzNCw2ICszNDAsNyBAQAogIlwwIgogIlxcIgogIlxcU3RyaW5nRmls
ZUluZm9cXCUwNHglMDR4XFxQcm9kdWN0VmVyc2lvbiIKKyJcXFN0cmluZ0ZpbGVJbmZvXFwwNDA5
MDRiMFxcUHJvZHVjdFZlcnNpb24iCiAiXFxWYXJGaWxlSW5mb1xcVHJhbnNsYXRpb24iCiAiXFxX
ZWJLaXQucmVzb3VyY2VzIgogIlxuICAgICAgICAiCkBAIC0zNDcsNyArMzU0LDYgQEAKICJhIgog
ImFiIgogImFib3V0OiIKLSJhYm91dDpibGFuayIKICJhcHBsZXdlYmRhdGEiCiAiYXBwbGV3ZWJk
YXRhOi8vJUAiCiAiYXBwbGljYXRpb24vYXRvbSt4bWwiCkBAIC0zOTgsNiArNDA0LDcgQEAKICJk
b2N0eXBlIgogImVuIgogImVzdGltYXRlZFByb2dyZXNzIgorImV2YWwiCiAiZmlsZToiCiAiZnRw
OiIKICJodG0iCkBAIC00MTQsMzAgKzQyMSwzMiBAQAogImltYWdlL3RpZmYiCiAiaW1nIgogImlu
c2VydFRleHQ6IgorImluc3BlY3Rvci9JbWFnZXMiCiAiaXNMb2FkaW5nIgogImlzaW5kZXgiCiAi
amF2YXNjcmlwdDoiCisianMiCiAibGFzdFZpc2l0ZWREYXRlIgogImxpbmUtdGhyb3VnaCIKICJs
aW5lTnVtYmVyIgogImxvY2FsaG9zdCIKICJsb2NhbGl6ZWQgc3RyaW5nIG5vdCBmb3VuZCIKICJs
cHJvaiIKKyJsdHIiCiAibWFpbHRvOiIKICJtYWluRnJhbWVEb2N1bWVudCIKICJtYWluRnJhbWVJ
Y29uIgogIm1haW5GcmFtZVRpdGxlIgogIm1haW5GcmFtZVVSTCIKLSJtdXN0LXJldmFsaWRhdGUi
CiAibmFtZTogJUBcbnBhdGg6ICVAXG5taW1lVHlwZXM6XG4lQFxucGx1Z2luRGVzY3JpcHRpb246
JUAiCiAibnVsbHBsdWdpbiIKICJwbHVnaW5zcGFnZSIKICJwbmciCi0icHJveHktcmV2YWxpZGF0
ZSIKICJyIgogInIrYiIKICJyZ2IoJS4wZiwlLjBmLCUuMGYpIgogInJnYmEoJS4wZiwlLjBmLCUu
MGYsJWYpIgorInJ0bCIKICJzIgogInNvdXJjZVVSTCIKICJzcmMiCkBAIC00NzAsNiArNDc5LDcg
QEAKICJ4IgogIngtYXBwbGUtd2ViLWtpdC8iCiAieG1sIgorIntBMzY3NjM5OC00NDg1LTRhOWQt
ODdEQy1DQjVBNDBFNjM1MUR9IgogIn4vTGlicmFyeS9JY29ucyIKICJ+L0xpYnJhcnkvV2ViS2l0
L0RhdGFiYXNlcyIKIFdlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06ImJhY2tncm91
bmQiCkBAIC01MTAsMTMgKzUyMCwxMCBAQCBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVuCiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToi
RG93biIKIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOiJFbnRl
ciIKIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOiJVcCIKLVdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06ImhlaWdodCIKLVdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UubW06IndpZHRoIgotV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06Ikluc3BlY3RvckxvY2FsaXpl
ZFN0cmluZ3MiCitXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tOiJoZWlnaHQiCitXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tOiJ3aWR0aCIKIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tOiJXZWIgSW5zcGVjdG9yIDIiCiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbToiaW5zcGVjdG9yIgotV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQubW06Imluc3BlY3Rvci9JbWFnZXMiCi1XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToianMiCiBXZWJLaXQvbWFjL1dlYkluc3Bl
Y3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tOiJkaXNwbGF5IgogV2ViS2l0L21hYy9XZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubToiaW5saW5lIgogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tOiInJUAnIgpAQCAtNTM1LDYgKzU0Miw4IEBAIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbToibWVudSIKIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbToibm9uZSIKIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbToibm9ybWFsIgog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOiJvYmplY3QiCitXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW06InByaW50IgorV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOiJzY3JlZW4iCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW06InN0cmlr
ZSIKIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbToic3R5bGUiCiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW06InN1cGVyIgpAQCAtNTU0LDkgKzU2Myw2IEBAIFdlYktp
dC93aW4vV2ViQ2FjaGUuY3BwOiJzY3JpcHRzIgogV2ViS2l0L3dpbi9XZWJDYWNoZS5jcHA6InN0
eWxlIHNoZWV0cyIKIFdlYktpdC93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcDoiRGF0YWJhc2Vz
IgogV2ViS2l0L3dpbi9XZWJIaXN0b3J5SXRlbS5jcHA6InRpdGxlIgotV2ViS2l0L3dpbi9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwOiJXZWIgSW5zcGVjdG9yICIKLVdlYktpdC93aW4vV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcDoiV2ViIEluc3BlY3RvciIKLVdlYktpdC93aW4vV2ViSW5zcGVjdG9yQ2xp
ZW50LmNwcDoiaW5zcGVjdG9yIgogV2ViS2l0L3dpbi9XZWJLaXRETEwuY3BwCiBXZWJLaXQvd2lu
L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCiBXZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNw
cDoiQXJpYWwiCkBAIC01NjUsOSArNTcxLDcgQEAgV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5j
cHA6IkNvdXJpZXIgTgogV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHA6IlRpbWVzIE5ldyBS
b21hbiIKIFdlYktpdC93aW4vV2ViU2NyaXB0Q2FsbEZyYW1lLmNwcDoiRmFsc2UiCiBXZWJLaXQv
d2luL1dlYlNjcmlwdENhbGxGcmFtZS5jcHA6IlRydWUiCi1XZWJLaXQvd2luL1dlYlNjcmlwdENh
bGxGcmFtZS5jcHA6ImV2YWwiCiBXZWJLaXQvd2luL1dlYlNjcmlwdENhbGxGcmFtZS5jcHA6InVu
ZGVmaW5lZCIKLVdlYktpdC93aW4vV2ViU2NyaXB0RGVidWdnZXIuY3BwOiJBbiBFcnJvciBPY2N1
cnJlZC4iCiBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmNwcDoiRXh0ZW5zaW9uIgogV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcDoiQ2FuY2VsIgogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcDoiQ29weSIK
SW5kZXg6IFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNyArMTI0LDYgQEAKIAkJOTM5ODEwMzgwODI0QkYwMTAwOERGMDM4IC8q
IFdlYlBsdWdpbkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNUY3MTcyMDAyODg0OTNDMDE4NjM1Q0EgLyogV2ViUGx1Z2luRGF0YWJhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5Mzk4
MTAzOTA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNEIwMzY2NTk0NDAwMDBFNTA2
IC8qIFdlYlBsdWdpblBhY2thZ2UuaCAqLzsgfTsKIAkJOTM5ODEwM0EwODI0QkYwMTAwOERGMDM4
IC8qIFdlYlBsdWdpblZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDhERkY4NjAzNjVGRTZBMDBDQTJBQ0EgLyogV2ViUGx1Z2luVmll
d0ZhY3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07
Ci0JCTkzOTgxMDNDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGcmFtZUJyaWRnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBRkI0NUUwMkI5NERDODAx
ODYzNUNBIC8qIFdlYkZyYW1lQnJpZGdlLmggKi87IH07CiAJCTkzOTgxMDQyMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNDVENEVBMDM2NUM1QjIwMDg2MzVDRSAvKiBX
ZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5Mzk4MTA0NjA4MjRCRjAxMDA4REYwMzggLyogV2ViVmll
d0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1RjcxNzRDMDI4ODVDNUIwMTg2MzVDQSAvKiBXZWJWaWV3RmFjdG9yeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTkzOTgxMDQ3MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJLaXRQcmVmaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1QzI4MzczMDI4NDY3NkQwMTg2MzVDQSAvKiBXZWJLaXRQcmVmaXguaCAqLzsgfTsK
QEAgLTIyNyw3ICsyMjYsNiBAQAogCQk5Mzk4MTBEQjA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1
Z2luRGF0YWJhc2UubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1RjcxNzIxMDI4ODQ5M0MwMTg2MzVDQSAvKiBXZWJQbHVnaW5EYXRhYmFzZS5tICovOyB9
OwogCQk5Mzk4MTBEQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2luUGFja2FnZS5tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNFNEFGNEMwMzY2NTk0
NDAwMDBFNTA2IC8qIFdlYlBsdWdpblBhY2thZ2UubSAqLzsgfTsKIAkJOTM5ODEwREQwODI0QkYw
MTAwOERGMDM4IC8qIG5wYXBpLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNUY3MTcyMzAyODg0OTNDMDE4NjM1Q0EgLyogbnBhcGkubSAqLzsgfTsKLQkJ
OTM5ODEwREUwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lQnJpZGdlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVBRkI0NUYwMkI5NERDODAxODYz
NUNBIC8qIFdlYkZyYW1lQnJpZGdlLm1tICovOyB9OwogCQk5Mzk4MTBFMzA4MjRCRjAxMDA4REYw
MzggLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlDRTFGOEEzMDJBNUM2RjMwRUNBMkFDRCAvKiBXZWJJbWFn
ZVJlbmRlcmVyRmFjdG9yeS5tICovOyB9OwogCQk5Mzk4MTBFNDA4MjRCRjAxMDA4REYwMzggLyog
V2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzQ1RDRFQjAzNjVDNUIyMDA4NjM1Q0UgLyogV2ViSmF2YVNj
cmlwdFRleHRJbnB1dFBhbmVsLm0gKi87IH07CiAJCTkzOTgxMEU4MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJWaWV3RmFjdG9yeS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1RjcxNzREMDI4ODVDNUIwMTg2MzVDQSAvKiBXZWJWaWV3RmFjdG9yeS5tbSAq
LzsgfTsKQEAgLTU3OCw4ICs1NzYsNiBAQAogCQlGNUE2NzJCOTAyNjM4NjZFMDEwMDAxMDIgLyog
V2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlG
NUE2NzJCQTAyNjM4NjZFMDEwMDAxMDIgLyogV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgcGF0aCA9
IFdlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1QUVCQjNEMDI0QTUyNzYwMUMxQTUy
NiAvKiBXZWJQcmVmZXJlbmNlcy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMub2JqYzsgcGF0aCA9IFdlYlByZWZlcmVuY2VzLm07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNUFGQjQ1RTAyQjk0REM4MDE4
NjM1Q0EgLyogV2ViRnJhbWVCcmlkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZUJyaWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjVBRkI0NUYwMkI5NERDODAx
ODYzNUNBIC8qIFdlYkZyYW1lQnJpZGdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGcmFtZUJyaWRnZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1QjY3MTMw
MDIzRURGODkwMUMxQTUyNSAvKiB1cmxfaWNvbi50aWZmICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9IHVybF9pY29uLnRp
ZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1QjkyQjgyMDIyMzE5MUQwMUMxQTUy
NSAvKiBXZWJIaXN0b3J5UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXN0b3J5UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjVDMjgzNzMwMjg0Njc2
RDAxODYzNUNBIC8qIFdlYktpdFByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYktpdFByZWZpeC5oOyBwYXRoID0gbWFjL1dlYktpdFBy
ZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNUYWJzID0g
MDsgfTsKQEAgLTEwNDUsOCArMTA0MSw2IEBACiAJCQkJQTcwOTM2QUUwQjU2MDhEQzAwQ0RCNDhF
IC8qIFdlYkRyYWdDbGllbnQubW0gKi8sCiAJCQkJNEJGOTlGOEUwQUUwNTBCQzAwODE1QzJCIC8q
IFdlYkVkaXRvckNsaWVudC5oICovLAogCQkJCTRCRjk5RjhGMEFFMDUwQkMwMDgxNUMyQiAvKiBX
ZWJFZGl0b3JDbGllbnQubW0gKi8sCi0JCQkJRjVBRkI0NUUwMkI5NERDODAxODYzNUNBIC8qIFdl
YkZyYW1lQnJpZGdlLmggKi8sCi0JCQkJRjVBRkI0NUYwMkI5NERDODAxODYzNUNBIC8qIFdlYkZy
YW1lQnJpZGdlLm1tICovLAogCQkJCTkzMTYzM0VBMEFFREZGOTMwMDYyQjkyRCAvKiBXZWJGcmFt
ZUxvYWRlckNsaWVudC5oICovLAogCQkJCTkzMTYzM0VFMEFFREZGQUUwMDYyQjkyRCAvKiBXZWJG
cmFtZUxvYWRlckNsaWVudC5tbSAqLywKIAkJCQk1MTQ5NENENDBDN0VCREUwMDA0MTc4QzUgLyog
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8sCkBAIC0xMjE0LDcgKzEyMDgsNiBAQAogCQkJCTkz
OTgxMDUyMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzOTgxMDY0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGb3JtRGVsZWdhdGVQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1MzA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJh
bWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDNDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJG
cmFtZUJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwOUMwODI0QkYwMTAwOERGMDM4
IC8qIFdlYkZyYW1lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDVCMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMxNjMzRUIwQUVERkY5MzAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTE1NDMsNyArMTUzNiw2IEBACiAJCQkJREQ4OTY4MjEwOUFBODcyNDAwOTdF
N0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEw
RkMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM5ODEwRjIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTM5ODEwREUwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lQnJpZGdlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMxNjMzRUYwQUVERkZBRTAwNjJCOTJEIC8qIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDYwODI0QkYwMTAwOERGMDM4IC8q
IFdlYkZyYW1lVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQTU3RDYzMEFFRDZBNDcwMDA5
QkREMCAvKiBXZWJHcmFwaGljc0V4dHJhcy5jIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNp
b24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3NiBAQAorMjAwOC0wMy0xMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY0MAorICAgICAgICAgIGVsaW1pbmF0
ZSBXZWJDb3JlRnJhbWVCcmlkZ2UKKworICAgICAgICBNb3ZlZCBhbGwgdGhlIGNvZGUgZnJvbSB0
aGUgYnJpZGdlIGludG8gV2ViRnJhbWUuIFRoaXMgbmVlZCBub3QgYmUgdGhlIGZpbmFsCisgICAg
ICAgIGhvbWUgb2YgdGhlc2UgbWV0aG9kcyAtLSB0aGV5IGNhbiBiZSBtb3ZlZCBjbG9zZXIgdG8g
dGhlaXIgY2FsbGVycyBhbmQgaW1wcm92ZWQKKyAgICAgICAgZnVydGhlciAtLSBidXQgaXQgZWxp
bWluYXRlcyB0aGUgYnJpZGdlIHdpdGhvdXQgcmVxdWlyaW5nIGEgcmV3cml0ZSBvZiB0aGUgY29k
ZS4KKyAgICAgICAgSXQncyBhIGZhaXJseSBtZWNoYW5pY2FsIHByb2Nlc3MgKGp1c3QgYWRkaW5n
IHVuZGVyc2NvcmVzIHRvIG1ldGhvZCBuYW1lcyByZWFsbHkpLgorCisgICAgICAgIFRoZXJlJ3Mg
ZXZlbiBhIGNoYW5jZSB0aGF0IHNvbWUgb2YgdGhlIG1ldGhvZHMgYXJlIHVudXNlZC4gVGhvc2Ug
d2UgY2FuIHJlbW92ZQorICAgICAgICBhZnRlciBjaGVja2luZyBpZiB0aGF0J3Mgc28uCisKKyAg
ICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBtYXJr
dXBTdHJpbmddKTogVXNlIFdlYkZyYW1lIHJhdGhlciB0aGFuIGJyaWRnZS4KKyAgICAgICAgKC1b
RE9NRG9jdW1lbnQgd2ViRnJhbWVdKTogQ2hhbmdlZCB0byB1c2UgdGhlIGNvcmUgYW5kIGtpdCBm
dW5jdGlvbnMKKyAgICAgICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnJpZGdlLgorICAgICAgICAo
LVtET01Eb2N1bWVudCBVUkxXaXRoQXR0cmlidXRlU3RyaW5nOl0pOiBVc2UgV2ViRnJhbWUgcmF0
aGVyIHRoYW4gYnJpZGdlLgorICAgICAgICAoLVtET01SYW5nZSBtYXJrdXBTdHJpbmddKTogRGl0
dG8uCisgICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnNQcml2YXRlLmg6IFJlbW92ZWQgX2Jy
aWRnZSBtZXRob2RzLgorCisgICAgICAgICogRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Q29u
dGV4dE1lbnVEZWxlZ2F0ZS5tbTogUmVtb3ZlZCB1bm5lZWRlZCBpbXBvcnQuCisgICAgICAgICog
SGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbTogRGl0dG8uCisKKyAgICAgICAgKiBNaWdyYXRlSGVh
ZGVycy5tYWtlOiBBZGRlZCBET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaC4KKyAgICAgICAg
KiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSByZW5kZXJU
cmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uXSk6IFVzZSBXZWJGcmFtZSByYXRoZXIgdGhhbiBi
cmlkZ2UuCisKKyAgICAgICAgKiBNaXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tOiBSZW1vdmVk
IHVubmVlZGVkIGltcG9ydC4KKworICAgICAgICAqIE1pc2MvV2ViS2l0U3RhdGlzdGljcy5tOgor
ICAgICAgICAoK1tXZWJLaXRTdGF0aXN0aWNzIGJyaWRnZUNvdW50XSk6IFJlbW92ZWQgV2ViQnJp
ZGdlQ291bnQgYW5kIGp1c3QgcmV0dXJuIDAuCisgICAgICAgICogTWlzYy9XZWJLaXRTdGF0aXN0
aWNzUHJpdmF0ZS5oOiBEaXR0by4KKworICAgICAgICAqIE1pc2MvV2ViTlNBdHRyaWJ1dGVkU3Ry
aW5nRXh0cmFzLm1tOiBSZW1vdmVkIHVubmVlZGVkIGltcG9ydC4KKyAgICAgICAgKiBNaXNjL1dl
Yk5TUGFzdGVib2FyZEV4dHJhcy5tbTogRGl0dG8uCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpdKTogVXNlIFdlYkZyYW1lCisg
ICAgICAgIHJhdGhlciB0aGFuIGJyaWRnZS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5FbWJlZGRlZFZpZXcubW06IFJlbW92ZWQgdW5uZWVkZWQgaW1wb3J0LgorICAgICAg
ICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06IERpdHRvLgorCisgICAgICAg
ICogUGx1Z2lucy9XZWJQbHVnaW5Db250YWluZXJDaGVjay5tbToKKyAgICAgICAgKC1bV2ViUGx1
Z2luQ29udGFpbmVyQ2hlY2sgX2lzRm9yYmlkZGVuRmlsZUxvYWRdKTogVXNlIFdlYkZyYW1lIHJh
dGhlciB0aGFuCisgICAgICAgIGJyaWRnZSB0byBnZXQgdG8gdGhlIFdlYkNvcmU6OkZyYW1lLgor
CisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLmg6IERlY2xhcmUgd2ViRnJh
bWUgbWV0aG9kIGFuZCByZW1vdmUgYnJpZGdlIG1ldGhvZC4KKyAgICAgICAgKiBQbHVnaW5zL1dl
YlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgd2Vi
UGx1Z0luQ29udGFpbmVyTG9hZFJlcXVlc3Q6aW5GcmFtZTpdKTogVXNlIFdlYkZyYW1lCisgICAg
ICAgIHJhdGhlciB0aGFuIGJyaWRnZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbToKKyAgICAgICAgKHNlbGVjdG9yRm9yS2V5RXZlbnQpOiBUd2Vha2VkIGNv
bW1lbnQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tOiBSZW1vdmVk
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06Cisg
ICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQpOiBSZW1v
dmVkIGJyaWRnZSBhc3NlcnRpb24uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0
YWNoZWRGcm9tUGFyZW50NCk6IFJlbW92ZWQgYnJpZGdlIHRlYXJkb3duIGNvZGUuCisgICAgICAg
IEkgY291bGQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gZW50aXJlbHksIGJ1dCBpdCBsb29rcyBsaWtl
IHRoZSBRdCBwb3J0IGlzIHVzaW5nIGl0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Vmlld0ZhY3RvcnkubW06IFJlbW92ZWQgdW5uZWVkZWQgaW1wb3J0LgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJBcmNoaXZlci5tbToKKyAgICAgICAgKCtbV2ViQXJjaGl2ZXIgYXJjaGl2ZVJhbmdl
Ol0pOiBVc2UgV2ViRnJhbWUgcmF0aGVyIHRoYW4gYnJpZGdlLgorICAgICAgICAoK1tXZWJBcmNo
aXZlciBhcmNoaXZlTm9kZTpdKTogRGl0dG8uCisgICAgICAgICgrW1dlYkFyY2hpdmVyIGFyY2hp
dmVTZWxlY3Rpb25JbkZyYW1lOl0pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRGF0
YVNvdXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhBcmNoaXZlOnNlbGVjdFJlcGxhY2VtZW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRGF0
YVNvdXJjZSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRGF0YVNvdXJjZSBzdWJyZXNvdXJjZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkRh
dGFTb3VyY2Ugc3VicmVzb3VyY2VGb3JVUkw6XSk6IERpdHRvLgorCisgICAgICAgICogV2ViVmll
dy9XZWJEYXRhU291cmNlSW50ZXJuYWwuaDogUmVtb3ZlZCBfYnJpZGdlIG1ldGhvZC4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lUHJpdmF0ZSBk
ZWFsbG9jXSk6IFJlbW92ZWQgY29kZSB0byByZWxlYXNlIHRoZSBicmlkZ2UuCisgICAgICAgIChj
b3JlKTogR28gZGlyZWN0bHkgdG8gdGhlIGNvcmUgZnJhbWUsIG5vdCB2aWEgdGhlIGJyaWRnZS4K
KyAgICAgICAgKCtbV2ViRnJhbWUgX2NyZWF0ZUZyYW1lV2l0aFBhZ2U6ZnJhbWVOYW1lOmZyYW1l
Vmlldzpvd25lckVsZW1lbnQ6XSk6CisgICAgICAgIFJlbW92ZSB0aGUgY29kZSB0byBkZWFsIHdp
dGggdGhlIGJyaWRnZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2luaXRXaXRoV2ViRnJhbWVWaWV3
OndlYlZpZXc6XSk6IERpdHRvLiBBbHNvIGFkZGVkIGNvZGUgdG8gc2V0IHRoZQorICAgICAgICBz
aG91bGRDcmVhdGVSZW5kZXJlcnMgZmxhZywgZm9ybWVybHkgb24gdGhlIGJyaWRnZS4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3VwZGF0ZUJhY2tncm91bmRdKTogQ2hhbmdlIHRvIGNhbGwgbWVob2Rz
IG9uIHNlbGYsIG5vdCBicmlkZ2UuCisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6IE1vdmVk
IGhlcmUgZnJvbSBicmlkZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIF9kb21haW5dKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkZyYW1lIF9hZGREYXRhOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
RnJhbWUgX3N0cmluZ1dpdGhEb2N1bWVudFR5cGVTdHJpbmdBbmRNYXJrdXBTdHJpbmc6XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfbm9kZXNGcm9tTGlzdDpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkZyYW1lIF9tYXJrdXBTdHJpbmdGcm9tTm9kZTpub2RlczpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9tYXJrdXBTdHJpbmdGcm9tUmFuZ2U6bm9kZXM6XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJGcmFtZSBfc2VsZWN0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkZyYW1lIF9zdHJpbmdGb3JSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZy
YW1lIF9mb3JjZUxheW91dEFkanVzdGluZ1ZpZXdTaXplOl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgX2ZvcmNlTGF5b3V0V2l0aE1pbmltdW1QYWdlV2lkdGg6bWF4aW11bVBhZ2VXaWR0
aDphZGp1c3RpbmdWaWV3U2l6ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9zZW5k
U2Nyb2xsRXZlbnRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kcmF3UmVjdDpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lk
dGhTY2FsZUZhY3RvcjpwcmludEhlaWdodDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1l
IF9hZGp1c3RQYWdlSGVpZ2h0TmV3OnRvcDpib3R0b206bGltaXQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJGcmFtZSBfY29weVJlbmRlck5vZGU6Y29waWVyOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRnJhbWUgX2NvcHlSZW5kZXJUcmVlOl0pOiBEaXR0by4KKyAgICAgICAgKGlucHV0RWxl
bWVudEZyb21ET01FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChmb3JtRWxlbWVudEZyb21ET01F
bGVtZW50KTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9lbGVtZW50V2l0aE5hbWU6aW5G
b3JtOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2VsZW1lbnREb2VzQXV0b0NvbXBs
ZXRlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2VsZW1lbnRJc1Bhc3N3b3JkOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2Zvcm1Gb3JFbGVtZW50Ol0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViRnJhbWUgX2N1cnJlbnRGb3JtXSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfY29udHJvbHNJbkZvcm06XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBf
c2VhcmNoRm9yTGFiZWxzOmJlZm9yZUVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJG
cmFtZSBfbWF0Y2hMYWJlbHM6YWdhaW5zdEVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIF9zZWFyY2hGb3I6ZGlyZWN0aW9uOmNhc2VTZW5zaXRpdmU6d3JhcDpzdGFydEluU2Vs
ZWN0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX21hcmtBbGxNYXRjaGVzRm9y
VGV4dDpjYXNlU2Vuc2l0aXZlOmxpbWl0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUg
X21hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIF9zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3VubWFya0FsbFRleHRNYXRjaGVzXSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJGcmFtZSBfcmVjdHNGb3JUZXh0TWF0Y2hlc10pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgX3NldFRleHRTaXplTXVsdGlwbGllcjpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0
cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2Fl
RGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpvZmZzZXQ6YWZmaW5pdHk6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJGcmFtZSBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfYmFzZVVSTF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUg
X3N0cmluZ1dpdGhEYXRhOl0pOiBEaXR0by4KKyAgICAgICAgKCtbV2ViRnJhbWUgX3N0cmluZ1dp
dGhEYXRhOnRleHRFbmNvZGluZ05hbWU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBf
bmVlZHNMYXlvdXRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9yZW5kZXJUcmVlQXNF
eHRlcm5hbFJlcHJlc2VudGF0aW9uXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfYWNj
ZXNzaWJpbGl0eVRyZWVdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9zZXRCYXNlQmFj
a2dyb3VuZENvbG9yOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NldERyYXdzQmFj
a2dyb3VuZDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OmRpcmVjdGlvbjpTZWxlY3Rpb25D
b250cm9sbGVyOjpncmFudWxhcml0eTpdKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIF9zZWxlY3Rpb25HcmFudWxhcml0eV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX2NvbnZlcnRUb05TUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29u
dmVydFRvRE9NUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydE5T
UmFuZ2VUb0RPTVJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRE
T01SYW5nZVRvTlNSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9N
UmFuZ2VdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrZWRUZXh0TlNSYW5nZV0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3Nl
ZFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NtYXJ0SW5zZXJ0Rm9yU3Ry
aW5nOnJlcGxhY2luZ1JhbmdlOmJlZm9yZVN0cmluZzphZnRlclN0cmluZzpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpiYXNl
VVJMU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2RvY3VtZW50RnJhZ21l
bnRXaXRoVGV4dDppbkNvbnRleHQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfZG9j
dW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OnNlbGVjdFJlcGxhY2VtZW50
OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUg
X3JlcGxhY2VTZWxlY3Rpb25XaXRoTm9kZTpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6
bWF0Y2hTdHlsZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9yZXBsYWNlU2VsZWN0
aW9uV2l0aE1hcmt1cFN0cmluZzpiYXNlVVJMU3RyaW5nOnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0
UmVwbGFjZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6c2VsZWN0UmVwbGFjZW1lbnQ6c21hcnRSZXBsYWNlOl0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX2luc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudF0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50Ol0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQb2ludDpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF90eXBpbmdTdHlsZV0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3NldFR5cGluZ1N0eWxlOndpdGhVbmRvQWN0aW9uOl0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViRnJhbWUgX2ZvbnRGb3JTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJGcmFtZSBfZHJhZ1NvdXJjZU1vdmVkVG86XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfZHJhZ1NvdXJjZUVuZGVkQXQ6b3BlcmF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRnJhbWUgX2dldERhdGE6YW5kUmVzcG9uc2U6Zm9yVVJMOl0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX2dldEFsbFJlc291cmNlRGF0YXM6YW5kUmVzcG9uc2VzOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhblByb3ZpZGVEb2N1bWVudFNvdXJjZV0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NhblNhdmVBc1dlYkFyY2hpdmVdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9yZWNlaXZlZERhdGE6dGV4dEVuY29kaW5nTmFtZTpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9zZXRTaG91bGRDcmVhdGVSZW5kZXJlcnM6XSk6IFB1
dCB0aGUgY29kZSBmcm9tIHRoZSBicmlkZ2UgaW4gdGhpcyBwcmVleGlzdGluZworICAgICAgICBm
dW5jdGlvbi4gQ291bGRuJ3QganVzdCBrZWVwIHRoZSBicmlkZ2UgbWV0aG9kIGJlY2F1c2UgdGhp
cyB3YXMgYWxyZWFkeSBoZXJlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVj
dE5TUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBkZWFsbG9jXSk6IFJlbW92
ZSBicmlkZ2UtcmVsYXRlZCBjb2RlLgorICAgICAgICAoLVtXZWJGcmFtZSBmaW5hbGl6ZV0pOiBE
aXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oOiBBZGRlZCBhbGwg
dGhlIG1ldGhvZCBkZWNsYXJhdGlvbnMgZnJvbSB0aGUgYnJpZGdlLgorICAgICAgICBSZW1vdmVk
IHRoZSBicmlkZ2UgcGFyYW1ldGVyIGZyb20gdGhlIGluaXQgbWV0aG9kLiBSZW1vdmVkIHRoZSAj
aWYgYmxvY2tzIHRoYXQKKyAgICAgICAgdHJpZWQgdG8gbWFrZSB0aGlzIGhlYWRlciB3b3JrIGlu
IG5vbi1DKysgT2JqQyBmaWxlcyAtLSB0aGV5IHdlcmUgYnJva2VuIGFuZCB1bnVzZWQuCisgICAg
ICAgIFJlbW92ZWQgdGhlIF9icmlkZ2UgbWV0aG9kLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZVZpZXcubW06IFJlbW92ZWQgdGhlIF9icmlkZ2UgbWV0aG9kLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgICgtW1dlYkhUTUxSZXByZXNl
bnRhdGlvbiBzZXREYXRhU291cmNlOl0pOiBSZW1vdmVkIHRoZSBjb2RlIHRvIHNldCB1cCB0aGUg
YnJpZGdlCisgICAgICAgIGZpZWxkLgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24g
cmVjZWl2ZWREYXRhOndpdGhEYXRhU291cmNlOl0pOiBVc2UgV2ViRnJhbWUgaW5zdGVhZCBvZiBi
cmlkZ2UuCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBmaW5pc2hlZExvYWRpbmdX
aXRoRGF0YVNvdXJjZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlv
biBjYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2VdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxS
ZXByZXNlbnRhdGlvbiBjYW5TYXZlQXNXZWJBcmNoaXZlXSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJIVE1MUmVwcmVzZW50YXRpb24gZG9jdW1lbnRTb3VyY2VdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkhUTUxSZXByZXNlbnRhdGlvbiBET01Eb2N1bWVudF0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViSFRNTFJlcHJlc2VudGF0aW9uIGVsZW1lbnRXaXRoTmFtZTppbkZvcm06XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZWxlbWVudERvZXNBdXRvQ29tcGxldGU6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZWxlbWVudElzUGFz
c3dvcmQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZm9ybUZv
ckVsZW1lbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gY3Vy
cmVudEZvcm1dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBjb250
cm9sc0luRm9ybTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBz
ZWFyY2hGb3JMYWJlbHM6YmVmb3JlRWxlbWVudDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhU
TUxSZXByZXNlbnRhdGlvbiBtYXRjaExhYmVsczphZ2FpbnN0RWxlbWVudDpdKTogRGl0dG8uCisK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUuaDogUmVtb3Zl
ZCB0aGUgX2JyaWRnZSBtZXRob2QuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpdKTog
VXNlIFdlYkZyYW1lIGluc3RlYWQgb2YgYnJpZGdlLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
cGFzdGVXaXRoUGFzdGVib2FyZDphbGxvd1BsYWluVGV4dDpdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkhUTUxWaWV3IF9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlVGV4dFNpemVNdWx0aXBsaWVyXSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zbWFydEluc2VydEZvclN0cmluZzpyZXBsYWNpbmdS
YW5nZTpiZWZvcmVTdHJpbmc6YWZ0ZXJTdHJpbmc6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0
OnN1YnJlc291cmNlczpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGxheW91dFRv
TWluaW11bVBhZ2VXaWR0aDptYXhpbXVtUGFnZVdpZHRoOmFkanVzdGluZ1ZpZXdTaXplOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgZHJhd1NpbmdsZVJlY3Q6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBkcmFnZ2VkSW1hZ2U6bW92ZWRUbzpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0Om9wZXJhdGlvbjpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFkanVzdFBhZ2VIZWlnaHROZXc6dG9wOmJv
dHRvbTpsaW1pdDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGtub3dzUGFnZVJh
bmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNjZXNzaWJpbGl0
eUZvY3VzZWRVSUVsZW1lbnRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFjY2Vz
c2liaWxpdHlIaXRUZXN0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2FjY2Vz
c2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBzdGFydFNwZWFraW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX3VwZGF0ZUZvbnRQYW5lbF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfbGF5b3V0SWZOZWVkZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGNoYXJh
Y3RlckluZGV4Rm9yUG9pbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IHNlbGVjdGVkUmFuZ2VdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJh
bmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4
dDpzZWxlY3RlZFJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgaW5zZXJ0
VGV4dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgX2lu
c2VydE1hdGNoOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVGV4dENvbXBsZXRlQ29udHJvbGxl
ciBkb0NvbXBsZXRpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYlRleHRDb21wbGV0ZUNvbnRy
b2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOm1vdmVMZWZ0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgc3RyaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxl
Y3RlZFN0cmluZ10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2VhcmNoRm9yOmRp
cmVjdGlvbjpjYXNlU2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtBbGxNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZl
OmxpbWl0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1h
cmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHVubWFya0FsbFRleHRNYXRjaGVzXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1M
VmlldyByZWN0c0ZvclRleHRNYXRjaGVzXSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UmVuZGVyTm9kZS5tbToKKyAgICAgICAgKC1bV2ViUmVuZGVyTm9kZSBpbml0V2l0aFdlYkZyYW1l
VmlldzpdKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJSZXNvdXJjZS5tbToKKyAgICAg
ICAgKC1bV2ViUmVzb3VyY2UgX3N0cmluZ1ZhbHVlXSk6IERpdHRvLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2Rh
c2hib2FyZFJlZ2lvbnNdKTogVXNlIFdlYkZyYW1lIGluc3RlYWQgb2YgYnJpZGdlLgorICAgICAg
ICAoLVtXZWJWaWV3IHNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGluZzpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgX3NldEluVmlld1NvdXJjZU1vZGU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IF9pblZpZXdTb3VyY2VNb2RlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJW
aWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6dmFsdWU6XSk6IERpdHRvLgorICAgICAgICAo
LVtXZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViVmlldyBhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0
cmluZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IHNldFNlbGVjdGVkRE9NUmFuZ2U6YWZm
aW5pdHk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IHNldEVkaXRhYmxlOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViVmlldyBzZXRUeXBpbmdTdHlsZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYlZpZXcgdHlwaW5nU3R5bGVdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgcmVw
bGFjZVNlbGVjdGlvbldpdGhOb2RlOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IHJlcGxh
Y2VTZWxlY3Rpb25XaXRoTWFya3VwU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmll
dyByZXBsYWNlU2VsZWN0aW9uV2l0aEFyY2hpdmU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJW
aWV3IF9pbnNlcnROZXdsaW5lSW5RdW90ZWRDb250ZW50XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJWaWV3IF9yZXBsYWNlU2VsZWN0aW9uV2l0aE5vZGU6bWF0Y2hTdHlsZTpdKTogRGl0dG8uCisK
IDIwMDgtMDMtMTIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0g
Zml4IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk0CkluZGV4OiBX
ZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9N
aWdyYXRlSGVhZGVycy5tYWtlCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvTWlncmF0
ZUhlYWRlcnMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBhbGwgOiBcCiAg
ICAgJChQVUJMSUNfSEVBREVSU19ESVIpL0RPTURvY3VtZW50LmggXAogICAgICQoSU5URVJOQUxf
SEVBREVSU19ESVIpL0RPTURvY3VtZW50SW50ZXJuYWwuaCBcCiAgICAgJChQVUJMSUNfSEVBREVS
U19ESVIpL0RPTURvY3VtZW50RnJhZ21lbnQuaCBcCisgICAgJChJTlRFUk5BTF9IRUFERVJTX0RJ
UikvRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmggXAogICAgICQoUFJJVkFURV9IRUFERVJT
X0RJUikvRE9NRG9jdW1lbnRQcml2YXRlLmggXAogICAgICQoUFVCTElDX0hFQURFUlNfRElSKS9E
T01Eb2N1bWVudFR5cGUuaCBcCiAgICAgJChQVUJMSUNfSEVBREVSU19ESVIpL0RPTUVsZW1lbnQu
aCBcCkluZGV4OiBXZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJldmlzaW9uIDMwOTkzKQor
KysgV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbXBvcnQgIldlYkFyY2hpdmVyLmgiCiAjaW1wb3J0
ICJXZWJEYXRhU291cmNlUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKICNp
bXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lUHJpdmF0ZS5oIgog
I2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKQEAgLTQ3LDE3ICs0Niw2IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gRE9NTm9kZSAoV2ViRE9NTm9k
ZU9wZXJhdGlvbnMpCiAKLS0gKFdlYkZyYW1lQnJpZGdlICopX2JyaWRnZQotewotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
a2l0KGZyYW1lKSBfYnJpZGdlXTsKLX0KLQogLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIHsK
ICAgICByZXR1cm4gW1dlYkFyY2hpdmVyIGFyY2hpdmVOb2RlOnNlbGZdOwpAQCAtNjUsOSArNTMs
MTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKE5TU3RyaW5nICopbWFya3VwU3Ry
aW5nCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBtYXJrdXBTdHJpbmdGcm9tTm9kZTpz
ZWxmIG5vZGVzOm5pbF07CisgICAgcmV0dXJuIFtbW3NlbGYgb3duZXJEb2N1bWVudF0gd2ViRnJh
bWVdIF9tYXJrdXBTdHJpbmdGcm9tTm9kZTpzZWxmIG5vZGVzOm5pbF07CiB9CiAKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIERPTU5vZGUgKFdlYkRPTU5vZGVPcGVyYXRpb25zUHJpdmF0ZSkKKwog
LSAoTlNBcnJheSAqKV9VUkxzRnJvbVNlbGVjdG9yczooU0VMKWZpcnN0U2VsLCAuLi4KIHsKICAg
ICBOU011dGFibGVBcnJheSAqVVJMcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CkBAIC0xMDcs
MTIgKzk5LDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtIChXZWJGcmFtZSAqKXdl
YkZyYW1lCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSB3ZWJGcmFtZV07CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZShzZWxmKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBraXQoZnJhbWUpOwogfQogCiAtIChOU1VSTCAqKVVSTFdpdGhBdHRyaWJ1dGVTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBVUkxXaXRo
QXR0cmlidXRlU3RyaW5nOnN0cmluZ107CisgICAgcmV0dXJuIFtbc2VsZiB3ZWJGcmFtZV0gX1VS
TFdpdGhBdHRyaWJ1dGVTdHJpbmc6c3RyaW5nXTsKIH0KIAogQGVuZApAQCAtMTM1LDExICsxMzEs
NiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIERPTVJhbmdl
IChXZWJET01SYW5nZU9wZXJhdGlvbnMpCiAKLS0gKFdlYkZyYW1lQnJpZGdlICopX2JyaWRnZQot
ewotICAgIHJldHVybiBbW3NlbGYgc3RhcnRDb250YWluZXJdIF9icmlkZ2VdOwotfQotCiAtIChX
ZWJBcmNoaXZlICopd2ViQXJjaGl2ZQogewogICAgIHJldHVybiBbV2ViQXJjaGl2ZXIgYXJjaGl2
ZVJhbmdlOnNlbGZdOwpAQCAtMTQ3LDcgKzEzOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwogewotICAgIHJldHVybiBbW3NlbGYgX2Jy
aWRnZV0gbWFya3VwU3RyaW5nRnJvbVJhbmdlOnNlbGYgbm9kZXM6bmlsXTsKKyAgICByZXR1cm4g
W1tbW3NlbGYgc3RhcnRDb250YWluZXJdIG93bmVyRG9jdW1lbnRdIHdlYkZyYW1lXSBfbWFya3Vw
U3RyaW5nRnJvbVJhbmdlOnNlbGYgbm9kZXM6bmlsXTsKIH0KIAogQGVuZApJbmRleDogV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9uc1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0RPTS9XZWJET01PcGVyYXRpb25zUHJpdmF0ZS5oCShyZXZpc2lvbiAzMDk5MykKKysrIFdl
YktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnNQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsMjAgKzI2LDEzIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLUBjbGFzcyBXZWJG
cmFtZUJyaWRnZTsKLQogI2ltcG9ydCA8V2ViS2l0L1dlYkRPTU9wZXJhdGlvbnMuaD4KIAogQGlu
dGVyZmFjZSBET01Ob2RlIChXZWJET01Ob2RlT3BlcmF0aW9uc1ByaXZhdGUpCi0tIChXZWJGcmFt
ZUJyaWRnZSAqKV9icmlkZ2U7CiAtIChOU0FycmF5ICopX1VSTHNGcm9tU2VsZWN0b3JzOihTRUwp
Zmlyc3RTZWwsIC4uLjsKIC0gKE5TQXJyYXkgKilfc3VicmVzb3VyY2VVUkxzOwogQGVuZAogCi1A
aW50ZXJmYWNlIERPTVJhbmdlIChXZWJET01SYW5nZU9wZXJhdGlvbnNQcml2YXRlKQotLSAoV2Vi
RnJhbWVCcmlkZ2UgKilfYnJpZGdlOwotQGVuZAotCiBAaW50ZXJmYWNlIERPTURvY3VtZW50IChX
ZWJET01Eb2N1bWVudE9wZXJhdGlvbnNQcml2YXRlKQogLSAoRE9NUmFuZ2UgKilfY3JlYXRlUmFu
Z2VXaXRoTm9kZTooRE9NTm9kZSAqKW5vZGU7CiAtIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdl
OwpJbmRleDogV2ViS2l0L21hYy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRDb250ZXh0TWVu
dURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvRGVmYXVsdERlbGVnYXRlcy9X
ZWJEZWZhdWx0Q29udGV4dE1lbnVEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJL
aXQvbWFjL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdENvbnRleHRNZW51RGVsZWdhdGUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgIldlYkRPTU9wZXJhdGlv
bnMuaCIKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJEZWZh
dWx0VUlEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQgIldl
YkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lVmlldy5oIgogI2ltcG9ydCAiV2Vi
SFRNTFZpZXdQcml2YXRlLmgiCkluZGV4OiBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0
ZW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1t
CShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiV2ViSGlzdG9yeUl0
ZW1JbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Qcml2YXRlLmgiCiAKLSNpbXBv
cnQgIldlYkZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1w
b3J0ICJXZWJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKSW5k
ZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDMwOTkzKQorKysg
V2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9JY29uRGF0YWJhc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm9kZS5oPgotI2ltcG9y
dCA8V2ViS2l0L1dlYkZyYW1lQnJpZGdlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVJbnRl
cm5hbC5oPgogCiB1c2luZyBuYW1lc3BhY2UgS0pTOwpAQCAtMTgxLDcgKzE4MCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtIChOU1N0cmluZyAqKXJlbmRlclRyZWVBc0V4dGVybmFs
UmVwcmVzZW50YXRpb24KIHsKLSAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VdIHJlbmRlclRyZWVB
c0V4dGVybmFsUmVwcmVzZW50YXRpb25dOworICAgIHJldHVybiBbc2VsZiBfcmVuZGVyVHJlZUFz
RXh0ZXJuYWxSZXByZXNlbnRhdGlvbl07CiB9CiAKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvTWlz
Yy9XZWJFbGVtZW50RGljdGlvbmFyeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2Mv
V2ViRWxlbWVudERpY3Rpb25hcnkubW0JKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L21hYy9N
aXNjL1dlYkVsZW1lbnREaWN0aW9uYXJ5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAKICNpbXBvcnQgIldlYkRPTU9wZXJhdGlvbnMuaCIKICNpbXBvcnQgIldlYkZyYW1lLmgi
Ci0jaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5o
IgpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYktpdFN0YXRpc3RpY3MubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL01pc2MvV2ViS2l0U3RhdGlzdGljcy5tCShyZXZpc2lvbiAzMDk5MykKKysr
IFdlYktpdC9tYWMvTWlzYy9XZWJLaXRTdGF0aXN0aWNzLm0JKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDYgQEAKIAogI2ltcG9ydCAiV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCIKIAotaW50
IFdlYkJyaWRnZUNvdW50OwogaW50IFdlYlZpZXdDb3VudDsKIGludCBXZWJEYXRhU291cmNlQ291
bnQ7CiBpbnQgV2ViRnJhbWVDb3VudDsKQEAgLTYxLDcgKzYwLDggQEAgaW50IFdlYkZyYW1lVmll
d0NvdW50OwogCiArIChpbnQpYnJpZGdlQ291bnQKIHsKLSAgICByZXR1cm4gV2ViQnJpZGdlQ291
bnQ7CisgICAgLy8gTm8gc3VjaCB0aGluZyBhcyBhIGJyaWRnZSBhbnkgbW9yZS4gSnVzdCByZXR1
cm4gMC4KKyAgICByZXR1cm4gMDsKIH0KIAogKyAoaW50KUhUTUxSZXByZXNlbnRhdGlvbkNvdW50
CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaAkocmV2aXNp
b24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1leHRl
cm4gaW50IFdlYkJyaWRnZUNvdW50OwogZXh0ZXJuIGludCBXZWJWaWV3Q291bnQ7CiBleHRlcm4g
aW50IFdlYkRhdGFTb3VyY2VDb3VudDsKIGV4dGVybiBpbnQgV2ViRnJhbWVDb3VudDsKSW5kZXg6
IFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkocmV2
aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0
cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW1wb3J0ICJET01SYW5n
ZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJEYXRhU291cmNlUHJpdmF0ZS5oIgogI2ltcG9ydCAi
V2ViRnJhbWUuaCIKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJGcmFt
ZUludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db2xvck1hYy5oPgpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVi
b2FyZEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViTlNQYXN0ZWJv
YXJkRXh0cmFzLm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU1Bh
c3RlYm9hcmRFeHRyYXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbXBv
cnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgogCiAjaW1wb3J0ICJXZWJBcmNoaXZlLmgiCi0j
aW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMu
aCIKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5W
aWV3Lm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKICNp
bXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVs
ZWdhdGUuaCIKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUlu
dGVybmFsLmgiIAogI2ltcG9ydCAiV2ViRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJXZWJHcmFwaGlj
c0V4dHJhcy5oIgpAQCAtMjA1Myw3ICsyMDUyLDcgQEAgc3RhdGljIE9TU3RhdHVzIFRTTUV2ZW50
SGFuZGxlcihFdmVudEhhbgogICAgIE5TU3RyaW5nICpKU1N0cmluZyA9IFtVUkwgX3dlYmtpdF9z
Y3JpcHRJZkphdmFTY3JpcHRVUkxdOwogICAgIEFTU0VSVChKU1N0cmluZyk7CiAgICAgCi0gICAg
TlNTdHJpbmcgKnJlc3VsdCA9IFtbW3NlbGYgd2ViRnJhbWVdIF9icmlkZ2VdIHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6W0pT
UGx1Z2luUmVxdWVzdCBpc0N1cnJlbnRFdmVudFVzZXJHZXN0dXJlXV07CisgICAgTlNTdHJpbmcg
KnJlc3VsdCA9IFtbc2VsZiB3ZWJGcmFtZV0gX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nOkpTU3RyaW5nIGZvcmNlVXNlckdlc3R1cmU6W0pTUGx1Z2luUmVxdWVzdCBpc0N1
cnJlbnRFdmVudFVzZXJHZXN0dXJlXV07CiAgICAgCiAgICAgLy8gRG9uJ3QgY29udGludWUgaWYg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcgY2F1c2VkIHRoZSBwbHVnLWlu
IHRvIHN0b3AuCiAgICAgaWYgKCFpc1N0YXJ0ZWQpIHsKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpbkVtYmVkZGVkVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRlZFZpZXcubW0JKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luRW1iZWRkZWRWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW1wb3J0ICJXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViRGF0YVNvdXJjZS5oIgogI2lt
cG9ydCAiV2ViRnJhbWUuaCIKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJX
ZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIldl
Yk5TVVJMRXh0cmFzLmgiCkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBA
QAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9OZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2VJ
bnRlcm5hbC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lQnJpZGdlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViRnJhbWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYktpdEVycm9yc1By
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRMb2dnaW5nLmg+CkluZGV4OiBXZWJLaXQv
bWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udGFpbmVyQ2hlY2subW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRhaW5lckNoZWNrLm1tCShyZXZpc2lvbiAzMDk5
MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250YWluZXJDaGVjay5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMiArMjgsOSBAQAogCiAjaW1wb3J0ICJXZWJQbHVn
aW5Db250YWluZXJDaGVjay5oIgogCi0jaW1wb3J0ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2Vi
RnJhbWVCcmlkZ2UuaCIKLSNpbXBvcnQgIldlYlBsdWdpbkNvbnRhaW5lci5oIgorI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luQ29udGFpbmVyUHJpdmF0ZS5o
IgogI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUG9saWN5RGVs
ZWdhdGUuaCIKICNpbXBvcnQgIldlYlBvbGljeURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAi
V2ViVmlldy5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCkBAIC05NSw5ICs5Miw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtIChCT09MKV9pc0ZvcmJpZGRlbkZpbGVMb2Fk
CiB7Ci0gICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW19jb250cm9sbGVyIGJyaWRnZV07Ci0g
ICBBU1NFUlQoYnJpZGdlKTsKLSAgIGlmICghW2JyaWRnZSBfZnJhbWVdLT5sb2FkZXIoKS0+Y2Fu
TG9hZChbX3JlcXVlc3QgVVJMXSwgW2JyaWRnZSBfZnJhbWVdLT5kb2N1bWVudCgpKSkgeworICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW19jb250cm9sbGVyIHdlYkZyYW1lXSk7CisgICBBU1NF
UlQoY29yZUZyYW1lKTsKKyAgIGlmICghY29yZUZyYW1lLT5sb2FkZXIoKS0+Y2FuTG9hZChbX3Jl
cXVlc3QgVVJMXSwgY29yZUZyYW1lLT5kb2N1bWVudCgpKSkgewogICAgICAgIFtzZWxmIF9jb250
aW51ZVdpdGhQb2xpY3k6UG9saWN5SWdub3JlXTsKICAgICAgICByZXR1cm4gWUVTOwogICAgfQpJ
bmRleDogV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5oCShyZXZpc2lvbiAz
MDk5MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI2LDExIEBACiAgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkJh
c2VQbHVnaW5QYWNrYWdlLmg+CiAKK0BjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJIVE1MVmll
dzsKIEBjbGFzcyBXZWJQbHVnaW5QYWNrYWdlOwotQGNsYXNzIFdlYkZyYW1lQnJpZGdlOwogQGNs
YXNzIFdlYlZpZXc7CiBAY2xhc3MgV2ViRGF0YVNvdXJjZTsKIApAQCAtNTgsNyArNTcsNyBAQAog
LSAodm9pZClzdG9wQWxsUGx1Z2luczsKIC0gKHZvaWQpZGVzdHJveUFsbFBsdWdpbnM7CiAKLS0g
KFdlYkZyYW1lQnJpZGdlICopYnJpZGdlOworLSAoV2ViRnJhbWUgKil3ZWJGcmFtZTsKIC0gKFdl
YlZpZXcgKil3ZWJWaWV3OwogCiAtIChOU1N0cmluZyAqKVVSTFBvbGljeUNoZWNrUmVmZXJyZXI7
CkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkocmV2aXNp
b24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYkRhdGFTb3VyY2VJbnRlcm5hbC5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1l
QnJpZGdlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYkZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3UHJpdmF0
ZS5oPgpAQCAtMzI1LDcgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIGNhbmNlbE91dHN0YW5kaW5nQ2hl
Y2soY29uc3QKICAgICAgICAgICAgIExPR19FUlJPUigiSmF2YVNjcmlwdCByZXF1ZXN0cyBjYW4g
b25seSBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgW1tmcmFtZSBfYnJpZGdlXSBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpKU1N0cmluZ107CisgICAgICAg
IFtmcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6SlNTdHJpbmdd
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghcmVxdWVzdCkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJjb3VsZCBub3QgbG9hZCBVUkwgJUAiLCBbcmVxdWVzdCBVUkxdKTsKQEAgLTM3OSwx
MSArMzc4LDYgQEAgc3RhdGljIHZvaWQgY2FuY2VsT3V0c3RhbmRpbmdDaGVjayhjb25zdAogICAg
IHJldHVybiBbX2RhdGFTb3VyY2Ugd2ViRnJhbWVdOwogfQogCi0tIChXZWJGcmFtZUJyaWRnZSAq
KWJyaWRnZQotewotICAgIHJldHVybiBbW3NlbGYgd2ViRnJhbWVdIF9icmlkZ2VdOwotfQotCiAt
IChXZWJWaWV3ICopd2ViVmlldwogewogICAgIHJldHVybiBbW3NlbGYgd2ViRnJhbWVdIHdlYlZp
ZXddOwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0JKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4CiAKIHN0YXRpYyBTRUwgc2VsZWN0b3JGb3JL
ZXlFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBoZWxw
ZXIgZnVuY3Rpb24gaXMgZm9yIHRoZSBhdXRvLWZpbGwgY29kZSBzbyB0aGUgYnJpZGdlIGNhbiBw
YXNzIGEgc2VsZWN0b3IgdG8gdGhlIGZvcm0gZGVsZWdhdGUuICAKKyAgICAvLyBGSVhNRTogVGhp
cyBoZWxwZXIgZnVuY3Rpb24gaXMgZm9yIHRoZSBhdXRvLWZpbGwgY29kZSBzbyB3ZSBjYW4gcGFz
cyBhIHNlbGVjdG9yIHRvIHRoZSBmb3JtIGRlbGVnYXRlLiAgCiAgICAgLy8gRXZlbnR1YWxseSwg
d2Ugc2hvdWxkIG1vdmUgYWxsIG9mIHRoZSBhdXRvLWZpbGwgY29kZSBkb3duIHRvIFdlYktpdCBh
bmQgcmVtb3ZlIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uIGJ5CiAgICAgLy8gbm90IHJlbHlp
bmcgb24gdGhlIHNlbGVjdG9yIGluIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uCiAgICAgLy8gVGhl
IGtleSBpZGVudGlmaWVycyBhcmUgZnJvbSA8aHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVs
LTMtRXZlbnRzL2tleXNldC5odG1sI0tleVNldC1TZXQ+CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUJyaWRnZS5oCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwz
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVG
cmFtZUJyaWRnZS5oPgotCi1AY2xhc3MgV2ViRnJhbWU7Ci0KLUBpbnRlcmZhY2UgV2ViRnJhbWVC
cmlkZ2UgOiBXZWJDb3JlRnJhbWVCcmlkZ2UgewotQHB1YmxpYwotICAgIFdlYkZyYW1lICpfd2Vi
RnJhbWU7Ci19Ci0tICh2b2lkKXNldFdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwotLSAo
V2ViRnJhbWUgKil3ZWJGcmFtZTsKLUBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCi0K
LSNpbXBvcnQgIldlYkZyYW1lLmgiCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZUJyaWRnZQot
Ci0tICh2b2lkKXNldFdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwotewotICAgIF93ZWJG
cmFtZSA9IHdlYkZyYW1lOwotfQotCi0tIChXZWJGcmFtZSAqKXdlYkZyYW1lCi17Ci0gICAgcmV0
dXJuIF93ZWJGcmFtZTsKLX0KLQotQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmll
d0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgogI2ltcG9ydCAi
V2ViRm9ybURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVMb2FkRGVsZWdhdGUuaCIKICNp
bXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCkBAIC0xNDUsNyArMTQ0LDYgQEAgV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OldlYkZyYW1lTG9hZGVyQ2xpZQogCiB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpmcmFtZUxvYWRlckRlc3Ryb3llZCgpCiB7Ci0gICAgQVNTRVJUKCFtX3dlYkZyYW1l
LT5fcHJpdmF0ZS0+YnJpZGdlKTsKICAgICBkZWxldGUgdGhpczsKIH0KIApAQCAtMjEyLDggKzIx
MCw2IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVAKIAogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUGFyZW50NCgpCiB7Ci0gICAgW21fd2Vi
RnJhbWUtPl9wcml2YXRlLT5icmlkZ2UgY2xvc2VdOwotICAgIG1fd2ViRnJhbWUtPl9wcml2YXRl
LT5icmlkZ2UgPSBuaWw7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2Fk
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCkBAIC05MDgsOCArOTA0LDggQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6cHJlcGFyZUZvckRhdAogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSB3b3Jr
IHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IHJlc2lnbmluZyBmaXJzdCByZXBvbmRlciBjYW4gZ2V0IGRv
bmUuCiAgICAgLy8gVGhlIG1haW4gZXhhbXBsZSB3aGVyZSB0aGlzIGNhbWUgdXAgaXMgdGhlIHRl
eHREaWRFbmRFZGl0aW5nIHRoYXQgaXMgc2VudCB0byB0aGUKLSAgICAvLyBGb3Jtc0RlbGVnYXRl
ICgzMjIzNDEzKS4gIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgX2RldGFjaENoaWxkcmVuLCBz
aW5jZSB0aGF0IHdpbGwKLSAgICAvLyByZW1vdmUgdGhlIHZpZXdzIGFzIGEgc2lkZS1lZmZlY3Qg
b2YgZnJlZWluZyB0aGUgYnJpZGdlLCBhdCB3aGljaCBwb2ludCB3ZSBjYW4ndAorICAgIC8vIEZv
cm1zRGVsZWdhdGUgKDMyMjM0MTMpLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIF9kZXRhY2hD
aGlsZHJlbiwgc2luY2UgdGhhdCB3aWxsCisgICAgLy8gcmVtb3ZlIHRoZSB2aWV3cyBhcyBhIHNp
ZGUtZWZmZWN0IG9mIGZyZWVpbmcgdGhlIGZyYW1lLCBhdCB3aGljaCBwb2ludCB3ZSBjYW4ndAog
ICAgIC8vIHBvc3QgdGhlIEZvcm1EZWxlZ2F0ZSBtZXNzYWdlcy4KICAgICAvLwogICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGNhbiBhbHNvIHRha2UgRmlyc3RSZXNwb25kZXIgYXdheSBmcm9tIGEgY2hp
bGQgb2Ygb3VyIGZyYW1lVmlldyB0aGF0CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlZpZXdGYWN0b3J5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViVmlld0ZhY3RvcnkubW0JKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NiBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdGYWN0b3J5Lmg+CiAKICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUJyaWRnZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lSW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJWaWV3SW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld0ludGVybmFsLmg+
CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkFyY2hpdmVyLm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJBcmNoaXZlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNiBAQAogI2ltcG9ydCAiV2ViRGF0YVNvdXJjZS5oIgogI2ltcG9ydCAiV2ViRG9jdW1lbnQu
aCIKICNpbXBvcnQgIldlYkZyYW1lLmgiCi0jaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogI2lt
cG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2UuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0Fzc2VydGlvbnMuaD4KQEAgLTEzNywxOSArMTM2LDE3IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiArIChXZWJBcmNoaXZlICopYXJjaGl2ZVJhbmdlOihE
T01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IFtyYW5nZSBf
YnJpZGdlXTsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbYnJpZGdlIHdlYkZyYW1lXTsKKyAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBbW1tyYW5nZSBzdGFydENvbnRhaW5lcl0gb3duZXJEb2N1bWVudF0g
d2ViRnJhbWVdOwogICAgIE5TQXJyYXkgKm5vZGVzOwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJp
bmcgPSBbYnJpZGdlIG1hcmt1cFN0cmluZ0Zyb21SYW5nZTpyYW5nZSBub2Rlczombm9kZXNdOwor
ICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBbZnJhbWUgX21hcmt1cFN0cmluZ0Zyb21SYW5n
ZTpyYW5nZSBub2Rlczombm9kZXNdOwogICAgIHJldHVybiBbc2VsZiBfYXJjaGl2ZVdpdGhNYXJr
dXBTdHJpbmc6bWFya3VwU3RyaW5nIGZyb21GcmFtZTpmcmFtZSBub2Rlczpub2Rlc107CiB9CiAK
ICsgKFdlYkFyY2hpdmUgKilhcmNoaXZlTm9kZTooRE9NTm9kZSAqKW5vZGUKIHsKICAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbW25vZGUgb3duZXJEb2N1bWVudF0gd2ViRnJhbWVdOwotICAgIFdlYkZy
YW1lQnJpZGdlICpicmlkZ2UgPSBbZnJhbWUgX2JyaWRnZV07CiAgICAgTlNBcnJheSAqbm9kZXM7
Ci0gICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9IFticmlkZ2UgbWFya3VwU3RyaW5nRnJvbU5v
ZGU6bm9kZSBub2Rlczombm9kZXNdOworICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBbZnJh
bWUgX21hcmt1cFN0cmluZ0Zyb21Ob2RlOm5vZGUgbm9kZXM6Jm5vZGVzXTsKICAgICByZXR1cm4g
W3NlbGYgX2FyY2hpdmVXaXRoTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZyBmcm9tRnJhbWU6ZnJh
bWUgbm9kZXM6bm9kZXNdOwogfQogCkBAIC0xNTksOSArMTU2LDggQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW2ZyYW1lIF9icmlkZ2VdOwogICAgIE5TQXJyYXkg
Km5vZGVzOwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBbYnJpZGdlIG1hcmt1cFN0cmlu
Z0Zyb21SYW5nZTpraXQoY29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPnRvUmFuZ2Uo
KS5nZXQoKSkgbm9kZXM6Jm5vZGVzXTsKKyAgICBOU1N0cmluZyAqbWFya3VwU3RyaW5nID0gW2Zy
YW1lIF9tYXJrdXBTdHJpbmdGcm9tUmFuZ2U6a2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJv
bGxlcigpLT50b1JhbmdlKCkuZ2V0KCkpIG5vZGVzOiZub2Rlc107CiAgICAgV2ViQXJjaGl2ZSAq
YXJjaGl2ZSA9IFtzZWxmIF9hcmNoaXZlV2l0aE1hcmt1cFN0cmluZzptYXJrdXBTdHJpbmcgZnJv
bUZyYW1lOmZyYW1lIG5vZGVzOm5vZGVzXTsKIAogICAgIGlmIChjb3JlRnJhbWUtPmlzRnJhbWVT
ZXQoKSkgewpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0JKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViRG9jdW1lbnQuaCIKICNpbXBvcnQgIldlYkRvY3VtZW50TG9hZGVyTWFjLmgi
Ci0jaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV2ViRnJhbWVMb2FkRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkBAIC0yNDgsNyArMjQ3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5
cGVzRnJvbUNsYXNzKE5TTQogewogICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0g
W3NlbGYgX2RvY3VtZW50RnJhZ21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlXTsKICAgICBpZiAoZnJh
Z21lbnQpCi0gICAgICAgIFtbc2VsZiBfYnJpZGdlXSByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdt
ZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVw
bGFjZTpOTyBtYXRjaFN0eWxlOk5PXTsKKyAgICAgICAgW1tzZWxmIHdlYkZyYW1lXSBfcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RS
ZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6Tk8gbWF0Y2hTdHlsZTpOT107CiB9CiAKIC0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOihXZWJBcmNoaXZl
ICopYXJjaGl2ZQpAQCAtMjYxLDcgKzI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBl
c0Zyb21DbGFzcyhOU00KICAgICAgICAgICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6W21haW5SZXNvdXJjZSBkYXRhXSBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZ107CiAgICAgICAgICAgICAvLyBGSVhNRTogc2VlbXMgcG9vciBm
b3JtIHRvIGRvIHRoaXMgYXMgYSBzaWRlIGVmZmVjdCBvZiBnZXR0aW5nIGEgZG9jdW1lbnQgZnJh
Z21lbnQKICAgICAgICAgICAgIFtzZWxmIF9hZGRUb1VuYXJjaGl2ZVN0YXRlOmFyY2hpdmVdOwot
ICAgICAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2JyaWRn
ZV0gZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6bWFya3VwU3RyaW5nIGJhc2VVUkxT
dHJpbmc6W1ttYWluUmVzb3VyY2UgVVJMXSBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXV07Cisg
ICAgICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiB3ZWJGcmFt
ZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOm1hcmt1cFN0cmluZyBiYXNlVVJM
U3RyaW5nOltbbWFpblJlc291cmNlIFVSTF0gX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ11dOwog
ICAgICAgICAgICAgW21hcmt1cFN0cmluZyByZWxlYXNlXTsKICAgICAgICAgICAgIHJldHVybiBm
cmFnbWVudDsKICAgICAgICAgfSBlbHNlIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGUoTUlNRVR5cGUpKSB7CkBAIC0zMTIsMTIgKzMxMSw2IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICByZXR1cm4gW19wcml2YXRlLT51
bmFyY2hpdmluZ1N0YXRlIHBvcFN1YmZyYW1lQXJjaGl2ZVdpdGhGcmFtZU5hbWU6ZnJhbWVOYW1l
XTsKIH0KIAotLSAoV2ViRnJhbWVCcmlkZ2UgKilfYnJpZGdlCi17Ci0gICAgQVNTRVJUKF9wcml2
YXRlLT5sb2FkZXItPmlzQ29tbWl0dGVkKCkpOwotICAgIHJldHVybiBbW3NlbGYgd2ViRnJhbWVd
IF9icmlkZ2VdOwotfQotCiAtIChXZWJWaWV3ICopX3dlYlZpZXcKIHsKICAgICByZXR1cm4gW1tz
ZWxmIHdlYkZyYW1lXSB3ZWJWaWV3XTsKQEAgLTQ5MSw3ICs0ODQsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAKICAgICBOU0FycmF5ICpkYXRhczsKICAgICBO
U0FycmF5ICpyZXNwb25zZXM7Ci0gICAgW1tzZWxmIF9icmlkZ2VdIGdldEFsbFJlc291cmNlRGF0
YXM6JmRhdGFzIGFuZFJlc3BvbnNlczomcmVzcG9uc2VzXTsKKyAgICBbW3NlbGYgd2ViRnJhbWVd
IF9nZXRBbGxSZXNvdXJjZURhdGFzOiZkYXRhcyBhbmRSZXNwb25zZXM6JnJlc3BvbnNlc107CiAg
ICAgQVNTRVJUKFtkYXRhcyBjb3VudF0gPT0gW3Jlc3BvbnNlcyBjb3VudF0pOwogCiAgICAgTlNN
dXRhYmxlQXJyYXkgKnN1YnJlc291cmNlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6W2RhdGFzIGNvdW50XV07CkBAIC01MTAsNyArNTAzLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogCiAgICAgTlNEYXRhICpkYXRhOwogICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlOwotICAgIGlmICghW1tzZWxmIF9icmlkZ2VdIGdldERh
dGE6JmRhdGEgYW5kUmVzcG9uc2U6JnJlc3BvbnNlIGZvclVSTDpbVVJMIF93ZWJfb3JpZ2luYWxE
YXRhQXNTdHJpbmddXSkKKyAgICBpZiAoIVtbc2VsZiB3ZWJGcmFtZV0gX2dldERhdGE6JmRhdGEg
YW5kUmVzcG9uc2U6JnJlc3BvbnNlIGZvclVSTDpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJp
bmddXSkKICAgICAgICAgcmV0dXJuIFtzZWxmIF9hcmNoaXZlZFN1YnJlc291cmNlRm9yVVJMOlVS
TF07CiAKICAgICByZXR1cm4gW1tbV2ViUmVzb3VyY2UgYWxsb2NdIF9pbml0V2l0aERhdGE6ZGF0
YSBVUkw6VVJMIHJlc3BvbnNlOnJlc3BvbnNlXSBhdXRvcmVsZWFzZV07CkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VJbnRlcm5hbC5oCShyZXZpc2lvbiAzMDk5MykKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTAgKzQxLDcgQEAgY2xhc3MgV2ViRG9jdW1lbnRMb2FkZXJNYWM7CiAKIEBjbGFz
cyBET01Eb2N1bWVudEZyYWdtZW50OwogQGNsYXNzIERPTUVsZW1lbnQ7Ci1AY2xhc3MgTlNFcnJv
cjsKLUBjbGFzcyBOU1VSTDsKIEBjbGFzcyBXZWJBcmNoaXZlOwotQGNsYXNzIFdlYkZyYW1lQnJp
ZGdlOwogQGNsYXNzIFdlYlJlc291cmNlOwogQGNsYXNzIFdlYlZpZXc7CiAKQEAgLTU1LDcgKzUy
LDYgQEAgY2xhc3MgV2ViRG9jdW1lbnRMb2FkZXJNYWM7CiAtICh2b2lkKV9tYWtlUmVwcmVzZW50
YXRpb247CiAtIChCT09MKV9pc0RvY3VtZW50SFRNTDsKIC0gKFdlYlZpZXcgKilfd2ViVmlldzsK
LS0gKFdlYkZyYW1lQnJpZGdlICopX2JyaWRnZTsKIC0gKFdlYkFyY2hpdmUgKilfcG9wU3ViZnJh
bWVBcmNoaXZlV2l0aE5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lOwogLSAoTlNVUkwgKilfVVJM
OwogLSAoRE9NRWxlbWVudCAqKV9pbWFnZUVsZW1lbnRXaXRoSW1hZ2VSZXNvdXJjZTooV2ViUmVz
b3VyY2UgKilyZXNvdXJjZTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2MCArMjksNzcgQEAKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKIAogI2ltcG9y
dCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkludGVybmFsLmgiCisjaW1wb3J0ICJET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSFRNTEVsZW1lbnRJbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01SYW5nZUlu
dGVybmFsLmgiCi0jaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYkNo
cm9tZUNsaWVudC5oIgotI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdnZXIuaCIKICNpbXBvcnQgIldl
YkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRG9jdW1lbnRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV2ViRG9jdW1lbnRMb2FkZXJNYWMuaCIKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdl
LmgiCi0jaW1wb3J0ICJXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCiAjaW1wb3J0
ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIaXN0b3J5SXRlbS5oIgotI2lt
cG9ydCAiV2ViSGlzdG9yeUl0ZW1JbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSGlzdG9yeUl0ZW1Q
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJLaXRTdGF0
aXN0aWNzUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIldl
Yk5TVVJMUmVxdWVzdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5FbWJlZGRl
ZFZpZXcuaCIKLSNpbXBvcnQgIldlYk51bGxQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJXZWJQbHVn
aW4uaCIKLSNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdnZXIuaCIKICNpbXBvcnQg
IldlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2FycmF5
X29iamVjdC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvZGF0ZV9vYmplY3QuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvQVhPYmplY3RDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9ET01J
bXBsZW1lbnRhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2NMb2FkZXIuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVt
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb3JtU3RhdGUuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL2tq
c19iaW5kaW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TbWFydFJlcGxhY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3lz
dGVtVGltZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGV4dFJlc291cmNlRGVjb2Rlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9UeXBpbmdDb21t
YW5kLmg+CisjaW1wb3J0IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L2tqc19wcm94eS5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTURvY3VtZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJLaXQvRE9NRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTUhUTUxFbGVtZW50Lmg+Ci0j
aW1wb3J0IDxXZWJLaXQvRE9NTm9kZS5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTVJhbmdlLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL21hcmt1
cC5oPgorI2ltcG9ydCA8V2ViQ29yZS92aXNpYmxlX3VuaXRzLmg+CiAKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CisKK3VzaW5nIEtKUzo6QXJyYXlJbnN0YW5jZTsKK3VzaW5nIEtKUzo6Qm9vbGVhblR5cGU7
Cit1c2luZyBLSlM6OkRhdGVJbnN0YW5jZTsKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNpbmcg
S0pTOjpHZXR0ZXJTZXR0ZXJUeXBlOwordXNpbmcgS0pTOjpKU0dsb2JhbE9iamVjdDsKK3VzaW5n
IEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsK
K3VzaW5nIEtKUzo6TnVsbFR5cGU7Cit1c2luZyBLSlM6Ok51bWJlclR5cGU7Cit1c2luZyBLSlM6
Ok9iamVjdFR5cGU7Cit1c2luZyBLSlM6OlN0cmluZ1R5cGU7Cit1c2luZyBLSlM6OlVuZGVmaW5l
ZFR5cGU7Cit1c2luZyBLSlM6OlVuc3BlY2lmaWVkVHlwZTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1
cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAt
MTE2LDE4ICsxMzMsMTAgQEAgUmVwZWF0IGxvYWQgb2YgdGhlIHNhbWUgVVJMIChieSBhbnkgb3Ro
ZQogIEFkZCB0byBiYWNrL2ZvcndhcmQgbGlzdDogTk8KICovCiAKLXVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwotCiBOU1N0cmluZyAqV2ViUGFnZUNhY2hlRW50cnlEYXRlS2V5ID0gQCJXZWJQYWdl
Q2FjaGVFbnRyeURhdGVLZXkiOwogTlNTdHJpbmcgKldlYlBhZ2VDYWNoZURhdGFTb3VyY2VLZXkg
PSBAIldlYlBhZ2VDYWNoZURhdGFTb3VyY2VLZXkiOwogTlNTdHJpbmcgKldlYlBhZ2VDYWNoZURv
Y3VtZW50Vmlld0tleSA9IEAiV2ViUGFnZUNhY2hlRG9jdW1lbnRWaWV3S2V5IjsKIAotQGludGVy
ZmFjZSBXZWJGcmFtZSAoRm9yd2FyZERlY2xzKQotLSAodm9pZClfbG9hZEhUTUxTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1bnJlYWNoYWJsZVVSTDoo
TlNVUkwgKil1bnJlYWNoYWJsZVVSTDsKLS0gKFdlYkhpc3RvcnlJdGVtICopX2NyZWF0ZUl0ZW06
KEJPT0wpdXNlT3JpZ2luYWw7Ci0tIChXZWJIaXN0b3J5SXRlbSAqKV9jcmVhdGVJdGVtVHJlZVdp
dGhUYXJnZXRGcmFtZTooV2ViRnJhbWUgKil0YXJnZXRGcmFtZSBjbGlwcGVkQXRUYXJnZXQ6KEJP
T0wpZG9DbGlwOwotQGVuZAotCiBAaW50ZXJmYWNlIE5TVmlldyAoV2ViRnJhbWVQbHVnaW5Ib3N0
aW5nKQogLSAodm9pZClzZXRXZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKIEBlbmQKQEAg
LTEzNiw3ICsxNDUsNiBAQCBOU1N0cmluZyAqV2ViUGFnZUNhY2hlRG9jdW1lbnRWaWV3S2V5ID0g
CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIFticmlkZ2UgcmVsZWFzZV07CiAgICAgW3dlYkZy
YW1lVmlldyByZWxlYXNlXTsKIAogICAgIGRlbGV0ZSBzY3JpcHREZWJ1Z2dlcjsKQEAgLTI0Nywx
MyArMjU1LDcgQEAgRWRpdGFibGVMaW5rQmVoYXZpb3IgY29yZShXZWJLaXRFZGl0YWJsZQogCiBG
cmFtZSogY29yZShXZWJGcmFtZSAqZnJhbWUpCiB7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKCFmcmFtZS0+X3ByaXZhdGUtPmJyaWRnZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZnJhbWUtPl9wcml2YXRlLT5icmlkZ2UtPm1fZnJh
bWU7CisgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUtPl9wcml2YXRlLT5jb3JlRnJhbWUgOiAwOwog
fQogCiBXZWJGcmFtZSAqa2l0KEZyYW1lKiBmcmFtZSkKQEAgLTI4MSwyMSArMjgzLDE2IEBAIFdl
YlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKQogCiArIChQYXNzUmVmUHRyPEZy
YW1lPilfY3JlYXRlRnJhbWVXaXRoUGFnZTooUGFnZSopcGFnZSBmcmFtZU5hbWU6KGNvbnN0IFN0
cmluZyYpbmFtZSBmcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldyBvd25lckVsZW1l
bnQ6KEhUTUxGcmFtZU93bmVyRWxlbWVudCopb3duZXJFbGVtZW50CiB7Ci0gICAgKytXZWJCcmlk
Z2VDb3VudDsKLQogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBraXQocGFnZSk7CiAKLSAgICBXZWJG
cmFtZUJyaWRnZSAqYnJpZGdlID0gW1tXZWJGcmFtZUJyaWRnZSBhbGxvY10gaW5pdF07Ci0gICAg
V2ViRnJhbWUgKmZyYW1lID0gW1tzZWxmIGFsbG9jXSBfaW5pdFdpdGhXZWJGcmFtZVZpZXc6ZnJh
bWVWaWV3IHdlYlZpZXc6d2ViVmlldyBicmlkZ2U6YnJpZGdlXTsKKyAgICBXZWJGcmFtZSAqZnJh
bWUgPSBbW3NlbGYgYWxsb2NdIF9pbml0V2l0aFdlYkZyYW1lVmlldzpmcmFtZVZpZXcgd2ViVmll
dzp3ZWJWaWV3XTsKICAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IG5ldyBGcmFtZShwYWdl
LCBvd25lckVsZW1lbnQsIG5ldyBXZWJGcmFtZUxvYWRlckNsaWVudChmcmFtZSkpOwogICAgIFtm
cmFtZSByZWxlYXNlXTsKLSAgICBbYnJpZGdlIHNldFdlYkNvcmVGcmFtZTpjb3JlRnJhbWUuZ2V0
KCldOwotICAgIFticmlkZ2UgcmVsZWFzZV07CiAKICAgICBjb3JlRnJhbWUtPnRyZWUoKS0+c2V0
TmFtZShuYW1lKTsKICAgICBjb3JlRnJhbWUtPmluaXQoKTsKIAotICAgIFticmlkZ2Ugc2V0VGV4
dFNpemVNdWx0aXBsaWVyOlt3ZWJWaWV3IHRleHRTaXplTXVsdGlwbGllcl1dOworICAgIFtmcmFt
ZSBfc2V0VGV4dFNpemVNdWx0aXBsaWVyOlt3ZWJWaWV3IHRleHRTaXplTXVsdGlwbGllcl1dOwog
CiAgICAgcmV0dXJuIGNvcmVGcmFtZS5yZWxlYXNlKCk7CiB9CkBAIC0zMjIsMTEgKzMxOSw2IEBA
IFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKQogICAgIHJldHVybiBGcmFt
ZUxvYWRlcjo6dGltZU9mTGFzdENvbXBsZXRlZExvYWQoKSAtIGtDRkFic29sdXRlVGltZUludGVy
dmFsU2luY2UxOTcwOwogfQogCi0tIChXZWJGcmFtZUJyaWRnZSAqKV9icmlkZ2UKLXsKLSAgICBy
ZXR1cm4gX3ByaXZhdGUtPmJyaWRnZTsKLX0KLQogLSAodm9pZClfbG9hZFVSTDooTlNVUkwgKilV
UkwgcmVmZXJyZXI6KE5TU3RyaW5nICopcmVmZXJyZXIgaW50b0NoaWxkOihXZWJGcmFtZSAqKWNo
aWxkRnJhbWUKIHsKICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7CkBAIC00MDAsNyArMzkyLDcgQEAg
V2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAgICAgaWYgKF9wcml2YXRl
LT5zY3JpcHREZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgS0pTOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY29yZShzZWxmKS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvcmUoc2VsZiktPnNj
cmlwdFByb3h5KCktPmdsb2JhbE9iamVjdCgpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQxNiwxNCArNDA4LDEzIEBAIFdlYlZpZXcgKmdldFdlYlZpZXco
V2ViRnJhbWUgKndlYkZyYW1lKQogICAgIF9wcml2YXRlLT5zY3JpcHREZWJ1Z2dlciA9IDA7CiB9
CiAKLS0gKGlkKV9pbml0V2l0aFdlYkZyYW1lVmlldzooV2ViRnJhbWVWaWV3ICopZnYgd2ViVmll
dzooV2ViVmlldyAqKXYgYnJpZGdlOihXZWJGcmFtZUJyaWRnZSAqKWJyaWRnZQorLSAoaWQpX2lu
aXRXaXRoV2ViRnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmdiB3ZWJWaWV3OihXZWJWaWV3ICop
dgogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCiAgICAgX3ByaXZhdGUgPSBbW1dlYkZyYW1lUHJpdmF0ZSBhbGxvY10gaW5p
dF07Ci0gICAgX3ByaXZhdGUtPmJyaWRnZSA9IFticmlkZ2UgcmV0YWluXTsKICAgICBbYnJpZGdl
IHNldFdlYkZyYW1lOnNlbGZdOwogCiAgICAgaWYgKGZ2KSB7CkBAIC00MzEsNiArNDIyLDggQEAg
V2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAgICAgICAgIFtmdiBfc2V0
V2ViRnJhbWU6c2VsZl07CiAgICAgfQogCisgICAgX3ByaXZhdGUtPnNob3VsZENyZWF0ZVJlbmRl
cmVycyA9IFlFUzsKKwogICAgICsrV2ViRnJhbWVDb3VudDsKIAogICAgIHJldHVybiBzZWxmOwpA
QCAtNDU2LDcgKzQ0OSw2IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1l
KQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoY29yZUZyYW1lKSkgewogICAgICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBraXQoZnJhbWUp
OwotICAgICAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW3dlYkZyYW1lIF9icmlkZ2VdOwog
ICAgICAgICAvLyBOZXZlciBjYWxsIHNldERyYXdzQmFja2dyb3VuZDpZRVMgaGVyZSBvbiB0aGUg
c2Nyb2xsIHZpZXcgb3IgdGhlIGJhY2tncm91bmQgY29sb3Igd2lsbAogICAgICAgICAvLyBmbGFz
aCBiZXR3ZWVuIHBhZ2VzIGxvYWRzLiBzZXREcmF3c0JhY2tncm91bmQ6WUVTIHdpbGwgYmUgY2Fs
bGVkIGluIF9mcmFtZUxvYWRDb21wbGV0ZWQuCiAgICAgICAgIGlmICghZHJhd3NCYWNrZ3JvdW5k
KQpAQCAtNDY3LDggKzQ1OSw4IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZy
YW1lKQogICAgICAgICAgICAgW2RvY3VtZW50VmlldyBzZXREcmF3c0JhY2tncm91bmQ6ZHJhd3NC
YWNrZ3JvdW5kXTsKICAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KV0pCiAgICAgICAgICAgICBbZG9jdW1lbnRW
aWV3IHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwotICAgICAgICBbYnJpZGdl
IHNldERyYXdzQmFja2dyb3VuZDpkcmF3c0JhY2tncm91bmRdOwotICAgICAgICBbYnJpZGdlIHNl
dEJhc2VCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKKyAgICAgICAgW3NlbGYgX3Nl
dERyYXdzQmFja2dyb3VuZDpkcmF3c0JhY2tncm91bmRdOworICAgICAgICBbc2VsZiBfc2V0QmFz
ZUJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwogICAgIH0KIH0KIApAQCAtNjI5LDYg
KzYyMSw5NzAgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKAogfQog
I2VuZGlmCiAKK3N0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIGpzVmFsdWUpCit7CisgICAgTlNBcHBsZUV2ZW50
RGVzY3JpcHRvciogYWVEZXNjID0gMDsKKyAgICBzd2l0Y2ggKGpzVmFsdWUtPnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEJvb2xlYW5UeXBlOgorICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVF
dmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUtPmdldEJvb2xlYW4o
KV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdUeXBlOgorICAgICAg
ICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhTdHJp
bmc6U3RyaW5nKGpzVmFsdWUtPmdldFN0cmluZygpKV07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOdW1iZXJUeXBlOiB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBqc1Zh
bHVlLT5nZXROdW1iZXIoKTsKKyAgICAgICAgICAgIGludCBpbnRWYWx1ZSA9IChpbnQpdmFsdWU7
CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpCisgICAgICAgICAgICAgICAgYWVE
ZXNjID0gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhEZXNjcmlwdG9yVHlw
ZTp0eXBlU0ludDMyIGJ5dGVzOiZpbnRWYWx1ZSBsZW5ndGg6c2l6ZW9mKGludFZhbHVlKV07Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWVEZXNjID0gW05TQXBwbGVFdmVudERl
c2NyaXB0b3IgZGVzY3JpcHRvcldpdGhEZXNjcmlwdG9yVHlwZTp0eXBlSUVFRTY0Qml0RmxvYXRp
bmdQb2ludCBieXRlczomdmFsdWUgbGVuZ3RoOnNpemVvZih2YWx1ZSldOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBlOiB7CisgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0ganNWYWx1ZS0+Z2V0T2JqZWN0KCk7CisgICAgICAgICAgICBp
ZiAob2JqZWN0LT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkgeworICAgICAgICAgICAg
ICAgIERhdGVJbnN0YW5jZSogZGF0ZSA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KG9iamVj
dCk7CisgICAgICAgICAgICAgICAgZG91YmxlIG1zID0gMDsKKyAgICAgICAgICAgICAgICBpbnQg
dHpPZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGlmIChkYXRlLT5nZXRUaW1lKG1zLCB0ek9m
ZnNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZBYnNvbHV0ZVRpbWUgdXRjU2Vjb25kcyA9
IG1zIC8gMTAwMCAtIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwOworICAgICAgICAg
ICAgICAgICAgICBMb25nRGF0ZVRpbWUgbGR0OworICAgICAgICAgICAgICAgICAgICBpZiAobm9F
cnIgPT0gVUNDb252ZXJ0Q0ZBYnNvbHV0ZVRpbWVUb0xvbmdEYXRlVGltZSh1dGNTZWNvbmRzLCAm
bGR0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNj
cmlwdG9yIGRlc2NyaXB0b3JXaXRoRGVzY3JpcHRvclR5cGU6dHlwZUxvbmdEYXRlVGltZSBieXRl
czombGR0IGxlbmd0aDpzaXplb2YobGR0KV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmQXJyYXlJbnN0YW5j
ZTo6aW5mbykpIHsKKyAgICAgICAgICAgICAgICBzdGF0aWMgSGFzaFNldDxKU09iamVjdCo+IHZp
c2l0ZWRFbGVtczsKKyAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRFbGVtcy5jb250YWlucyhv
YmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRFbGVtcy5hZGQob2JqZWN0KTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFycmF5SW5zdGFuY2Uq
IGFycmF5ID0gc3RhdGljX2Nhc3Q8QXJyYXlJbnN0YW5jZSo+KG9iamVjdCk7CisgICAgICAgICAg
ICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGxpc3REZXNjcmlwdG9y
XTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtSXRlbXMgPSBhcnJheS0+Z2V0TGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1J
dGVtczsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgW2FlRGVzYyBpbnNlcnREZXNjcmlw
dG9yOmFlRGVzY0Zyb21KU1ZhbHVlKGV4ZWMsIGFycmF5LT5nZXRJdGVtKGkpKSBhdEluZGV4OjBd
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEVsZW1z
LnJlbW92ZShvYmplY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghYWVEZXNjKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSogcHJpbWl0aXZl
ID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9y
IG51bGxEZXNjcmlwdG9yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKGV4ZWMsIHByaW1pdGl2ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFVuZGVmaW5lZFR5cGU6
CisgICAgICAgICAgICBhZURlc2MgPSBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9y
V2l0aFR5cGVDb2RlOmNNaXNzaW5nVmFsdWVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfRVJST1IoIlVua25vd24gSmF2YVNjcmlwdCB0eXBl
OiAlZCIsIGpzVmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAvLyBubyBicmVhazsKKyAgICAg
ICAgY2FzZSBVbnNwZWNpZmllZFR5cGU6CisgICAgICAgIGNhc2UgTnVsbFR5cGU6CisgICAgICAg
IGNhc2UgR2V0dGVyU2V0dGVyVHlwZToKKyAgICAgICAgICAgIGFlRGVzYyA9IFtOU0FwcGxlRXZl
bnREZXNjcmlwdG9yIG51bGxEZXNjcmlwdG9yXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gYWVEZXNjOworfQorCistIChOU1N0cmluZyAqKV9kb21haW4KK3sK
KyAgICBEb2N1bWVudCAqZG9jID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAg
ICBpZiAoZG9jKQorICAgICAgICByZXR1cm4gZG9jLT5kb21haW4oKTsKKyAgICByZXR1cm4gbmls
OworfQorCistICh2b2lkKV9hZGREYXRhOihOU0RhdGEgKilkYXRhCit7CisgICAgRG9jdW1lbnQg
KmRvYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgCisgICAgLy8gRG9j
dW1lbnQgbWF5IGJlIG5pbCBpZiB0aGUgcGFydCBpcyBhYm91dCB0byByZWRpcmVjdAorICAgIC8v
IGFzIGEgcmVzdWx0IG9mIEpTIGV4ZWN1dGluZyBkdXJpbmcgbG9hZCwgaS5lLiBvbmUgZnJhbWUK
KyAgICAvLyBjaGFuZ2luZyBhbm90aGVyJ3MgbG9jYXRpb24gYmVmb3JlIHRoZSBmcmFtZSdzIGRv
Y3VtZW50CisgICAgLy8gaGFzIGJlZW4gY3JlYXRlZC4gCisgICAgaWYgKGRvYykgeworICAgICAg
ICBkb2MtPnNldFNob3VsZENyZWF0ZVJlbmRlcmVycyhfcHJpdmF0ZS0+c2hvdWxkQ3JlYXRlUmVu
ZGVyZXJzKTsKKyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCktPmFkZERhdGEo
KGNvbnN0IGNoYXIgKilbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0pOworICAgIH0KK30KKwor
LSAoTlNTdHJpbmcgKilfc3RyaW5nV2l0aERvY3VtZW50VHlwZVN0cmluZ0FuZE1hcmt1cFN0cmlu
ZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+ZG9jdW1lbnRUeXBlU3RyaW5nKCkgKyBtYXJrdXBTdHJpbmc7Cit9CisKKy0gKE5TQXJy
YXkgKilfbm9kZXNGcm9tTGlzdDooVmVjdG9yPE5vZGUqPiAqKW5vZGVzVmVjdG9yCit7CisgICAg
c2l6ZV90IHNpemUgPSBub2Rlc1ZlY3Rvci0+c2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICpu
b2RlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgW25vZGVzIGFkZE9iamVjdDpb
RE9NTm9kZSBfd3JhcE5vZGU6KCpub2Rlc1ZlY3RvcilbaV1dXTsKKyAgICByZXR1cm4gbm9kZXM7
Cit9CisKKy0gKE5TU3RyaW5nICopX21hcmt1cFN0cmluZ0Zyb21Ob2RlOihET01Ob2RlICopbm9k
ZSBub2RlczooTlNBcnJheSAqKilub2RlcworeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5ldmVy
ICJmb3IgaW50ZXJjaGFuZ2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIG5leHQgbWV0aG9kLgor
ICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7CisgICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9
IGNyZWF0ZU1hcmt1cChbbm9kZSBfbm9kZV0sIEluY2x1ZGVOb2RlLCBub2RlcyA/ICZub2RlTGlz
dCA6IDApOworICAgIGlmIChub2RlcykKKyAgICAgICAgKm5vZGVzID0gW3NlbGYgX25vZGVzRnJv
bUxpc3Q6Jm5vZGVMaXN0XTsKKworICAgIHJldHVybiBbc2VsZiBfc3RyaW5nV2l0aERvY3VtZW50
VHlwZVN0cmluZ0FuZE1hcmt1cFN0cmluZzptYXJrdXBTdHJpbmddOworfQorCistIChOU1N0cmlu
ZyAqKV9tYXJrdXBTdHJpbmdGcm9tUmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ugbm9kZXM6KE5TQXJy
YXkgKiopbm9kZXMKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNo
YW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJldmlvdXMgbWV0aG9kLgorICAgIFZlY3Rv
cjxOb2RlKj4gbm9kZUxpc3Q7CisgICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9IGNyZWF0ZU1h
cmt1cChbcmFuZ2UgX3JhbmdlXSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwLCBBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlKTsKKyAgICBpZiAobm9kZXMpCisgICAgICAgICpub2RlcyA9IFtzZWxmIF9ub2Rl
c0Zyb21MaXN0OiZub2RlTGlzdF07CisKKyAgICByZXR1cm4gW3NlbGYgX3N0cmluZ1dpdGhEb2N1
bWVudFR5cGVTdHJpbmdBbmRNYXJrdXBTdHJpbmc6bWFya3VwU3RyaW5nXTsKK30KKworLSAoTlNT
dHJpbmcgKilfc2VsZWN0ZWRTdHJpbmcKK3sKKyAgICBTdHJpbmcgdGV4dCA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGVkVGV4dCgpOworICAgIHRleHQucmVwbGFjZSgnXFwnLCBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIHJldHVybiB0
ZXh0OworfQorCistIChOU1N0cmluZyAqKV9zdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQoreworICAgIC8vIFRoaXMgd2lsbCBnaXZlIGEgc3lzdGVtIG1hbGxvYydkIGJ1ZmZlciB0aGF0
IGNhbiBiZSB0dXJuZWQgZGlyZWN0bHkgaW50byBhbiBOU1N0cmluZworICAgIHVuc2lnbmVkIGxl
bmd0aDsKKyAgICBVQ2hhciogYnVmID0gcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIo
W3JhbmdlIF9yYW5nZV0sIGxlbmd0aCk7CisgICAgCisgICAgaWYgKCFidWYpCisgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nXTsKKyAgICAKKyAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJl
bmN5U3ltYm9sID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJv
bCgpOworICAgIGlmIChiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sICE9ICdcXCcpCisgICAgICAg
IGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBsZW5ndGg7IG4rKykgCisgICAgICAgICAgICBpZiAo
YnVmW25dID09ICdcXCcpCisgICAgICAgICAgICAgICAgYnVmW25dID0gYmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbDsKKworICAgIC8vIFRyYW5zZmVyIGJ1ZmZlciBvd25lcnNoaXAgdG8gTlNTdHJp
bmcKKyAgICByZXR1cm4gW1tbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29w
eTpidWYgbGVuZ3RoOmxlbmd0aCBmcmVlV2hlbkRvbmU6WUVTXSBhdXRvcmVsZWFzZV07Cit9CisK
Ky0gKHZvaWQpX2ZvcmNlTGF5b3V0QWRqdXN0aW5nVmlld1NpemU6KEJPT0wpZmxhZworeworICAg
IF9wcml2YXRlLT5jb3JlRnJhbWUtPmZvcmNlTGF5b3V0KCFmbGFnKTsKKyAgICBpZiAoZmxhZykK
KyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwor
fQorCistICh2b2lkKV9mb3JjZUxheW91dFdpdGhNaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5Q
YWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdGluZ1Zp
ZXdTaXplOihCT09MKWZsYWcKK3sKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5mb3JjZUxheW91
dFdpdGhQYWdlV2lkdGhSYW5nZShtaW5QYWdlV2lkdGgsIG1heFBhZ2VXaWR0aCwgZmxhZyk7Cit9
CisKKy0gKHZvaWQpX3NlbmRTY3JvbGxFdmVudAoreworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbmRTY3JvbGxFdmVudCgpOworfQorCistICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QK
K3sKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJl
bnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKKyAgICBBU1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5wYWlu
dCgmY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Cit9CisKKy8vIFVzZWQgYnkgcGFn
aW5hdGlvbiBjb2RlIGNhbGxlZCBmcm9tIEFwcEtpdCB3aGVuIGEgc3RhbmRhbG9uZSB3ZWIgcGFn
ZSBpcyBwcmludGVkLgorLSAoTlNBcnJheSopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0
aFNjYWxlRmFjdG9yOihmbG9hdClwcmludFdpZHRoU2NhbGVGYWN0b3IgcHJpbnRIZWlnaHQ6KGZs
b2F0KXByaW50SGVpZ2h0Cit7CisgICAgTlNNdXRhYmxlQXJyYXkqIHBhZ2VzID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjVdOworICAgIGlmIChwcmludFdpZHRoU2NhbGVGYWN0
b3IgPD0gMCkgeworICAgICAgICBMT0dfRVJST1IoInByaW50V2lkdGhTY2FsZUZhY3RvciBoYXMg
YmFkIHZhbHVlICUuMmYiLCBwcmludFdpZHRoU2NhbGVGYWN0b3IpOworICAgICAgICByZXR1cm4g
cGFnZXM7CisgICAgfQorICAgIAorICAgIGlmIChwcmludEhlaWdodCA8PSAwKSB7CisgICAgICAg
IExPR19FUlJPUigicHJpbnRIZWlnaHQgaGFzIGJhZCB2YWx1ZSAlLjJmIiwgcHJpbnRIZWlnaHQp
OworICAgICAgICByZXR1cm4gcGFnZXM7CisgICAgfQorCisgICAgaWYgKCFfcHJpdmF0ZS0+Y29y
ZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpIHx8ICFfcHJpdmF0ZS0+
Y29yZUZyYW1lLT52aWV3KCkpIHJldHVybiBwYWdlczsKKyAgICBSZW5kZXJWaWV3KiByb290ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVmlldyAqPihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgp
LT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIXJvb3QpIHJldHVybiBwYWdlczsKKyAgICAKKyAgICBG
cmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm4gcGFnZXM7CisKKyAgICBOU1ZpZXcqIGRvY3VtZW50VmlldyA9
IHZpZXctPmRvY3VtZW50VmlldygpOworICAgIGlmICghZG9jdW1lbnRWaWV3KQorICAgICAgICBy
ZXR1cm4gcGFnZXM7CisKKyAgICBmbG9hdCBjdXJyUGFnZUhlaWdodCA9IHByaW50SGVpZ2h0Owor
ICAgIGZsb2F0IGRvY0hlaWdodCA9IHJvb3QtPmxheWVyKCktPmhlaWdodCgpOworICAgIGZsb2F0
IGRvY1dpZHRoID0gcm9vdC0+bGF5ZXIoKS0+d2lkdGgoKTsKKyAgICBmbG9hdCBwcmludFdpZHRo
ID0gZG9jV2lkdGgvcHJpbnRXaWR0aFNjYWxlRmFjdG9yOworICAgIAorICAgIC8vIFdlIG5lZWQg
dG8gZ2l2ZSB0aGUgcGFydCB0aGUgb3Bwb3J0dW5pdHkgdG8gYWRqdXN0IHRoZSBwYWdlIGhlaWdo
dCBhdCBlYWNoIHN0ZXAuCisgICAgZm9yIChmbG9hdCBpID0gMDsgaSA8IGRvY0hlaWdodDsgaSAr
PSBjdXJyUGFnZUhlaWdodCkgeworICAgICAgICBmbG9hdCBwcm9wb3NlZEJvdHRvbSA9IG1pbihk
b2NIZWlnaHQsIGkgKyBwcmludEhlaWdodCk7CisgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUt
PmFkanVzdFBhZ2VIZWlnaHQoJnByb3Bvc2VkQm90dG9tLCBpLCBwcm9wb3NlZEJvdHRvbSwgaSk7
CisgICAgICAgIGN1cnJQYWdlSGVpZ2h0ID0gbWF4KDEuMGYsIHByb3Bvc2VkQm90dG9tIC0gaSk7
CisgICAgICAgIGZvciAoZmxvYXQgaiA9IDA7IGogPCBkb2NXaWR0aDsgaiArPSBwcmludFdpZHRo
KSB7CisgICAgICAgICAgICBOU1ZhbHVlKiB2YWwgPSBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OiBO
U01ha2VSZWN0KGosIGksIHByaW50V2lkdGgsIGN1cnJQYWdlSGVpZ2h0KV07CisgICAgICAgICAg
ICBbcGFnZXMgYWRkT2JqZWN0OiB2YWxdOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiBwYWdlczsKK30KKworLy8gVGhpcyBpcyB0byBzdXBwb3J0IHRoZSBjYXNlIHdoZXJlIGEg
d2VidmlldyBpcyBlbWJlZGRlZCBpbiB0aGUgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZAorLSAo
dm9pZClfYWRqdXN0UGFnZUhlaWdodE5ldzooZmxvYXQgKiluZXdCb3R0b20gdG9wOihmbG9hdClv
bGRUb3AgYm90dG9tOihmbG9hdClvbGRCb3R0b20gbGltaXQ6KGZsb2F0KWJvdHRvbUxpbWl0Cit7
CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+YWRqdXN0UGFnZUhlaWdodChuZXdCb3R0b20sIG9s
ZFRvcCwgb2xkQm90dG9tLCBib3R0b21MaW1pdCk7Cit9CisKKy0gKE5TT2JqZWN0ICopX2NvcHlS
ZW5kZXJOb2RlOihSZW5kZXJPYmplY3QgKilub2RlIGNvcGllcjooaWQgPFdlYkNvcmVSZW5kZXJU
cmVlQ29waWVyPiljb3BpZXIKK3sKKyAgICBOU011dGFibGVBcnJheSAqY2hpbGRyZW4gPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQg
PSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CisgICAgICAgIFtjaGlsZHJlbiBhZGRPYmplY3Q6W3NlbGYgX2NvcHlSZW5kZXJOb2RlOmNo
aWxkIGNvcGllcjpjb3BpZXJdXTsKKyAgICB9CisgICAgICAgICAgCisgICAgTlNTdHJpbmcgKm5h
bWUgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aFVURjhTdHJpbmc6bm9kZS0+cmVuZGVyTmFt
ZSgpXTsKKyAgICAKKyAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IG5vZGUtPmlzV2lk
Z2V0KCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihub2RlKSA6IDA7CisgICAgV2lkZ2V0
KiB3aWRnZXQgPSByZW5kZXJXaWRnZXQgPyByZW5kZXJXaWRnZXQtPndpZGdldCgpIDogMDsKKyAg
ICBOU1ZpZXcgKnZpZXcgPSB3aWRnZXQgPyB3aWRnZXQtPmdldFZpZXcoKSA6IG5pbDsKKyAgICAK
KyAgICBpbnQgbngsIG55OworICAgIG5vZGUtPmFic29sdXRlUG9zaXRpb24obngsIG55KTsKKyAg
ICBOU09iamVjdCAqY29waWVkTm9kZSA9IFtjb3BpZXIgbm9kZVdpdGhOYW1lOm5hbWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOk5TTWFrZVBvaW50KG54
LG55KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Q6TlNN
YWtlUmVjdChub2RlLT54UG9zKCksIG5vZGUtPnlQb3MoKSwgbm9kZS0+d2lkdGgoKSwgbm9kZS0+
aGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmll
dzp2aWV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjpj
aGlsZHJlbl07CisgICAgCisgICAgW25hbWUgcmVsZWFzZV07CisgICAgW2NoaWxkcmVuIHJlbGVh
c2VdOworICAgIAorICAgIHJldHVybiBjb3BpZWROb2RlOworfQorCistIChOU09iamVjdCAqKV9j
b3B5UmVuZGVyVHJlZTooaWQgPFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyPiljb3BpZXIKK3sKKyAg
ICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyKSB7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAg
IHJldHVybiBbc2VsZiBfY29weVJlbmRlck5vZGU6cmVuZGVyZXIgY29waWVyOmNvcGllcl07Cit9
CisKK3N0YXRpYyBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChE
T01FbGVtZW50KiBlbGVtZW50KQoreworICAgIE5vZGUqIG5vZGUgPSBbZWxlbWVudCBfbm9kZV07
CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpOworICAgIHJldHVybiBuaWw7Cit9CisK
K3N0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxl
bWVudCAqZWxlbWVudCkKK3sKKyAgICBOb2RlICpub2RlID0gW2VsZW1lbnQgX25vZGVdOworICAg
IC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBhbiBYU0wgZmlsZSBvbgorICAg
IC8vIG1hcHMuZ29vZ2xlLmNvbSBjcmFzaGVzIG90aGVyd2lzZSBiZWNhdXNlIGl0IGlzIGFuIHhz
bHQgZmlsZQorICAgIC8vIHRoYXQgY29udGFpbnMgPGZvcm0+IGVsZW1lbnRzIHRoYXQgYXJlbid0
IGluIGFueSBuYW1lc3BhY2UsIHNvCisgICAgLy8gdGhleSBjb21lIG91dCBhcyBnZW5lcmljIENN
TCBlbGVtZW50cworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCAqPihub2RlKTsKKyAg
ICB9CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoRE9NRWxlbWVudCAqKV9lbGVtZW50V2l0aE5h
bWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1lbnQgKilmb3JtCit7CisgICAgSFRN
TEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9y
bSk7CisgICAgaWYgKGZvcm1FbGVtZW50KSB7CisgICAgICAgIFZlY3RvcjxIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmZvcm1FbGVtZW50czsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIHRhcmdldE5hbWUgPSBuYW1lOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50ICplbHQgPSBlbGVtZW50c1tpXTsKKyAgICAgICAgICAgIC8vIFNr
aXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCisgICAgICAgICAgICBpZiAoZWx0LT5uYW1l
KCkgPT0gdGFyZ2V0TmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW0RPTUVsZW1lbnQgX3dy
YXBFbGVtZW50OmVsdF07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30KKwor
LSAoQk9PTClfZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVtZW50Cit7
CisgICAgSFRNTElucHV0RWxlbWVudCAqaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50RnJvbURP
TUVsZW1lbnQoZWxlbWVudCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCAhPSBuaWwKKyAgICAg
ICAgJiYgaW5wdXRFbGVtZW50LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50OjpURVhU
CisgICAgICAgICYmIGlucHV0RWxlbWVudC0+YXV0b0NvbXBsZXRlKCk7Cit9CisKKy0gKEJPT0wp
X2VsZW1lbnRJc1Bhc3N3b3JkOihET01FbGVtZW50ICopZWxlbWVudAoreworICAgIEhUTUxJbnB1
dEVsZW1lbnQgKmlucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1l
bnQpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQgIT0gbmlsCisgICAgICAgICYmIGlucHV0RWxl
bWVudC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudDo6UEFTU1dPUkQ7Cit9CisKKy0g
KERPTUVsZW1lbnQgKilfZm9ybUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Oworewor
ICAgIEhUTUxJbnB1dEVsZW1lbnQgKmlucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudEZyb21ET01F
bGVtZW50KGVsZW1lbnQpOworICAgIGlmIChpbnB1dEVsZW1lbnQpIHsKKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50ICpmb3JtRWxlbWVudCA9IGlucHV0RWxlbWVudC0+Zm9ybSgpOworICAgICAgICBp
ZiAoZm9ybUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBbRE9NRWxlbWVudCBfd3JhcEVs
ZW1lbnQ6Zm9ybUVsZW1lbnRdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKERPTUVsZW1lbnQgKilfY3VycmVudEZvcm0KK3sKKyAgICByZXR1cm4gW0RPTUVsZW1l
bnQgX3dyYXBFbGVtZW50Ol9wcml2YXRlLT5jb3JlRnJhbWUtPmN1cnJlbnRGb3JtKCldOworfQor
CistIChOU0FycmF5ICopX2NvbnRyb2xzSW5Gb3JtOihET01FbGVtZW50ICopZm9ybQoreworICAg
IE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOworICAgIEhUTUxGb3JtRWxlbWVudCAqZm9y
bUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOworICAgIGlmIChmb3Jt
RWxlbWVudCkgeworICAgICAgICBWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudCo+JiBlbGVt
ZW50cyA9IGZvcm1FbGVtZW50LT5mb3JtRWxlbWVudHM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50cy5hdChpKS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50
cywgb3RoZXIgZHVkcworICAgICAgICAgICAgICAgIERPTUVsZW1lbnQgKmRlID0gW0RPTUVsZW1l
bnQgX3dyYXBFbGVtZW50OmVsZW1lbnRzLmF0KGkpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhPYmplY3Q6ZGVdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIFtyZXN1bHRzIGFkZE9iamVjdDpkZV07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHRzOworfQorCist
IChOU1N0cmluZyAqKV9zZWFyY2hGb3JMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYmVmb3JlRWxl
bWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChsYWJlbHMsIFtlbGVtZW50IF9lbGVt
ZW50XSk7Cit9CisKKy0gKE5TU3RyaW5nICopX21hdGNoTGFiZWxzOihOU0FycmF5ICopbGFiZWxz
IGFnYWluc3RFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAoreworICAgIHJldHVybiBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5tYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KGxhYmVscywgW2VsZW1l
bnQgX2VsZW1lbnRdKTsKK30KKworLSAoTlNVUkwgKilfVVJMV2l0aEF0dHJpYnV0ZVN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBEb2N1bWVudCogZG9jID0gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAvLyBGSVhNRTogaXMgcGFyc2VVUkwgYXBwcm9wcmlhdGUgaGVyZT8KKyAgICByZXR1cm4gZG9j
LT5jb21wbGV0ZVVSTChwYXJzZVVSTChzdHJpbmcpKTsKK30KKworLSAoQk9PTClfc2VhcmNoRm9y
OihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZl
OihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjooQk9P
TClzdGFydEluU2VsZWN0aW9uCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmZp
bmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxl
Y3Rpb24pOworfQorCistICh1bnNpZ25lZClfbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmlu
ZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0Oih1bnNpZ25lZCls
aW1pdAoreworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5tYXJrQWxsTWF0Y2hlc0Zv
clRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOworfQorCistIChCT09MKV9tYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUt
Pm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKK30KKworLSAodm9pZClfc2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTClkb0hpZ2hsaWdodAoreworICAgIF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoZG9I
aWdobGlnaHQpOworfQorCistICh2b2lkKV91bm1hcmtBbGxUZXh0TWF0Y2hlcworeworICAgIERv
Y3VtZW50ICpkb2MgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZG9jLT5yZW1vdmVNYXJrZXJzKERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworfQorCistIChOU0FycmF5ICopX3JlY3RzRm9yVGV4
dE1hdGNoZXMKK3sKKyAgICBEb2N1bWVudCAqZG9jID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsK
KyAgICAKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
XTsKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBkb2MtPnJlbmRlcmVkUmVjdHNGb3JNYXJr
ZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIHVuc2lnbmVkIGNvdW50ID0gcmVj
dHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyAr
K2luZGV4KQorICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnJlY3RzW2luZGV4XV1dOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQp
X3NldFRleHRTaXplTXVsdGlwbGllcjooZmxvYXQpbXVsdGlwbGllcgoreworICAgIGludCBuZXda
b29tRmFjdG9yID0gKGludClyaW50KG11bHRpcGxpZXIgKiAxMDApOworICAgIGlmIChfcHJpdmF0
ZS0+Y29yZUZyYW1lLT56b29tRmFjdG9yKCkgPT0gbmV3Wm9vbUZhY3RvcikgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNldFpvb21GYWN0b3IobmV3
Wm9vbUZhY3RvciwgdHJ1ZSk7Cit9CisKKy0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBb
c2VsZiBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6c3RyaW5nIGZvcmNl
VXNlckdlc3R1cmU6dHJ1ZV07Cit9CisKKy0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzZXJHZXN0dXJl
OihCT09MKWZvcmNlVXNlckdlc3R1cmUKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKSk7CisgICAgCisgICAgSlNWYWx1ZSogcmVzdWx0ID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVzZXJHZXN0dXJl
KTsKKworICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSkgLy8gSW4gY2FzZSB0aGUgc2NyaXB0
IHJlbW92ZWQgb3VyIGZyYW1lIGZyb20gdGhlIHBhZ2UuCisgICAgICAgIHJldHVybiBAIiI7CisK
KyAgICAvLyBUaGlzIGJpemFycmUgc2V0IG9mIHJ1bGVzIG1hdGNoZXMgYmVoYXZpb3IgZnJvbSBX
ZWJLaXQgZm9yIFNhZmFyaSAyLjAuCisgICAgLy8gSWYgeW91IGRvbid0IGxpa2UgaXQsIHVzZSAt
W1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdIG9yIAorICAgIC8vIEpTRXZhbHVh
dGVTY3JpcHQgaW5zdGVhZCwgc2luY2UgdGhleSBoYXZlIGxlc3Mgc3VycHJpc2luZyBzZW1hbnRp
Y3MuCisgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC0+aXNCb29sZWFuKCkgJiYgIXJlc3VsdC0+
aXNTdHJpbmcoKSAmJiAhcmVzdWx0LT5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gQCIiOwor
CisgICAgSlNMb2NrIGxvY2s7CisgICAgcmV0dXJuIFN0cmluZyhyZXN1bHQtPnRvU3RyaW5nKF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdFByb3h5KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCkpKTsKK30KKworLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKV9hZURlc2NCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBBU1NF
UlQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKF9wcml2YXRl
LT5jb3JlRnJhbWUgPT0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSk7
CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+bG9hZGVyKCktPmV4
ZWN1dGVTY3JpcHQoc3RyaW5nLCB0cnVlKTsKKyAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBh
c3MgZXJyb3JzCisgICAgICAgIHJldHVybiAwOworICAgIEpTTG9jayBsb2NrOworICAgIHJldHVy
biBhZURlc2NGcm9tSlNWYWx1ZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHRQcm94eSgpLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOworfQorCistIChOU1JlY3QpX2Nh
cmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGFmZmluaXR5
OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5Cit7CisgICAgcmV0dXJuIFtub2RlIF9ub2Rl
XS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KG9mZnNldCwgc3RhdGljX2Nhc3Q8RUFmZmluaXR5Pihh
ZmZpbml0eSkpOworfQorCistIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlCit7CisgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+Zmlyc3RSZWN0Rm9y
UmFuZ2UoW3JhbmdlIF9yYW5nZV0pOworfQorCistICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTooRE9NUmFuZ2UgKilyYW5nZQoreworICAgIE5TUmVjdCByYW5nZVJlY3QgPSBbc2VsZiBf
Zmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOyAgICAKKyAgICBOb2RlICpzdGFydE5vZGUgPSBb
W3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBfbm9kZV07CisgICAgICAgIAorICAgIGlmIChzdGFydE5v
ZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIFJlbmRlckxheWVyICpsYXll
ciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAgICAgaWYg
KGxheWVyKQorICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUoZW5jbG9zaW5n
SW50UmVjdChyYW5nZVJlY3QpLCBSZW5kZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQsIFJl
bmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgfQorfQorCistIChOU1VSTCAq
KV9iYXNlVVJMCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkt
PmJhc2VVUkwoKTsKK30KKworLSAoTlNTdHJpbmcgKilfc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAq
KWRhdGEKK3sKKyAgICBEb2N1bWVudCogZG9jID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1l
bnQoKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKiBkZWNvZGVyID0gZG9jLT5kZWNvZGVyKCk7CisgICAgaWYgKCFkZWNvZGVyKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBkZWNvZGVyLT5lbmNvZGluZygpLmRlY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5n
dGhdKTsKK30KKworKyAoTlNTdHJpbmcgKilfc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEg
dGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lCit7CisgICAgV2Vi
Q29yZTo6VGV4dEVuY29kaW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgIGlmICgh
ZW5jb2RpbmcuaXNWYWxpZCgpKQorICAgICAgICBlbmNvZGluZyA9IFdpbmRvd3NMYXRpbjFFbmNv
ZGluZygpOworICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Cit9CisKKy0gKEJPT0wpX25l
ZWRzTGF5b3V0Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKSA/IF9w
cml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSA6IGZhbHNlOworfQorCist
IChOU1N0cmluZyAqKV9yZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uCit7CisgICAg
cmV0dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24oX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmVuZGVy
ZXIoKSk7Cit9CisKKy0gKGlkKV9hY2Nlc3NpYmlsaXR5VHJlZQoreworICAgIEFYT2JqZWN0Q2Fj
aGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKyAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUg
fHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4oX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKCFyb290KQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldChyb290KTsKK30KKworLSAodm9pZClfc2V0QmFz
ZUJhY2tncm91bmRDb2xvcjooTlNDb2xvciAqKWJhY2tncm91bmRDb2xvcgoreworICAgIGlmIChf
cHJpdmF0ZS0+Y29yZUZyYW1lICYmIF9wcml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKSkgeworICAg
ICAgICBDb2xvciBjb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2JhY2tncm91bmRDb2xvciBjb2xv
clVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7CisgICAgICAgIF9w
cml2YXRlLT5jb3JlRnJhbWUtPnZpZXcoKS0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihjb2xvcik7
CisgICAgfQorfQorCistICh2b2lkKV9zZXREcmF3c0JhY2tncm91bmQ6KEJPT0wpZHJhd3NCYWNr
Z3JvdW5kCit7CisgICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUgJiYgX3ByaXZhdGUtPmNvcmVG
cmFtZS0+dmlldygpKQorICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCktPnNldFRy
YW5zcGFyZW50KCFkcmF3c0JhY2tncm91bmQpOworfQorCistIChET01SYW5nZSAqKV9yYW5nZUJ5
QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0ZXJhdGlv
bilhbHRlcmF0aW9uIGRpcmVjdGlvbjooU2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVjdGlvbilk
aXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFRleHRHcmFudWxhcml0eSlncmFudWxhcml0eQoreworICAg
IGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlzTm9uZSgp
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rp
b25Db250cm9sbGVyOworICAgIHNlbGVjdGlvbkNvbnRyb2xsZXIuc2V0U2VsZWN0aW9uKF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCkpOworICAg
IHNlbGVjdGlvbkNvbnRyb2xsZXIubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHkpOworICAgIHJldHVybiBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpzZWxlY3Rpb25Db250cm9s
bGVyLnRvUmFuZ2UoKS5nZXQoKV07Cit9CisKKy0gKFRleHRHcmFudWxhcml0eSlfc2VsZWN0aW9u
R3JhbnVsYXJpdHkKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
R3JhbnVsYXJpdHkoKTsKK30KKworLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2Ug
KilyYW5nZQoreworICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpKQor
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBFbGVtZW50
KiBzZWxlY3Rpb25Sb290ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rp
b25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIAorICAgIC8vIE1vdXNlIGV2ZW50cyBtYXkgY2F1c2Ug
VFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9ydGlvbiBvZiB0aGUg
dmlldworICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdp
b24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKKyAgICAvLyBwb3RlbnRp
YWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMuCisgICAg
aWYgKHJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250
YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFu
Z2UoTlNOb3RGb3VuZCwgMCk7CisgICAgaWYgKHJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29w
ZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLT5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICAKKyAgICBSZWZQdHI8
UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3Bl
LCAwLCByYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAg
IEFTU0VSVCh0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOworICAgIGludCBz
dGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkp
OworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+
ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOworICAgIEFTU0VSVCh0ZXN0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOworICAgIGludCBlbmRQb3NpdGlvbiA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKworICAgIHJldHVy
biBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24p
OworfQorCistIChQYXNzUmVmUHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2Up
bnNyYW5nZQoreworICAgIGlmIChuc3JhbmdlLmxvY2F0aW9uID4gSU5UX01BWCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKG5zcmFuZ2UubGVuZ3RoID4gSU5UX01BWCB8fCBuc3JhbmdlLmxv
Y2F0aW9uICsgbnNyYW5nZS5sZW5ndGggPiBJTlRfTUFYKQorICAgICAgICBuc3JhbmdlLmxlbmd0
aCA9IElOVF9NQVggLSBuc3JhbmdlLmxvY2F0aW9uOworCisgICAgLy8gb3VyIGNyaXRpY2FsIGFz
c3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUgb25seSBjYWxsZWQgYnkgaW5wdXQgbWV0aG9kcyB0aGF0
CisgICAgLy8gY29uY2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVj
dGlvbgorICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFu
ZCB0ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAorICAgIC8vIGRpcmVjdGx5IGlu
IHRoZSBkb2N1bWVudCBET00sIHNvIHNlcmlhbGl6YXRpb24gaXMgcHJvYmxlbWF0aWMuIE91ciBz
b2x1dGlvbiBpcworICAgIC8vIHRvIHVzZSB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9mIHRo
ZSBzZWxlY3Rpb24gc3RhcnQgYXMgdGhlIHBvc2l0aW9uYWwgYmFzZS4KKyAgICAvLyBUaGF0IGZp
dHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCisgICAgRWxlbWVudCog
c2VsZWN0aW9uUm9vdCA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9u
Um9vdCA/IHNlbGVjdGlvblJvb3QgOiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aChzY29wZSwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwor
fQorCistIChET01SYW5nZSAqKV9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNy
YW5nZQoreworICAgIHJldHVybiBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpbc2VsZiBfY29udmVydFRv
RE9NUmFuZ2U6bnNyYW5nZV0uZ2V0KCldOworfQorCistIChOU1JhbmdlKV9jb252ZXJ0RE9NUmFu
Z2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZl
cnRUb05TUmFuZ2U6W3JhbmdlIF9yYW5nZV1dOworfQorCistIChET01SYW5nZSAqKV9tYXJrRE9N
UmFuZ2UKK3sKKyAgICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6X3ByaXZhdGUtPmNvcmVG
cmFtZS0+bWFyaygpLnRvUmFuZ2UoKS5nZXQoKV07Cit9CisKKy0gKE5TUmFuZ2UpX21hcmtlZFRl
eHROU1JhbmdlCit7CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2YXRl
LT5jb3JlRnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCldOworfQorCisv
LyBHaXZlbiBwcm9wb3NlZFJhbmdlLCByZXR1cm5zIGFuIGV4dGVuZGVkIHJhbmdlIHRoYXQgaW5j
bHVkZXMgYWRqYWNlbnQgd2hpdGVzcGFjZSB0aGF0IHNob3VsZAorLy8gYmUgZGVsZXRlZCBhbG9u
ZyB3aXRoIHRoZSBwcm9wb3NlZCByYW5nZSBpbiBvcmRlciB0byBwcmVzZXJ2ZSBwcm9wZXIgc3Bh
Y2luZyBhbmQgcHVuY3R1YXRpb24gb2YKKy8vIHRoZSB0ZXh0IHN1cnJvdW5kaW5nIHRoZSBkZWxl
dGlvbi4KKy0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOihE
T01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UKK3sKKyAgICBOb2RlICpzdGFydENvbnRhaW5lciA9IFtb
cHJvcG9zZWRSYW5nZSBzdGFydENvbnRhaW5lcl0gX25vZGVdOworICAgIE5vZGUgKmVuZENvbnRh
aW5lciA9IFtbcHJvcG9zZWRSYW5nZSBlbmRDb250YWluZXJdIF9ub2RlXTsKKyAgICBpZiAoc3Rh
cnRDb250YWluZXIgPT0gbmlsIHx8IGVuZENvbnRhaW5lciA9PSBuaWwpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmRvY3VtZW50KCkgPT0gZW5kQ29u
dGFpbmVyLT5kb2N1bWVudCgpKTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAgIFBv
c2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcHJvcG9zZWRSYW5nZSBzdGFydE9mZnNldF0p
OworICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWluZXIsIFtwcm9wb3NlZFJhbmdlIGVuZE9mZnNl
dF0pOworICAgIFBvc2l0aW9uIG5ld1N0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKS5sZWFkaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKERPV05TVFJFQU0sIHRydWUpOworICAgIGlmIChuZXdTdGFydC5pc051
bGwoKSkKKyAgICAgICAgbmV3U3RhcnQgPSBzdGFydDsKKyAgICBQb3NpdGlvbiBuZXdFbmQgPSBl
bmQuZG93bnN0cmVhbSgpLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKERPV05TVFJFQU0sIHRy
dWUpOworICAgIGlmIChuZXdFbmQuaXNOdWxsKCkpCisgICAgICAgIG5ld0VuZCA9IGVuZDsKKwor
ICAgIG5ld1N0YXJ0ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG5ld1N0YXJ0KTsKKyAgICBu
ZXdFbmQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobmV3RW5kKTsKKworICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5n
ZSgpOworICAgIGludCBleGNlcHRpb24gPSAwOworICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFy
dC5ub2RlKCksIG5ld1N0YXJ0Lm9mZnNldCgpLCBleGNlcHRpb24pOworICAgIHJhbmdlLT5zZXRF
bmQobmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5vZmZzZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBy
ZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6cmFuZ2UuZ2V0KCldOworfQorCisvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBhZGRlZCBhcm91bmQgYVN0cmluZyB0
byBwcmVzZXJ2ZSBwcm9wZXIgc3BhY2luZyBhbmQKKy8vIHB1bmN0dWF0aW9uIHdoZW4gaXTigJrD
hMO0cyBpbnNlcnRlZCBpbnRvIHRoZSByZWNlaXZlcuKAmsOEw7RzIHRleHQgb3ZlciBjaGFyUmFu
Z2UuIFJldHVybnMgYnkgcmVmZXJlbmNlCisvLyBpbiBiZWZvcmVTdHJpbmcgYW5kIGFmdGVyU3Ry
aW5nIGFueSB3aGl0ZXNwYWNlIHRoYXQgc2hvdWxkIGJlIGFkZGVkLCB1bmxlc3MgZWl0aGVyIG9y
IGJvdGggYXJlCisvLyBuaWwuIEJvdGggYXJlIHJldHVybmVkIGFzIG5pbCBpZiBhU3RyaW5nIGlz
IG5pbCBvciBpZiBzbWFydCBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIGFyZSBkaXNhYmxlZC4KKy0g
KHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxh
Y2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJp
bmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZwor
eworICAgIC8vIGdpdmUgYmFjayBuaWwgcG9pbnRlcnMgaW4gY2FzZSBvZiBlYXJseSByZXR1cm5z
CisgICAgaWYgKGJlZm9yZVN0cmluZykKKyAgICAgICAgKmJlZm9yZVN0cmluZyA9IG5pbDsKKyAg
ICBpZiAoYWZ0ZXJTdHJpbmcpCisgICAgICAgICphZnRlclN0cmluZyA9IG5pbDsKKyAgICAgICAg
CisgICAgLy8gaW5zcGVjdCBkZXN0aW5hdGlvbgorICAgIE5vZGUgKnN0YXJ0Q29udGFpbmVyID0g
W1tyYW5nZVRvUmVwbGFjZSBzdGFydENvbnRhaW5lcl0gX25vZGVdOworICAgIE5vZGUgKmVuZENv
bnRhaW5lciA9IFtbcmFuZ2VUb1JlcGxhY2UgZW5kQ29udGFpbmVyXSBfbm9kZV07CisKKyAgICBQ
b3NpdGlvbiBzdGFydFBvcyhzdGFydENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIHN0YXJ0T2Zm
c2V0XSk7CisgICAgUG9zaXRpb24gZW5kUG9zKGVuZENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNl
IGVuZE9mZnNldF0pOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyA9IFZp
c2libGVQb3NpdGlvbihzdGFydFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oZW5kUG9zLCBWUF9ERUZB
VUxUX0FGRklOSVRZKTsKKyAgICAKKyAgICAvLyB0aGlzIGNoZWNrIGFsc28gZW5zdXJlcyBzdGFy
dENvbnRhaW5lciwgc3RhcnRQb3MsIGVuZENvbnRhaW5lciwgYW5kIGVuZFBvcyBhcmUgbm9uLW51
bGwKKyAgICBpZiAoc3RhcnRWaXNpYmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgYWRkTGVhZGluZ1NwYWNlID0gc3Rh
cnRQb3MubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVl
KS5pc051bGwoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0VmlzaWJsZVBvcyk7CisgICAg
aWYgKGFkZExlYWRpbmdTcGFjZSkKKyAgICAgICAgaWYgKFVDaGFyIHByZXZpb3VzQ2hhciA9IHN0
YXJ0VmlzaWJsZVBvcy5wcmV2aW91cygpLmNoYXJhY3RlckFmdGVyKCkpCisgICAgICAgICAgICBh
ZGRMZWFkaW5nU3BhY2UgPSAhaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXND
aGFyLCB0cnVlKTsKKyAgICAKKyAgICBib29sIGFkZFRyYWlsaW5nU3BhY2UgPSBlbmRQb3MudHJh
aWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxs
KCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kVmlzaWJsZVBvcyk7CisgICAgaWYgKGFkZFRyYWls
aW5nU3BhY2UpCisgICAgICAgIGlmIChVQ2hhciB0aGlzQ2hhciA9IGVuZFZpc2libGVQb3MuY2hh
cmFjdGVyQWZ0ZXIoKSkKKyAgICAgICAgICAgIGFkZFRyYWlsaW5nU3BhY2UgPSAhaXNDaGFyYWN0
ZXJTbWFydFJlcGxhY2VFeGVtcHQodGhpc0NoYXIsIGZhbHNlKTsKKyAgICAKKyAgICAvLyBpbnNw
ZWN0IHNvdXJjZQorICAgIGJvb2wgaGFzV2hpdGVzcGFjZUF0U3RhcnQgPSBmYWxzZTsKKyAgICBi
b29sIGhhc1doaXRlc3BhY2VBdEVuZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIHBhc3RlTGVuZ3Ro
ID0gW3Bhc3RlU3RyaW5nIGxlbmd0aF07CisgICAgaWYgKHBhc3RlTGVuZ3RoID4gMCkgeworICAg
ICAgICBOU0NoYXJhY3RlclNldCAqd2hpdGVTZXQgPSBbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFj
ZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdOworICAgICAgICAKKyAgICAgICAgaWYgKFt3aGl0ZVNl
dCBjaGFyYWN0ZXJJc01lbWJlcjpbcGFzdGVTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDowXV0pIHsK
KyAgICAgICAgICAgIGhhc1doaXRlc3BhY2VBdFN0YXJ0ID0gWUVTOworICAgICAgICB9CisgICAg
ICAgIGlmIChbd2hpdGVTZXQgY2hhcmFjdGVySXNNZW1iZXI6W3Bhc3RlU3RyaW5nIGNoYXJhY3Rl
ckF0SW5kZXg6KHBhc3RlTGVuZ3RoIC0gMSldXSkgeworICAgICAgICAgICAgaGFzV2hpdGVzcGFj
ZUF0RW5kID0gWUVTOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGlzc3VlIHRoZSB2
ZXJkaWN0CisgICAgaWYgKGJlZm9yZVN0cmluZyAmJiBhZGRMZWFkaW5nU3BhY2UgJiYgIWhhc1do
aXRlc3BhY2VBdFN0YXJ0KQorICAgICAgICAqYmVmb3JlU3RyaW5nID0gQCIgIjsKKyAgICBpZiAo
YWZ0ZXJTdHJpbmcgJiYgYWRkVHJhaWxpbmdTcGFjZSAmJiAhaGFzV2hpdGVzcGFjZUF0RW5kKQor
ICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBAIiAiOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0
cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcgCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBbRE9NRG9jdW1lbnRGcmFnbWVudCBf
d3JhcERvY3VtZW50RnJhZ21lbnQ6Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKF9wcml2YXRlLT5j
b3JlRnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgYmFzZVVSTFN0cmluZykuZ2V0KCld
OworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoVGV4
dDooTlNTdHJpbmcgKil0ZXh0IGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0Cit7CisgICAg
cmV0dXJuIFtET01Eb2N1bWVudEZyYWdtZW50IF93cmFwRG9jdW1lbnRGcmFnbWVudDpjcmVhdGVG
cmFnbWVudEZyb21UZXh0KFtjb250ZXh0IF9yYW5nZV0sIHRleHQpLmdldCgpXTsKK30KKworLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3Jh
cGhzOihOU0FycmF5ICopbm9kZXMKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwg
IV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIE5TRW51bWVyYXRvciAqbm9kZUVudW0gPSBbbm9kZXMgb2JqZWN0RW51bWVyYXRvcl07
CisgICAgVmVjdG9yPE5vZGUqPiBub2Rlc1ZlY3RvcjsKKyAgICBET01Ob2RlICpub2RlOworICAg
IHdoaWxlICgobm9kZSA9IFtub2RlRW51bSBuZXh0T2JqZWN0XSkpCisgICAgICAgIG5vZGVzVmVj
dG9yLmFwcGVuZChbbm9kZSBfbm9kZV0pOworICAgIAorICAgIHJldHVybiBbRE9NRG9jdW1lbnRG
cmFnbWVudCBfd3JhcERvY3VtZW50RnJhZ21lbnQ6Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoX3By
aXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZXNWZWN0b3IpLmdldCgpXTsKK30KKwor
LSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKWZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNt
YXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxl
Cit7CisgICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+
aXNOb25lKCkgfHwgIWZyYWdtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXBwbHlD
b21tYW5kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5k
b2N1bWVudCgpLCBbZnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRdLCBzZWxlY3RSZXBsYWNlbWVu
dCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKSk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+
cmV2ZWFsU2VsZWN0aW9uKFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7Cit9CisK
Ky0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoTm9kZTooRE9NTm9kZSAqKW5vZGUgc2VsZWN0
UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNt
YXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUKK3sKKyAgICBET01Eb2N1bWVu
dEZyYWdtZW50ICpmcmFnbWVudCA9IFtET01Eb2N1bWVudEZyYWdtZW50IF93cmFwRG9jdW1lbnRG
cmFnbWVudDpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCkuZ2V0KCldOworICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDpub2RlXTsKKyAgICBb
c2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNl
bWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5
bGU6bWF0Y2hTdHlsZV07Cit9CisKKy0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoTWFya3Vw
U3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAq
KWJhc2VVUkxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQg
c21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQoreworICAgIERPTURvY3VtZW50RnJhZ21l
bnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOm1h
cmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOmJhc2VVUkxTdHJpbmddOworICAgIFtzZWxmIF9yZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVj
dFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpOT107Cit9
CisKKy0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNl
bGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9P
TClzbWFydFJlcGxhY2UKK3sKKyAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDpbc2VsZiBfZG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OnRleHQKKyAgICAgICAgaW5Db250ZXh0
OltET01SYW5nZSBfd3JhcFJhbmdlOl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRy
b2xsZXIoKS0+dG9SYW5nZSgpLmdldCgpXV0KKyAgICAgICAgc2VsZWN0UmVwbGFjZW1lbnQ6c2Vs
ZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107
Cit9CisKKy0gKHZvaWQpX2luc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudAor
eworICAgIGlmIChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmlz
Tm9uZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KF9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihSZW5k
ZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQpOworfQorCistIChWaXNpYmxlUG9zaXRpb24p
X3Zpc2libGVQb3NpdGlvbkZvclBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgSW50UG9pbnQg
b3V0ZXJQb2ludChwb2ludCk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQob3V0ZXJQb2lu
dCwgdHJ1ZSk7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3MgPSByZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhyZXN1bHQubG9jYWxQb2lu
dCgpLngoKSwgcmVzdWx0LmxvY2FsUG9pbnQoKS55KCkpOworICAgIGlmICh2aXNpYmxlUG9zLmlz
TnVsbCgpKQorICAgICAgICB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5v
ZGUsIDApKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvczsKK30KKworLSAoRE9NUmFuZ2UgKilfY2hh
cmFjdGVyUmFuZ2VBdFBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XTsKKyAgICBp
ZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmlz
aWJsZVBvc2l0aW9uIHByZXZpb3VzID0gcG9zaXRpb24ucHJldmlvdXMoKTsKKyAgICBpZiAocHJl
dmlvdXMuaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgRE9NUmFuZ2UgKnByZXZpb3VzQ2hhcmFjdGVy
UmFuZ2UgPSBbRE9NUmFuZ2UgX3dyYXBSYW5nZTptYWtlUmFuZ2UocHJldmlvdXMsIHBvc2l0aW9u
KS5nZXQoKV07CisgICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJh
bmdlOnByZXZpb3VzQ2hhcmFjdGVyUmFuZ2VdOworICAgICAgICBpZiAoTlNQb2ludEluUmVjdChw
b2ludCwgcmVjdCkpCisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsK
KyAgICB9CisKKyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHBvc2l0aW9uLm5leHQoKTsKKyAg
ICBpZiAobmV4dC5pc05vdE51bGwoKSkgeworICAgICAgICBET01SYW5nZSAqbmV4dENoYXJhY3Rl
clJhbmdlID0gW0RPTVJhbmdlIF93cmFwUmFuZ2U6bWFrZVJhbmdlKHBvc2l0aW9uLCBuZXh0KS5n
ZXQoKV07CisgICAgICAgIE5TUmVjdCByZWN0ID0gW3NlbGYgX2ZpcnN0UmVjdEZvckRPTVJhbmdl
Om5leHRDaGFyYWN0ZXJSYW5nZV07CisgICAgICAgIGlmIChOU1BvaW50SW5SZWN0KHBvaW50LCBy
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhcmFjdGVyUmFuZ2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiBuaWw7Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfdHlw
aW5nU3R5bGUKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5j
b3JlRnJhbWUtPnR5cGluZ1N0eWxlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IFtET01DU1NTdHlsZURlY2xhcmF0aW9uIF93cmFwQ1NTU3R5bGVEZWNsYXJhdGlvbjpfcHJpdmF0
ZS0+Y29yZUZyYW1lLT50eXBpbmdTdHlsZSgpLT5jb3B5KCkuZ2V0KCldOworfQorCistICh2b2lk
KV9zZXRUeXBpbmdTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRv
QWN0aW9uOihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KK3sKKyAgICBpZiAoIV9wcml2YXRlLT5jb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5jb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUoW3N0eWxlIF9DU1NTdHlsZURlY2xhcmF0aW9uXSwgdW5kb0FjdGlv
bik7Cit9CisKKy0gKE5TRm9udCAqKV9mb250Rm9yU2VsZWN0aW9uOihCT09MICopaGFzTXVsdGlw
bGVGb250cworeworICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNlOworICAgIE5TRm9udCAq
Zm9udCA9IG5pbDsKKyAgICBpZiAoX3ByaXZhdGUtPmNvcmVGcmFtZSkgeworICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZmQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+Zm9u
dEZvclNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKTsKKyAgICAgICAgaWYgKGZkKQorICAgICAgICAg
ICAgZm9udCA9IGZkLT5nZXROU0ZvbnQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGhhc011bHRp
cGxlRm9udHMpCisgICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gbXVsdGlwbGVGb250czsKKyAg
ICByZXR1cm4gZm9udDsKK30KKworLSAodm9pZClfZHJhZ1NvdXJjZU1vdmVkVG86KE5TUG9pbnQp
d2luZG93TG9jCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICByZXR1
cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpOwor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUg
ZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5z
dGVhZC4KKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwg
Z2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+Z2V0VmlldygpIHdpbmRvd10pLAorICAgICAg
ICBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh
bHNlLCBjdXJyZW50VGltZSgpKTsKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+ZHJhZ1NvdXJjZU1vdmVkVG8oZXZlbnQpOworfQorCistICh2b2lkKV9kcmFnU291cmNl
RW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3Bl
cmF0aW9uCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpOworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFr
ZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVh
ZC4KKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwgZ2xv
YmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+Z2V0VmlldygpIHdpbmRvd10pLAorICAgICAgICBM
ZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBjdXJyZW50VGltZSgpKTsKKyAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+ZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7Cit9
CisKKy0gKEJPT0wpX2dldERhdGE6KE5TRGF0YSAqKilkYXRhIGFuZFJlc3BvbnNlOihOU1VSTFJl
c3BvbnNlICoqKXJlc3BvbnNlIGZvclVSTDooTlNTdHJpbmcgKil1cmwKK3sKKyAgICBEb2N1bWVu
dCogZG9jID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvYykK
KyAgICAgICAgcmV0dXJuIE5POworCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gZG9j
LT5kb2NMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UodXJsKTsKKyAgICBpZiAoIXJlc291cmNlKQor
ICAgICAgICByZXR1cm4gTk87CisKKyAgICBTaGFyZWRCdWZmZXIqIGJ1ZmZlciA9IHJlc291cmNl
LT5kYXRhKCk7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgKmRhdGEgPSBbYnVmZmVyLT5jcmVh
dGVOU0RhdGEoKSBhdXRvcmVsZWFzZV07CisgICAgZWxzZQorICAgICAgICAqZGF0YSA9IG5pbDsK
KworICAgICpyZXNwb25zZSA9IHJlc291cmNlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsK
KyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKV9nZXRBbGxSZXNvdXJjZURhdGFzOihOU0Fy
cmF5ICoqKWRhdGFzIGFuZFJlc3BvbnNlczooTlNBcnJheSAqKilyZXNwb25zZXMKK3sKKyAgICBE
b2N1bWVudCogZG9jID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAo
IWRvYykgeworICAgICAgICBOU0FycmF5KiBlbXB0eUFycmF5ID0gW05TQXJyYXkgYXJyYXldOwor
ICAgICAgICAqZGF0YXMgPSBlbXB0eUFycmF5OworICAgICAgICAqcmVzcG9uc2VzID0gZW1wdHlB
cnJheTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBDYWNoZWRSZXNvdXJjZSo+JiBhbGxSZXNvdXJjZXMgPSBkb2MtPmRvY0xvYWRlcigpLT5hbGxD
YWNoZWRSZXNvdXJjZXMoKTsKKworICAgIE5TTXV0YWJsZUFycmF5ICpkID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTphbGxSZXNvdXJjZXMuc2l6ZSgpXTsKKyAgICBO
U011dGFibGVBcnJheSAqciA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6YWxsUmVzb3VyY2VzLnNpemUoKV07CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVz
b3VyY2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOworICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
YWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTaGFyZWRC
dWZmZXIqIGJ1ZmZlciA9IGl0LT5zZWNvbmQtPmRhdGEoKTsKKyAgICAgICAgTlNEYXRhICpkYXRh
OworICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgZGF0YSA9IGJ1ZmZlci0+Y3JlYXRl
TlNEYXRhKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRhdGEgPSBbW05TRGF0YSBhbGxv
Y10gaW5pdF07CisgICAgICAgIFtkIGFkZE9iamVjdDpkYXRhXTsKKyAgICAgICAgW2RhdGEgcmVs
ZWFzZV07CisgICAgICAgIFtyIGFkZE9iamVjdDppdC0+c2Vjb25kLT5yZXNwb25zZSgpLm5zVVJM
UmVzcG9uc2UoKV07CisgICAgfQorCisgICAgKmRhdGFzID0gW2QgYXV0b3JlbGVhc2VdOworICAg
ICpyZXNwb25zZXMgPSBbciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKEJPT0wpX2NhblByb3ZpZGVE
b2N1bWVudFNvdXJjZQoreworICAgIFN0cmluZyBtaW1lVHlwZSA9IF9wcml2YXRlLT5jb3JlRnJh
bWUtPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCk7CisgICAgCisgICAgaWYgKFdlYkNvcmU6
OkRPTUltcGxlbWVudGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKKyAgICAgICAg
SW1hZ2U6OnN1cHBvcnRzVHlwZShtaW1lVHlwZSkgfHwKKyAgICAgICAgKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnBhZ2UoKSAmJiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEo
KS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpKQorICAgICAgICByZXR1cm4gTk87CisgICAg
CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClfY2FuU2F2ZUFzV2ViQXJjaGl2ZQorewor
ICAgIC8vIEN1cnJlbnRseSwgYWxsIGRvY3VtZW50cyB0aGF0IHdlIGNhbiB2aWV3IHNvdXJjZSBm
b3IKKyAgICAvLyAoSFRNTCBhbmQgWE1MIGRvY3VtZW50cykgY2FuIGFsc28gYmUgc2F2ZWQgYXMg
d2ViIGFyY2hpdmVzCisgICAgcmV0dXJuIFtzZWxmIF9jYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2Vd
OworfQorCistICh2b2lkKV9yZWNlaXZlZERhdGE6KE5TRGF0YSAqKWRhdGEgdGV4dEVuY29kaW5n
TmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lCit7CisgICAgLy8gU2V0IHRoZSBlbmNv
ZGluZy4gVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSwgYnV0IGl0J3MgaGFybWxlc3Mg
dG8gZG8gaXQgYWdhaW4gbGF0ZXIuCisgICAgU3RyaW5nIGVuY29kaW5nOworICAgIGlmIChfcHJp
dmF0ZS0+Y29yZUZyYW1lKQorICAgICAgICBlbmNvZGluZyA9IF9wcml2YXRlLT5jb3JlRnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCk7CisgICAgYm9v
bCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgIGlmIChlbmNvZGluZy5pc051
bGwoKSkKKyAgICAgICAgZW5jb2RpbmcgPSB0ZXh0RW5jb2RpbmdOYW1lOworICAgIF9wcml2YXRl
LT5jb3JlRnJhbWUtPmxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7
CisgICAgW3NlbGYgX2FkZERhdGE6ZGF0YV07Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9u
IFdlYkZyYW1lIChXZWJQcml2YXRlKQpAQCAtNjQwLDkgKzE1OTYsOSBAQCBzdGF0aWMgaW5saW5l
IFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPnRyZWUoKS0+aXNEZXNjZW5kYW50T2YoY29yZShhbmNlc3RvcikpOwogfQogCi0tICh2
b2lkKV9zZXRTaG91bGRDcmVhdGVSZW5kZXJlcnM6KEJPT0wpZnJhbWUKKy0gKHZvaWQpX3NldFNo
b3VsZENyZWF0ZVJlbmRlcmVyczooQk9PTClzaG91bGRDcmVhdGVSZW5kZXJlcnMKIHsKLSAgICBb
X3ByaXZhdGUtPmJyaWRnZSBzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnM6ZnJhbWVdOworICAgIF9w
cml2YXRlLT5zaG91bGRDcmVhdGVSZW5kZXJlcnMgPSBzaG91bGRDcmVhdGVSZW5kZXJlcnM7CiB9
CiAKIC0gKE5TQ29sb3IgKilfYm9keUJhY2tncm91bmRDb2xvcgpAQCAtNjc5LDEyICsxNjM1LDE0
IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSgKIAogLSAoTlNSYW5n
ZSlfc2VsZWN0ZWROU1JhbmdlCiB7Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+YnJpZGdlIHNlbGVj
dGVkTlNSYW5nZV07CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+dG9SYW5nZSgpLmdldCgpXTsKIH0K
IAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFtfcHJpdmF0
ZS0+YnJpZGdlIHNlbGVjdE5TUmFuZ2U6cmFuZ2VdOworICAgIFJlZlB0cjxSYW5nZT4gZG9tUmFu
Z2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdOworICAgIGlmIChkb21SYW5nZSkK
KyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRT
ZWxlY3Rpb24oU2VsZWN0aW9uKGRvbVJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OwogfQogCiAtIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2UKQEAgLTcxMCw3ICsx
NjY4LDYgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKAogCiAtICh2
b2lkKWRlYWxsb2MKIHsKLSAgICBbX3ByaXZhdGUtPmJyaWRnZSBzZXRXZWJGcmFtZTpuaWxdOwog
ICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsKICAgICAtLVdlYkZyYW1lQ291bnQ7CiAgICAgW3N1cGVy
IGRlYWxsb2NdOwpAQCAtNzE4LDcgKzE2NzUsNiBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2UoCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBbX3ByaXZhdGUtPmJy
aWRnZSBzZXRXZWJGcmFtZTpuaWxdOwogICAgIC0tV2ViRnJhbWVDb3VudDsKICAgICBbc3VwZXIg
ZmluYWxpemVdOwogfQpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCShy
ZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwyMCBAQAogI2ltcG9ydCAiV2ViRnJhbWVQcml2
YXRlLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKIAotI2lmZGVmIF9fY3Bs
dXNwbHVzCisjaW1wb3J0IDxXZWJDb3JlL0VkaXRBY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVMb2FkZXJUeXBlcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jZW5kaWYKIAogQGNsYXNzIERPTUNT
U1N0eWxlRGVjbGFyYXRpb247CitAY2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudDsKIEBjbGFzcyBE
T01FbGVtZW50OwogQGNsYXNzIERPTU5vZGU7CiBAY2xhc3MgRE9NUmFuZ2U7CiBAY2xhc3MgV2Vi
RnJhbWVWaWV3OwotQGNsYXNzIFdlYkZyYW1lQnJpZGdlOwogQGNsYXNzIFdlYkhpc3RvcnlJdGVt
OwotY2xhc3MgV2ViU2NyaXB0RGVidWdnZXI7CiAKLSNpZmRlZiBfX2NwbHVzcGx1cworY2xhc3Mg
V2ViU2NyaXB0RGVidWdnZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOwpAQCAtOTcsMTUgKzk2LDE1IEBAIFdlYlZpZXcgKmdldFdlYlZpZXco
V2ViRnJhbWUgKndlYkZyYW1lKTsKIEBwdWJsaWMKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZy
YW1lOwogICAgIFdlYkZyYW1lVmlldyAqd2ViRnJhbWVWaWV3OwotICAgIFdlYkZyYW1lQnJpZGdl
ICpicmlkZ2U7CiAgICAgV2ViU2NyaXB0RGVidWdnZXIqIHNjcmlwdERlYnVnZ2VyOwogICAgIGlk
IGludGVybmFsTG9hZERlbGVnYXRlOworICAgIEJPT0wgc2hvdWxkQ3JlYXRlUmVuZGVyZXJzOwog
fQogQGVuZAogCi0jZWxzZQotc3RydWN0IFdlYkNvcmVIaXN0b3J5SXRlbTsKLSNlbmRpZgorQHBy
b3RvY29sIFdlYkNvcmVSZW5kZXJUcmVlQ29waWVyIDxOU09iamVjdD4KKy0gKE5TT2JqZWN0ICop
bm9kZVdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgcG9zaXRpb246KE5TUG9pbnQpcG9zaXRpb24g
cmVjdDooTlNSZWN0KXJlY3QgdmlldzooTlNWaWV3ICopdmlldyBjaGlsZHJlbjooTlNBcnJheSAq
KWNoaWxkcmVuOworQGVuZAogCiBAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJJbnRlcm5hbCkKIApA
QCAtMTI2LDIzICsxMjUsMTUgQEAgc3RydWN0IFdlYkNvcmVIaXN0b3J5SXRlbTsKIC0gKHZvaWQp
X2NsZWFyU2VsZWN0aW9uOwogLSAoV2ViRnJhbWUgKilfZmluZEZyYW1lV2l0aFNlbGVjdGlvbjsK
IC0gKHZvaWQpX2NsZWFyU2VsZWN0aW9uSW5PdGhlckZyYW1lczsKLSNpZmRlZiBfX2NwbHVzcGx1
cwotLSAoaWQpX2luaXRXaXRoV2ViRnJhbWVWaWV3OihXZWJGcmFtZVZpZXcgKilmdiB3ZWJWaWV3
OihXZWJWaWV3ICopdiBicmlkZ2U6KFdlYkZyYW1lQnJpZGdlICopYnJpZGdlOwotI2VuZGlmCist
IChpZClfaW5pdFdpdGhXZWJGcmFtZVZpZXc6KFdlYkZyYW1lVmlldyAqKXdlYkZyYW1lVmlldyB3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIAogLSAoQk9PTClfaXNNYWluRnJhbWU7CiAKLSNp
ZmRlZiBfX2NwbHVzcGx1cwotCiAtIChXZWJDb3JlOjpGcmFtZUxvYWRlciopX2ZyYW1lTG9hZGVy
OwogLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlRm9yRG9jdW1lbnRMb2FkZXI6KFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKilsb2FkZXI7CiAKIC0gKHZvaWQpX2FkZERvY3VtZW50TG9hZGVy
OihXZWJDb3JlOjpEb2N1bWVudExvYWRlciopbG9hZGVyIHRvVW5hcmNoaXZlU3RhdGU6KFdlYkFy
Y2hpdmUgKilhcmNoaXZlOwogCi0jZW5kaWYKLQotLSAoV2ViRnJhbWVCcmlkZ2UgKilfYnJpZGdl
OwotCiAtICh2b2lkKV9sb2FkVVJMOihOU1VSTCAqKVVSTCByZWZlcnJlcjooTlNTdHJpbmcgKily
ZWZlcnJlciBpbnRvQ2hpbGQ6KFdlYkZyYW1lICopY2hpbGRGcmFtZTsKIAogLSAodm9pZClfdmll
d1dpbGxNb3ZlVG9Ib3N0V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3c7CkBAIC0xNjgsNiAr
MTU5LDk4IEBAIHN0cnVjdCBXZWJDb3JlSGlzdG9yeUl0ZW07CiAtICh2b2lkKV9yZWN1cnNpdmVf
cGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zOwogI2VuZGlmCiAKKy0gKE5TVVJM
ICopX2Jhc2VVUkw7CisKKy0gKHZvaWQpX2ZvcmNlTGF5b3V0QWRqdXN0aW5nVmlld1NpemU6KEJP
T0wpYWRqdXN0U2l6ZUZsYWc7CistICh2b2lkKV9mb3JjZUxheW91dFdpdGhNaW5pbXVtUGFnZVdp
ZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdp
ZHRoIGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdFNpemVGbGFnOworLSAodm9pZClfc2Vu
ZFNjcm9sbEV2ZW50OworLSAoQk9PTClfbmVlZHNMYXlvdXQ7CistICh2b2lkKV9kcmF3UmVjdDoo
TlNSZWN0KXJlY3Q7CistICh2b2lkKV9hZGp1c3RQYWdlSGVpZ2h0TmV3OihmbG9hdCAqKW5ld0Jv
dHRvbSB0b3A6KGZsb2F0KW9sZFRvcCBib3R0b206KGZsb2F0KW9sZEJvdHRvbSBsaW1pdDooZmxv
YXQpYm90dG9tTGltaXQ7CistIChOU0FycmF5KilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdp
ZHRoU2NhbGVGYWN0b3I6KGZsb2F0KXByaW50V2lkdGhTY2FsZUZhY3RvciBwcmludEhlaWdodDoo
ZmxvYXQpcHJpbnRIZWlnaHQ7CisKKy0gKE5TT2JqZWN0ICopX2NvcHlSZW5kZXJUcmVlOihpZCA8
V2ViQ29yZVJlbmRlclRyZWVDb3BpZXI+KWNvcGllcjsKKy0gKE5TU3RyaW5nICopX3JlbmRlclRy
ZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb247CisKKy0gKE5TVVJMICopX1VSTFdpdGhBdHRyaWJ1
dGVTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOworCistIChET01FbGVtZW50ICopX2VsZW1lbnRX
aXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGluRm9ybTooRE9NRWxlbWVudCAqKWZvcm07CistIChC
T09MKV9lbGVtZW50RG9lc0F1dG9Db21wbGV0ZTooRE9NRWxlbWVudCAqKWVsZW1lbnQ7CistIChC
T09MKV9lbGVtZW50SXNQYXNzd29yZDooRE9NRWxlbWVudCAqKWVsZW1lbnQ7CistIChET01FbGVt
ZW50ICopX2Zvcm1Gb3JFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudDsKKy0gKERPTUVsZW1l
bnQgKilfY3VycmVudEZvcm07CistIChOU0FycmF5ICopX2NvbnRyb2xzSW5Gb3JtOihET01FbGVt
ZW50ICopZm9ybTsKKy0gKE5TU3RyaW5nICopX3NlYXJjaEZvckxhYmVsczooTlNBcnJheSAqKWxh
YmVscyBiZWZvcmVFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudDsKKy0gKE5TU3RyaW5nICop
X21hdGNoTGFiZWxzOihOU0FycmF5ICopbGFiZWxzIGFnYWluc3RFbGVtZW50OihET01FbGVtZW50
ICopZWxlbWVudDsKKworLSAoQk9PTClfc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJl
Y3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJP
T0wpd3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uOworLSAo
dW5zaWduZWQpX21hcmtBbGxNYXRjaGVzRm9yVGV4dDooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNl
bnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDoodW5zaWduZWQpbGltaXQ7CistIChCT09MKV9t
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOworLSAodm9pZClfc2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTClkb0hpZ2hsaWdodDsKKy0gKHZvaWQpX3VubWFya0Fs
bFRleHRNYXRjaGVzOworLSAoTlNBcnJheSAqKV9yZWN0c0ZvclRleHRNYXRjaGVzOworCistICh2
b2lkKV9zZXRUZXh0U2l6ZU11bHRpcGxpZXI6KGZsb2F0KW11bHRpcGxpZXI7CisKKy0gKE5TU3Ry
aW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZzsKKy0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBmb3JjZVVzZXJHZXN0dXJlOihCT09MKWZvcmNlVXNl
ckdlc3R1cmU7CistIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopX2FlRGVzY0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKworLSAoTlNTdHJpbmcg
Kilfc2VsZWN0ZWRTdHJpbmc7CisKKy0gKE5TU3RyaW5nICopX3N0cmluZ0ZvclJhbmdlOihET01S
YW5nZSAqKXJhbmdlOworCistIChOU1N0cmluZyAqKV9tYXJrdXBTdHJpbmdGcm9tTm9kZTooRE9N
Tm9kZSAqKW5vZGUgbm9kZXM6KE5TQXJyYXkgKiopbm9kZXM7CistIChOU1N0cmluZyAqKV9tYXJr
dXBTdHJpbmdGcm9tUmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ugbm9kZXM6KE5TQXJyYXkgKiopbm9k
ZXM7CisKKy0gKE5TUmVjdClfY2FyZXRSZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6
KGludClvZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CistIChO
U1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOworLSAodm9pZClf
c2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2U7CisKKy0gKE5TRm9udCAq
KV9mb250Rm9yU2VsZWN0aW9uOihCT09MICopaGFzTXVsdGlwbGVGb250czsKKworLSAoTlNTdHJp
bmcgKilfc3RyaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGE7IC8vIHVzaW5nIHRoZSBlbmNvZGlu
ZyBvZiB0aGUgZnJhbWUncyBtYWluIHJlc291cmNlCisrIChOU1N0cmluZyAqKV9zdHJpbmdXaXRo
RGF0YTooTlNEYXRhICopZGF0YSB0ZXh0RW5jb2RpbmdOYW1lOihOU1N0cmluZyAqKXRleHRFbmNv
ZGluZ05hbWU7IC8vIG5pbCBmb3IgdGV4dEVuY29kaW5nTmFtZSBtZWFucyBMYXRpbi0xCisKKy0g
KHZvaWQpX3NldEJhc2VCYWNrZ3JvdW5kQ29sb3I6KE5TQ29sb3IgKiliYWNrZ3JvdW5kQ29sb3I7
CistICh2b2lkKV9zZXREcmF3c0JhY2tncm91bmQ6KEJPT0wpZHJhd3NCYWNrcm91bmQ7CisKKy0g
KGlkKV9hY2Nlc3NpYmlsaXR5VHJlZTsKKworLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyYXRp
b24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OkVE
aXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkp
Z3JhbnVsYXJpdHk7CistIChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51
bGFyaXR5OworLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVT
dHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopY2hhclJhbmdlVG9SZXBsYWNlIGJlZm9y
ZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAq
KilhZnRlclN0cmluZzsKKy0gKE5TUmFuZ2UpX21hcmtlZFRleHROU1JhbmdlOworLSAoRE9NUmFu
Z2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlOworLSAoTlNSYW5n
ZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlOworCistIChET01E
b2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0
cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJp
bmc7CistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDoo
TlNTdHJpbmcgKil0ZXh0IGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0OworLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihO
U0FycmF5ICopbm9kZXM7CisKKy0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6
KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClz
ZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5
bGU6KEJPT0wpbWF0Y2hTdHlsZTsKKy0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoTm9kZToo
RE9NTm9kZSAqKW5vZGUgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQg
c21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5
bGU7CistICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcg
KiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nIHNl
bGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9P
TClzbWFydFJlcGxhY2U7CistICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFy
dFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlOworCistICh2b2lkKV9pbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JJblF1b3RlZENvbnRlbnQ7CisKKy0gKERPTVJhbmdlICopX2NoYXJhY3RlclJhbmdl
QXRQb2ludDooTlNQb2ludClwb2ludDsKKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV90
eXBpbmdTdHlsZTsKKy0gKHZvaWQpX3NldFR5cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0
aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KFdlYkNvcmU6OkVkaXRBY3Rpb24pdW5kb0FjdGlv
bjsKKworLSAodm9pZClfZHJhZ1NvdXJjZU1vdmVkVG86KE5TUG9pbnQpd2luZG93TG9jOworLSAo
dm9pZClfZHJhZ1NvdXJjZUVuZGVkQXQ6KE5TUG9pbnQpd2luZG93TG9jIG9wZXJhdGlvbjooTlNE
cmFnT3BlcmF0aW9uKW9wZXJhdGlvbjsKKworLSAoQk9PTClfZ2V0RGF0YTooTlNEYXRhICoqKWRh
dGEgYW5kUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKiopcmVzcG9uc2UgZm9yVVJMOihOU1N0cmlu
ZyAqKVVSTDsKKy0gKHZvaWQpX2dldEFsbFJlc291cmNlRGF0YXM6KE5TQXJyYXkgKiopZGF0YXMg
YW5kUmVzcG9uc2VzOihOU0FycmF5ICoqKXJlc3BvbnNlczsKKworLSAoQk9PTClfY2FuUHJvdmlk
ZURvY3VtZW50U291cmNlOworLSAoQk9PTClfY2FuU2F2ZUFzV2ViQXJjaGl2ZTsKKworLSAodm9p
ZClfcmVjZWl2ZWREYXRhOihOU0RhdGEgKilkYXRhIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5n
ICopdGV4dEVuY29kaW5nTmFtZTsKKwogQGVuZAogCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJJ
bnRlcm5hbEZyYW1lTG9hZERlbGVnYXRlKQpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3
Lm1tCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbXBvcnQgIldlYkR5bmFtaWNT
Y3JvbGxCYXJzVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgogI2ltcG9ydCAi
V2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQg
IldlYkZyYW1lVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGcmFtZVZpZXdQcml2YXRlLmgi
CiAjaW1wb3J0ICJXZWJIaXN0b3J5SXRlbUludGVybmFsLmgiCkBAIC01MDMsMTEgKzUwMiw2IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICBbc3VwZXIgc2V0
RnJhbWVTaXplOnNpemVdOwogfQogCi0tIChXZWJGcmFtZUJyaWRnZSAqKV9icmlkZ2UKLXsKLSAg
ICByZXR1cm4gW1tzZWxmIHdlYkZyYW1lXSBfYnJpZGdlXTsKLX0KLQogLSAoQk9PTClfc2Nyb2xs
T3ZlcmZsb3dJbkRpcmVjdGlvbjooU2Nyb2xsRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0
eTooU2Nyb2xsR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsKICAgICAvLyBzY3JvbGxpbmcgb3Zl
cmZsb3dzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gV2ViSFRN
TFZpZXcKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW1wb3J0ICJXZWJC
YXNlUGx1Z2luUGFja2FnZS5oIgogI2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCiAj
aW1wb3J0ICJXZWJEb2N1bWVudFByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgi
CiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4
dHJhcy5oIgogI2ltcG9ydCAiV2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCIKQEAgLTUzLDExICs1
Miw5IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1AaW50ZXJmYWNlIFdlYkhUTUxS
ZXByZXNlbnRhdGlvblByaXZhdGUgOiBOU09iamVjdAoteworQGludGVyZmFjZSBXZWJIVE1MUmVw
cmVzZW50YXRpb25Qcml2YXRlIDogTlNPYmplY3QgewogQHB1YmxpYwogICAgIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2U7Ci0gICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZTsKICAgICBOU0RhdGEg
KnBhcnNlZEFyY2hpdmVEYXRhOwogICAgIAogICAgIEJPT0wgaGFzU2VudFJlc3BvbnNlVG9QbHVn
aW47CkBAIC0xNDQsMTEgKzE0MSw2IEBAIHN0YXRpYyBOU0FycmF5ICpjb25jYXRlbmF0ZUFycmF5
cyhOU0FycmEKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQogCi0tIChXZWJGcmFtZUJyaWRnZSAq
KV9icmlkZ2UKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmJyaWRnZTsKLX0KLQogLSAodm9pZClf
cmVkaXJlY3REYXRhVG9NYW51YWxMb2FkZXI6KGlkPFdlYlBsdWdpbk1hbnVhbExvYWRlcj4pbWFu
dWFsTG9hZGVyIGZvclBsdWdpblZpZXc6KE5TVmlldyAqKXBsdWdpblZpZXc7CiB7CiAgICAgX3By
aXZhdGUtPm1hbnVhbExvYWRlciA9IG1hbnVhbExvYWRlcjsKQEAgLTE1OCw3ICsxNTAsNiBAQCBz
dGF0aWMgTlNBcnJheSAqY29uY2F0ZW5hdGVBcnJheXMoTlNBcnJhCiAtICh2b2lkKXNldERhdGFT
b3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7CiAgICAgX3ByaXZhdGUtPmRhdGFT
b3VyY2UgPSBkYXRhU291cmNlOwotICAgIF9wcml2YXRlLT5icmlkZ2UgPSBbW2RhdGFTb3VyY2Ug
d2ViRnJhbWVdIF9icmlkZ2VdOwogfQogCiAtIChCT09MKV9pc0Rpc3BsYXlpbmdXZWJBcmNoaXZl
CkBAIC0xNjgsOSArMTU5LDEwIEBAIHN0YXRpYyBOU0FycmF5ICpjb25jYXRlbmF0ZUFycmF5cyhO
U0FycmEKIAogLSAodm9pZClyZWNlaXZlZERhdGE6KE5TRGF0YSAqKWRhdGEgd2l0aERhdGFTb3Vy
Y2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCiB7Ci0gICAgaWYgKFtkYXRhU291cmNlIHdl
YkZyYW1lXSAmJiAhW3NlbGYgX2lzRGlzcGxheWluZ1dlYkFyY2hpdmVdKSB7CisgICAgV2ViRnJh
bWUgKmZyYW1lID0gW2RhdGFTb3VyY2Ugd2ViRnJhbWVdOworICAgIGlmIChmcmFtZSAmJiAhW3Nl
bGYgX2lzRGlzcGxheWluZ1dlYkFyY2hpdmVdKSB7CiAgICAgICAgIGlmICghX3ByaXZhdGUtPnBs
dWdpblZpZXcpCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmJyaWRnZSByZWNlaXZlZERhdGE6ZGF0
YSB0ZXh0RW5jb2RpbmdOYW1lOltbX3ByaXZhdGUtPmRhdGFTb3VyY2UgcmVzcG9uc2VdIHRleHRF
bmNvZGluZ05hbWVdXTsKKyAgICAgICAgICAgIFtmcmFtZSBfcmVjZWl2ZWREYXRhOmRhdGEgdGV4
dEVuY29kaW5nTmFtZTpbW19wcml2YXRlLT5kYXRhU291cmNlIHJlc3BvbnNlXSB0ZXh0RW5jb2Rp
bmdOYW1lXV07CiAKICAgICAgICAgaWYgKF9wcml2YXRlLT5wbHVnaW5WaWV3KSB7CiAgICAgICAg
ICAgICBpZiAoIV9wcml2YXRlLT5oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewpAQCAtMjI3LDEx
ICsyMTksMTIgQEAgc3RhdGljIE5TQXJyYXkgKmNvbmNhdGVuYXRlQXJyYXlzKE5TQXJyYQogICAg
IGlmIChmcmFtZSkgewogICAgICAgICBpZiAoW3NlbGYgX2lzRGlzcGxheWluZ1dlYkFyY2hpdmVd
KQogICAgICAgICAgICAgW3NlbGYgX2xvYWREYXRhU291cmNlQXNXZWJBcmNoaXZlXTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgLy8gVGVsbGluZyB0aGUgYnJpZGdlIHdlIHJlY2VpdmVkIHNv
bWUgZGF0YSBhbmQgcGFzc2luZyBuaWwgYXMgdGhlIGRhdGEgaXMgb3VyCisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gVGVsbGluZyB0aGUgZnJhbWUgd2UgcmVjZWl2ZWQgc29tZSBkYXRh
IGFuZCBwYXNzaW5nIG5pbCBhcyB0aGUgZGF0YSBpcyBvdXIKICAgICAgICAgICAgIC8vIHdheSB0
byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZSB3aGVuIHRoZSBmaXJzdCBiaXQg
b2YgZGF0YSBpcwogICAgICAgICAgICAgLy8gcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9m
IGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KLSAgICAgICAgICAg
IFtfcHJpdmF0ZS0+YnJpZGdlIHJlY2VpdmVkRGF0YTpuaWwgdGV4dEVuY29kaW5nTmFtZTpbW19w
cml2YXRlLT5kYXRhU291cmNlIHJlc3BvbnNlXSB0ZXh0RW5jb2RpbmdOYW1lXV07CisgICAgICAg
ICAgICBbZnJhbWUgX3JlY2VpdmVkRGF0YTpuaWwgdGV4dEVuY29kaW5nTmFtZTpbW19wcml2YXRl
LT5kYXRhU291cmNlIHJlc3BvbnNlXSB0ZXh0RW5jb2RpbmdOYW1lXV07CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107CiAgICAg
ICAgIGlmIChbd2ViVmlldyBpc0VkaXRhYmxlXSkKQEAgLTI0MSwxMiArMjM0LDEyIEBAIHN0YXRp
YyBOU0FycmF5ICpjb25jYXRlbmF0ZUFycmF5cyhOU0FycmEKIAogLSAoQk9PTCljYW5Qcm92aWRl
RG9jdW1lbnRTb3VyY2UKIHsKLSAgICByZXR1cm4gW19wcml2YXRlLT5icmlkZ2UgY2FuUHJvdmlk
ZURvY3VtZW50U291cmNlXTsKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJG
cmFtZV0gX2NhblByb3ZpZGVEb2N1bWVudFNvdXJjZV07CiB9CiAKIC0gKEJPT0wpY2FuU2F2ZUFz
V2ViQXJjaGl2ZQogewotICAgIHJldHVybiBbX3ByaXZhdGUtPmJyaWRnZSBjYW5TYXZlQXNXZWJB
cmNoaXZlXTsKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gX2Nh
blNhdmVBc1dlYkFyY2hpdmVdOwogfQogCiAtIChOU1N0cmluZyAqKWRvY3VtZW50U291cmNlCkBA
IC0yNTQsNyArMjQ3LDcgQEAgc3RhdGljIE5TQXJyYXkgKmNvbmNhdGVuYXRlQXJyYXlzKE5TQXJy
YQogICAgIGlmIChbc2VsZiBfaXNEaXNwbGF5aW5nV2ViQXJjaGl2ZV0pCiAgICAgICAgIHJldHVy
biBbW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOl9wcml2YXRlLT5wYXJzZWRBcmNoaXZl
RGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gYXV0b3JlbGVhc2VdOyAKIAotICAg
IHJldHVybiBbX3ByaXZhdGUtPmJyaWRnZSBzdHJpbmdXaXRoRGF0YTpbX3ByaXZhdGUtPmRhdGFT
b3VyY2UgZGF0YV1dOworICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1l
XSBfc3RyaW5nV2l0aERhdGE6W19wcml2YXRlLT5kYXRhU291cmNlIGRhdGFdXTsKIH0KIAogLSAo
TlNTdHJpbmcgKil0aXRsZQpAQCAtMjY0LDcgKzI1Nyw3IEBAIHN0YXRpYyBOU0FycmF5ICpjb25j
YXRlbmF0ZUFycmF5cyhOU0FycmEKIAogLSAoRE9NRG9jdW1lbnQgKilET01Eb2N1bWVudAogewot
ICAgIHJldHVybiBbW19wcml2YXRlLT5icmlkZ2Ugd2ViRnJhbWVdIERPTURvY3VtZW50XTsKKyAg
ICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gRE9NRG9jdW1lbnRdOwog
fQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkVGV4dApAQCAtMjgwLDQyICsy
NzMsNDIgQEAgc3RhdGljIE5TQXJyYXkgKmNvbmNhdGVuYXRlQXJyYXlzKE5TQXJyYQogCiAtIChE
T01FbGVtZW50ICopZWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgaW5Gb3JtOihET01F
bGVtZW50ICopZm9ybQogewotICAgIHJldHVybiBbX3ByaXZhdGUtPmJyaWRnZSBlbGVtZW50V2l0
aE5hbWU6bmFtZSBpbkZvcm06Zm9ybV07CisgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3Vy
Y2Ugd2ViRnJhbWVdIF9lbGVtZW50V2l0aE5hbWU6bmFtZSBpbkZvcm06Zm9ybV07CiB9CiAKIC0g
KEJPT0wpZWxlbWVudERvZXNBdXRvQ29tcGxldGU6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0g
ICAgcmV0dXJuIFtfcHJpdmF0ZS0+YnJpZGdlIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlOmVsZW1l
bnRdOworICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSBfZWxlbWVu
dERvZXNBdXRvQ29tcGxldGU6ZWxlbWVudF07CiB9CiAKIC0gKEJPT0wpZWxlbWVudElzUGFzc3dv
cmQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+YnJpZGdl
IGVsZW1lbnRJc1Bhc3N3b3JkOmVsZW1lbnRdOworICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRh
U291cmNlIHdlYkZyYW1lXSBfZWxlbWVudElzUGFzc3dvcmQ6ZWxlbWVudF07CiB9CiAKIC0gKERP
TUVsZW1lbnQgKilmb3JtRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKIHsKLSAgICBy
ZXR1cm4gW19wcml2YXRlLT5icmlkZ2UgZm9ybUZvckVsZW1lbnQ6ZWxlbWVudF07CisgICAgcmV0
dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIF9mb3JtRm9yRWxlbWVudDplbGVt
ZW50XTsKIH0KIAogLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCiB7Ci0gICAgcmV0dXJuIFtf
cHJpdmF0ZS0+YnJpZGdlIGN1cnJlbnRGb3JtXTsKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0
YVNvdXJjZSB3ZWJGcmFtZV0gX2N1cnJlbnRGb3JtXTsKIH0KIAogLSAoTlNBcnJheSAqKWNvbnRy
b2xzSW5Gb3JtOihET01FbGVtZW50ICopZm9ybQogewotICAgIHJldHVybiBbX3ByaXZhdGUtPmJy
aWRnZSBjb250cm9sc0luRm9ybTpmb3JtXTsKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNv
dXJjZSB3ZWJGcmFtZV0gX2NvbnRyb2xzSW5Gb3JtOmZvcm1dOwogfQogCiAtIChOU1N0cmluZyAq
KXNlYXJjaEZvckxhYmVsczooTlNBcnJheSAqKWxhYmVscyBiZWZvcmVFbGVtZW50OihET01FbGVt
ZW50ICopZWxlbWVudAogewotICAgIHJldHVybiBbX3ByaXZhdGUtPmJyaWRnZSBzZWFyY2hGb3JM
YWJlbHM6bGFiZWxzIGJlZm9yZUVsZW1lbnQ6ZWxlbWVudF07CisgICAgcmV0dXJuIFtbX3ByaXZh
dGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIF9zZWFyY2hGb3JMYWJlbHM6bGFiZWxzIGJlZm9yZUVs
ZW1lbnQ6ZWxlbWVudF07CiB9CiAKIC0gKE5TU3RyaW5nICopbWF0Y2hMYWJlbHM6KE5TQXJyYXkg
KilsYWJlbHMgYWdhaW5zdEVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0gICAgcmV0
dXJuIFtfcHJpdmF0ZS0+YnJpZGdlIG1hdGNoTGFiZWxzOmxhYmVscyBhZ2FpbnN0RWxlbWVudDpl
bGVtZW50XTsKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gX21h
dGNoTGFiZWxzOmxhYmVscyBhZ2FpbnN0RWxlbWVudDplbGVtZW50XTsKIH0KIAogQGVuZApJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0
ZS5oCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb25Qcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCw5IEBACiAKICNp
bXBvcnQgPFdlYktpdC9XZWJIVE1MUmVwcmVzZW50YXRpb24uaD4KIAotQGNsYXNzIFdlYkZyYW1l
QnJpZGdlOwogQHByb3RvY29sIFdlYlBsdWdpbk1hbnVhbExvYWRlcjsKIAogQGludGVyZmFjZSBX
ZWJIVE1MUmVwcmVzZW50YXRpb24gKFdlYlByaXZhdGUpCi0tIChXZWJGcmFtZUJyaWRnZSAqKV9i
cmlkZ2U7CiAtICh2b2lkKV9yZWRpcmVjdERhdGFUb01hbnVhbExvYWRlcjooaWQ8V2ViUGx1Z2lu
TWFudWFsTG9hZGVyPiltYW51YWxMb2FkZXIgZm9yUGx1Z2luVmlldzooTlNWaWV3ICopcGx1Z2lu
VmlldzsKIC0gKHZvaWQpcHJpbnRET01UcmVlOwogQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpbXBvcnQgIldlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldy5oIgogI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlLmgiCiAj
aW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgotI2ltcG9ydCAiV2ViRnJhbWVCcmlkZ2Uu
aCIKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkZyYW1lUHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCIKQEAgLTI5OSw3ICsyOTgsNiBA
QCBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0CiAtIChOU1ZpZXcgKilf
aGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKV93cml0ZVNlbGVjdGlv
bldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVk
U3RyaW5nICopYXR0cmlidXRlZFN0cmluZzsKIC0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2U7
Ci0tIChXZWJGcmFtZUJyaWRnZSAqKV9icmlkZ2U7CiAtICh2b2lkKV9zZXRNb3VzZURvd25FdmVu
dDooTlNFdmVudCAqKWV2ZW50OwogLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7CiAtIChC
T09MKV9pc1RvcEhUTUxWaWV3OwpAQCAtNTQ1LDExICs1NDMsNiBAQCBzdGF0aWMgTlNDZWxsU3Rh
dGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhCiAgICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNl
OwogfQogCi0tIChXZWJGcmFtZUJyaWRnZSAqKV9icmlkZ2UKLXsKLSAgICByZXR1cm4gW19wcml2
YXRlLT5kYXRhU291cmNlIF9icmlkZ2VdOwotfQotCiAtIChXZWJWaWV3ICopX3dlYlZpZXcKIHsK
ICAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XTsKQEAgLTU3NCw3ICs1
NjcsNyBAQCBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhCiAgICAgICAg
IFtkb21Ob2RlcyBhZGRPYmplY3Q6W1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVU
ZXh0Tm9kZTogdXJsXV07CiAgICAgfQogICAgIAotICAgIGZyYWdtZW50ID0gW1tzZWxmIF9icmlk
Z2VdIGRvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKKyAg
ICBmcmFnbWVudCA9IFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQ
YXJhZ3JhcGhzOmRvbU5vZGVzXTsgCiAgICAgCiAgICAgW2RvbU5vZGVzIHJlbGVhc2VdOwogICAg
IApAQCAtNzI4LDkgKzcyMSw5IEBAIHN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZl
UGFydCgKICAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CiAgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQKICAgICAgICAgaW5Db250ZXh0OnJhbmdlIGFsbG93UGxh
aW5UZXh0OmFsbG93UGxhaW5UZXh0XTsKLSAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW3Nl
bGYgX2JyaWRnZV07CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKICAgICBp
ZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxh
Y2luZ0RPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5z
ZXJ0QWN0aW9uUGFzdGVkXSkgewotICAgICAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxm
IF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5P
XTsKKyAgICAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50
IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNl
V2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF0gbWF0Y2hTdHlsZTpOT107CiAgICAgfQogfQogCkBA
IC03MzgsNyArNzMxLDcgQEAgc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0
KAogewogICAgIE5TU3RyaW5nICp0ZXh0ID0gW3NlbGYgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOwogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAg
IFtbc2VsZiBfYnJpZGdlXSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4dCBzZWxlY3RSZXBs
YWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkOnBhc3RlYm9hcmRdXTsKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dDp0ZXh0IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBf
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF1dOwogfQogCiAtIChCT09M
KV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJl
cGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
ZXJ0QWN0aW9uKWFjdGlvbgpAQCAtNzc0LDcgKzc2Nyw3IEBAIHN0YXRpYyBOU1VSTCogdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydCgKIAogLSAodm9pZClfdXBkYXRlVGV4dFNpemVNdWx0aXBsaWVy
CiB7Ci0gICAgW1tzZWxmIF9icmlkZ2VdIHNldFRleHRTaXplTXVsdGlwbGllcjpbW3NlbGYgX3dl
YlZpZXddIHRleHRTaXplTXVsdGlwbGllcl1dOyAgICAKKyAgICBbW3NlbGYgX2ZyYW1lXSBfc2V0
VGV4dFNpemVNdWx0aXBsaWVyOltbc2VsZiBfd2ViVmlld10gdGV4dFNpemVNdWx0aXBsaWVyXV07
ICAgIAogfQogCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCkBAIC0xMDQ0LDcgKzEwMzcs
NyBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjCiAKICAgICBOU1Bv
aW50IG9yaWdpbiA9IFtbc2VsZiBzdXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOwogICAgIGlmICgh
TlNFcXVhbFBvaW50cyhfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uLCBvcmlnaW4pKSB7Ci0g
ICAgICAgIFtbc2VsZiBfYnJpZGdlXSBzZW5kU2Nyb2xsRXZlbnRdOworICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfc2VuZFNjcm9sbEV2ZW50XTsKICAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJv
bGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogICAgICAgICAKICAgICAg
ICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKQEAgLTE1ODIsNyArMTU3NSw3
IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWMKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBbW3NlbGYgX2JyaWRnZV0gc21hcnRJbnNlcnRGb3JTdHJp
bmc6cGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6cmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5n
OmJlZm9yZVN0cmluZyBhZnRlclN0cmluZzphZnRlclN0cmluZ107CisgICAgW1tzZWxmIF9mcmFt
ZV0gX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOnJhbmdl
VG9SZXBsYWNlIGJlZm9yZVN0cmluZzpiZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6YWZ0ZXJTdHJp
bmddOwogfQogCiAtIChCT09MKV9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZApAQCAtMTg3OSw3ICsxODcyLDcgQEAgc3RhdGljIHZvaWQgX3Vw
ZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhYwogICAgICAgICBpZiAoW0hUTUxTdHJpbmcgbGVuZ3Ro
XSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCi0gICAgICAgIHJldHVy
biBbW3NlbGYgX2JyaWRnZV0gZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0
cmluZyBiYXNlVVJMU3RyaW5nOm5pbF07CisgICAgICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBf
ZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0cmluZyBiYXNlVVJMU3RyaW5n
Om5pbF07CiAgICAgfQogCiAgICAgLy8gVGhlIF9oYXNIVE1MRG9jdW1lbnQgY2xhdXNlIGhlcmUg
aXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBOU0F0dHJpYnV0ZWRTdHJpbmc6IFJhZGFyIDUw
NTIzNjkuCkBAIC0xOTYxLDcgKzE5NTQsNyBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVy
VGltZXJDYWxsYmFjCiAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAgICAgaWYgKHBi
b2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKQotICAgICAgICByZXR1cm4gW1tzZWxmIF9i
cmlkZ2VdIGRvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDpbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBl
Ok5TU3RyaW5nUGJvYXJkVHlwZV0KKyAgICAgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9kb2N1
bWVudEZyYWdtZW50V2l0aFRleHQ6W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bi
b2FyZFR5cGVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OmNvbnRleHRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgIHJldHVybiBuaWw7CkBAIC0yNzEwLDcgKzI3MDMsNyBAQCBzdGF0aWMg
dm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiB7CiAgICAgW3NlbGYgcmVhcHBseVN0
eWxlc107CiAgICAgCi0gICAgaWYgKCFfcHJpdmF0ZS0+bmVlZHNMYXlvdXQgJiYgIVtbc2VsZiBf
YnJpZGdlXSBuZWVkc0xheW91dF0pCisgICAgaWYgKCFfcHJpdmF0ZS0+bmVlZHNMYXlvdXQgJiYg
IVtbc2VsZiBfZnJhbWVdIF9uZWVkc0xheW91dF0pCiAgICAgICAgIHJldHVybjsKIAogI2lmZGVm
IExPR19USU1FUyAgICAgICAgCkBAIC0yNzIwLDkgKzI3MTMsOSBAQCBzdGF0aWMgdm9pZCBfdXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiAgICAgTE9HKFZpZXcsICIlQCBkb2luZyBsYXlvdXQi
LCBzZWxmKTsKIAogICAgIGlmIChtaW5QYWdlV2lkdGggPiAwLjApIHsKLSAgICAgICAgW1tzZWxm
IF9icmlkZ2VdIGZvcmNlTGF5b3V0V2l0aE1pbmltdW1QYWdlV2lkdGg6bWluUGFnZVdpZHRoIG1h
eGltdW1QYWdlV2lkdGg6bWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXplOmFkanVzdFZpZXdT
aXplXTsKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2ZvcmNlTGF5b3V0V2l0aE1pbmltdW1QYWdl
V2lkdGg6bWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6bWF4UGFnZVdpZHRoIGFkanVzdGlu
Z1ZpZXdTaXplOmFkanVzdFZpZXdTaXplXTsKICAgICB9IGVsc2UgewotICAgICAgICBbW3NlbGYg
X2JyaWRnZV0gZm9yY2VMYXlvdXRBZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07Cisg
ICAgICAgIFtbc2VsZiBfZnJhbWVdIF9mb3JjZUxheW91dEFkanVzdGluZ1ZpZXdTaXplOmFkanVz
dFZpZXdTaXplXTsKICAgICB9CiAgICAgX3ByaXZhdGUtPm5lZWRzTGF5b3V0ID0gTk87CiAgICAg
CkBAIC0yODM2LDcgKzI4MjksNyBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlCiAgICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKICAgICAgICAgfQogCi0gICAg
ICAgIFtbc2VsZiBfYnJpZGdlXSBkcmF3UmVjdDpyZWN0XTsKKyAgICAgICAgW1tzZWxmIF9mcmFt
ZV0gX2RyYXdSZWN0OnJlY3RdOwogCiAgICAgICAgIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgZm9y
IDxyZGFyOi8vcHJvYmxlbS81MDIzNTQ1Pi4gV2UgY2FuIGhpdCBhIHJhY2UgY29uZGl0aW9uIHdo
ZXJlIGRyYXdSZWN0IHdpbGwgYmUKICAgICAgICAgLy8gY2FsbGVkIGFmdGVyIHRoZSBXZWJWaWV3
IGhhcyBjbG9zZWQuIElmIHRoZSBjbGllbnQgZGlkIG5vdCBwcm9wZXJseSBjbG9zZSB0aGUgV2Vi
VmlldyBhbmQgc2V0IHRoZSAKQEAgLTMxMDgsNyArMzEwMSw3IEBAIGRvbmU6CiAgICAgICAgIE5T
UG9pbnQgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxvYy54ICsgZHJh
Z0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBkcmFnQ29u
dHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7CiAgICAgfQogICAgIAotICAgIFtbc2VsZiBfYnJp
ZGdlXSBkcmFnU291cmNlTW92ZWRUbzp3aW5kb3dNb3VzZUxvY107CisgICAgW1tzZWxmIF9mcmFt
ZV0gX2RyYWdTb3VyY2VNb3ZlZFRvOndpbmRvd01vdXNlTG9jXTsKIH0KIAogLSAodm9pZClkcmFn
Z2VkSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpYVBvaW50IG9wZXJh
dGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgpAQCAtMzEyNCw3ICszMTE3LDcgQEAgZG9u
ZToKICAgICAgICAgZHJhZ0NvbnRyb2xsZXItPmRyYWdFbmRlZCgpOwogICAgIH0KICAgICAKLSAg
ICBbW3NlbGYgX2JyaWRnZV0gZHJhZ1NvdXJjZUVuZGVkQXQ6d2luZG93TW91c2VMb2Mgb3BlcmF0
aW9uOm9wZXJhdGlvbl07CisgICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VFbmRlZEF0Ondp
bmRvd01vdXNlTG9jIG9wZXJhdGlvbjpvcGVyYXRpb25dOwogICAgIAogICAgIC8vIFByZXZlbnQg
cXVldWVkIG1vdXNlRHJhZ2dlZCBldmVudHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5k
IGZha2UgbW91c2VVcCBldmVudC4KICAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRF
dmVudHMgPSBZRVM7CkBAIC0zMzQ4LDcgKzMzNDEsNyBAQCBub1Byb21pc2VkRGF0YToKICAgICAg
ICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBh
Z2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKIAogICAgIGZsb2F0IG5ld0JvdHRvbUZs
b2F0ID0gKm5ld0JvdHRvbTsKLSAgICBbW3NlbGYgX2JyaWRnZV0gYWRqdXN0UGFnZUhlaWdodE5l
dzombmV3Qm90dG9tRmxvYXQgdG9wOm9sZFRvcCBib3R0b206b2xkQm90dG9tIGxpbWl0OmJvdHRv
bUxpbWl0XTsKKyAgICBbW3NlbGYgX2ZyYW1lXSBfYWRqdXN0UGFnZUhlaWdodE5ldzombmV3Qm90
dG9tRmxvYXQgdG9wOm9sZFRvcCBib3R0b206b2xkQm90dG9tIGxpbWl0OmJvdHRvbUxpbWl0XTsK
ICAgICAqbmV3Qm90dG9tID0gbmV3Qm90dG9tRmxvYXQ7CiAKICAgICBpZiAoIXdhc0luUHJpbnRp
bmdNb2RlKSB7CkBAIC0zNDcwLDcgKzM0NjMsNyBAQCBub1Byb21pc2VkRGF0YToKICAgICBmbG9h
dCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZh
Y3Rvcl07CiAgICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07CiAgICAgZmxvYXQgZnVs
bFBhZ2VIZWlnaHQgPSBmbG9vcmYoW3NlbGYgX2NhbGN1bGF0ZVByaW50SGVpZ2h0XS90b3RhbFNj
YWxlRmFjdG9yKTsKLSAgICBOU0FycmF5ICpuZXdQYWdlUmVjdHMgPSBbW3NlbGYgX2JyaWRnZV0g
Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9y
CisgICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdl
UmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdodF07CiAgICAgCiAgICAgLy8gQXBwS2l0
IGdldHMgYWxsIG1lc3NlZCB1cCBpZiB5b3UgZ2l2ZSBpdCBhIHplcm8tbGVuZ3RoIHBhZ2UgY291
bnQgKHNlZSAzNTc2MzM0KSwgc28gaWYgd2UKQEAgLTM0ODQsNyArMzQ3Nyw3IEBAIG5vUHJvbWlz
ZWREYXRhOgogICAgICAgICAvLyBjb250ZW50IG9udG8gb25lIGZld2VyIHBhZ2UuIElmIGl0IGRv
ZXMsIHVzZSB0aGUgYWRqdXN0ZWQgc2NhbGUuIElmIG5vdCwgdXNlIHRoZSBvcmlnaW5hbCBzY2Fs
ZS4KICAgICAgICAgZmxvYXQgbGFzdFBhZ2VIZWlnaHQgPSBOU0hlaWdodChbW25ld1BhZ2VSZWN0
cyBsYXN0T2JqZWN0XSByZWN0VmFsdWVdKTsKICAgICAgICAgaWYgKGxhc3RQYWdlSGVpZ2h0L2Z1
bGxQYWdlSGVpZ2h0IDwgTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8pIHsKLSAgICAgICAgICAg
IE5TQXJyYXkgKmFkanVzdGVkUGFnZVJlY3RzID0gW1tzZWxmIF9icmlkZ2VdIGNvbXB1dGVQYWdl
UmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgorICAgICAgICAg
ICAgTlNBcnJheSAqYWRqdXN0ZWRQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBh
Z2VSZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdodCpQcmludGlu
Z09ycGhhblNocmlua0FkanVzdG1lbnRdOwogICAgICAgICAgICAgLy8gVXNlIHRoZSBhZGp1c3Rl
ZCByZWN0cyBvbmx5IGlmIHRoZSBwYWdlIGNvdW50IHdlbnQgZG93bgogICAgICAgICAgICAgaWYg
KFthZGp1c3RlZFBhZ2VSZWN0cyBjb3VudF0gPCBbbmV3UGFnZVJlY3RzIGNvdW50XSkgewpAQCAt
MzU5Myw3ICszNTg2LDcgQEAgbm9Qcm9taXNlZERhdGE6CiAtIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lCiB7CiAgICAgaWYgKFthdHRyaWJ1
dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVd
KSB7Ci0gICAgICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2JyaWRnZV0gYWNjZXNzaWJpbGl0eVRy
ZWVdOworICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlU
cmVlXTsKICAgICAgICAgaWYgKGFjY1RyZWUpCiAgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0OmFjY1RyZWVdOwogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzYwMyw3
ICszNTk2LDcgQEAgbm9Qcm9taXNlZERhdGE6CiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2Vk
VUlFbGVtZW50CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfYnJpZGdlXSBhY2Nlc3NpYmls
aXR5VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5
VHJlZV07CiAgICAgaWYgKGFjY1RyZWUpCiAgICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3Np
YmlsaXR5Rm9jdXNlZFVJRWxlbWVudF07CiAgICAgcmV0dXJuIHNlbGY7CkBAIC0zNjExLDcgKzM2
MDQsNyBAQCBub1Byb21pc2VkRGF0YToKIAogLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5T
UG9pbnQpcG9pbnQKIHsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9icmlkZ2VdIGFjY2Vzc2li
aWxpdHlUcmVlXTsKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxp
dHlUcmVlXTsKICAgICBpZiAoYWNjVHJlZSkgewogICAgICAgICBOU1BvaW50IHdpbmRvd0Nvb3Jk
ID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpwb2ludF07CiAgICAgICAgIHJl
dHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpbc2VsZiBjb252ZXJ0UG9pbnQ6d2lu
ZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07CkBAIC0zNjIxLDcgKzM2MTQsNyBAQCBub1Byb21pc2Vk
RGF0YToKIAogLSAoaWQpX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcgKilz
dWJ2aWV3CiB7Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfYnJpZGdlXSBhY2Nlc3NpYmlsaXR5
VHJlZV07CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJl
ZV07CiAgICAgaWYgKCFhY2NUcmVlKQogICAgICAgICByZXR1cm4gc2VsZjsKICAgICBpZCBwYXJl
bnQgPSBbYWNjVHJlZSBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmlld107CkBA
IC00MTA4LDcgKzQxMDEsNyBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAgLyog
TlNDCiAgICAgLy8gdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGJlY2F1c2UgaXQgd29ya3MgaW4gc3Rh
cnRTcGVha2luZzosIGFuZCBJIGtub3cgc2V0QmFja2dyb3VuZENvbG9yOiBkb2VzIHRoZQogICAg
IC8vIHJpZ2h0IHRoaW5nIGJlY2F1c2UgSSB0ZXN0ZWQgaXQgd2l0aCBbc2VsZiBfc2VsZWN0ZWRS
YW5nZV0uCiAgICAgLy8gRklYTUU6IFRoaXMgd29uJ3QgYWN0dWFsbHkgYXBwbHkgdGhlIHN0eWxl
IHRvIHRoZSBlbnRpcmUgcmFuZ2UgaGVyZSwgYmVjYXVzZSBpdCBlbmRzIHVwIGNhbGxpbmcKLSAg
ICAvLyBbYnJpZGdlIGFwcGx5U3R5bGU6XSwgd2hpY2ggb3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQg
c2VsZWN0aW9uLiBUbyBtYWtlIHRoaXMgd29yayByaWdodCwgd2UnbGwKKyAgICAvLyBbZnJhbWUg
X2FwcGx5U3R5bGU6XSwgd2hpY2ggb3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBU
byBtYWtlIHRoaXMgd29yayByaWdodCwgd2UnbGwKICAgICAvLyBuZWVkIHRvIHNhdmUgb2ZmIHRo
ZSBzZWxlY3Rpb24sIHRlbXBvcmFyaWx5IHNldCBpdCB0byB0aGUgZW50aXJlIHJhbmdlLCBtYWtl
IHRoZSBjaGFuZ2UsIHRoZW4KICAgICAvLyByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uLgogICAg
IFtzZWxmIF9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91
bmRDb2xvcjopIGluUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKQEAgLTQxMzIsMTIgKzQx
MjUsMTIgQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogICAgIGlm
ICghW3NlbGYgX2NhbkVkaXRdKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJGcmFtZUJyaWRn
ZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYg
X2ZyYW1lXTsKICAgICBbc2VsZiBzZWxlY3RXb3JkOm5pbF07Ci0gICAgTlNTdHJpbmcgKndvcmQg
PSBbW2JyaWRnZSBzZWxlY3RlZFN0cmluZ10gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAg
ICBOU1N0cmluZyAqd29yZCA9IFtbZnJhbWUgX3NlbGVjdGVkU3RyaW5nXSBwZXJmb3JtU2VsZWN0
b3I6c2VsZWN0b3JdOwogICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhIGRpZmZlcmVudCBh
Y3Rpb24gY29udGV4dCBvdGhlciB0aGFuICJ0eXBlZCI/CiAgICAgaWYgKFtzZWxmIF9zaG91bGRS
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0
aW9uVHlwZWRdKQotICAgICAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3Jk
IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpOT107CisgICAgICAgIFtmcmFtZSBf
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OndvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRS
ZXBsYWNlOk5PXTsKIH0KIAogLSAodm9pZCl1cHBlcmNhc2VXb3JkOihpZClzZW5kZXIKQEAgLTQy
MjAsNyArNDIxMyw3IEBAIE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6bmV3V29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkK
LSAgICAgICAgW1tzZWxmIF9icmlkZ2VdIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3Jk
IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgc2VsZWN0UmVwbGFjZW1l
bnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CiB9CiAKIC0gKHZvaWQpY2hhbmdlU3BlbGxpbmc6KGlk
KXNlbmRlcgpAQCAtNDI2MSwxMSArNDI1NCwxMSBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFt
ZSAgICAgICAgLyogTlNDCiB7CiAgICAgQ09NTUFORF9QUk9MT0dVRQogCi0gICAgV2ViRnJhbWVC
cmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtz
ZWxmIF9mcmFtZV07CiAgICAgRE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2Vd
OwogICAgIGlmICghcmFuZ2UgfHwgW3JhbmdlIGNvbGxhcHNlZF0pCiAgICAgICAgIHJhbmdlID0g
W3NlbGYgX2RvY3VtZW50UmFuZ2VdOwotICAgIFtOU0FwcCBzcGVha1N0cmluZzpbYnJpZGdlIHN0
cmluZ0ZvclJhbmdlOnJhbmdlXV07CisgICAgW05TQXBwIHNwZWFrU3RyaW5nOltmcmFtZSBfc3Ry
aW5nRm9yUmFuZ2U6cmFuZ2VdXTsKIH0KIAogLSAodm9pZClzdG9wU3BlYWtpbmc6KGlkKXNlbmRl
cgpAQCAtNDU3Miw3ICs0NTY1LDcgQEAgc3RhdGljIEJPT0wgd3JpdGluZ0RpcmVjdGlvbktleUJp
bmRpbmdzRQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQk9PTCBtdWx0aXBsZSA9IE5POwot
ICAgIE5TRm9udCAqZm9udCA9IFtbc2VsZiBfYnJpZGdlXSBmb250Rm9yU2VsZWN0aW9uOiZtdWx0
aXBsZV07CisgICAgTlNGb250ICpmb250ID0gW1tzZWxmIF9mcmFtZV0gX2ZvbnRGb3JTZWxlY3Rp
b246Jm11bHRpcGxlXTsKIAogICAgIC8vIEZJWE1FOiBmb3Igbm93LCByZXR1cm4gYSBib2d1cyBm
b250IHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGUgZW1wdHkgc2VsZWN0aW9uIGZyb20gdGhlIG5vbi1l
bXB0eQogICAgIC8vIHNlbGVjdGlvbi4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMg
b25jZSB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgd29ya3MgcHJvcGVybHkuCkBAIC00NTkwLDcgKzQ1
ODMsNyBAQCBzdGF0aWMgQk9PTCB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFCiAKIC0gKEJP
T0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10g
c21hcnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3NlbGYgX2JyaWRnZV0gc2VsZWN0aW9uR3Jh
bnVsYXJpdHldID09IFdvcmRHcmFudWxhcml0eTsKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3
XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3Rpb25H
cmFudWxhcml0eV0gPT0gV29yZEdyYW51bGFyaXR5OwogfQogCiAtIChOU0V2ZW50ICopX21vdXNl
RG93bkV2ZW50CkBAIC00ODY5LDcgKzQ4NjIsNyBAQCBzdGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhp
Y3NTY3JlZW5Qb2ludEZvCiB7CiAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lk
ZSk7CiAKLSAgICBpZiAoW1tzZWxmIF9icmlkZ2VdIG5lZWRzTGF5b3V0XSkKKyAgICBpZiAoW1tz
ZWxmIF9mcmFtZV0gX25lZWRzTGF5b3V0XSkKICAgICAgICAgX3ByaXZhdGUtPm5lZWRzTGF5b3V0
ID0gWUVTOwogICAgIGlmIChfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzIHx8IF9wcml2YXRl
LT5uZWVkc0xheW91dCkKICAgICAgICAgW3NlbGYgbGF5b3V0XTsKQEAgLTQ5NTYsMjYgKzQ5NDks
MjYgQEAgc3RhdGljIEJPT0wgaXNUZXh0SW5wdXQoRnJhbWUqIGNvcmVGcmFtZQogLSAoTlNVSW50
ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50KXRoZVBvaW50CiB7CiAgICAgTlNX
aW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRn
ZSA9IFtzZWxmIF9icmlkZ2VdOworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07
CiAKICAgICBpZiAod2luZG93KQogICAgICAgICB0aGVQb2ludCA9IFt3aW5kb3cgY29udmVydFNj
cmVlblRvQmFzZTp0aGVQb2ludF07CiAgICAgdGhlUG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6
dGhlUG9pbnQgZnJvbVZpZXc6bmlsXTsKIAotICAgIERPTVJhbmdlICpyYW5nZSA9IFticmlkZ2Ug
Y2hhcmFjdGVyUmFuZ2VBdFBvaW50OnRoZVBvaW50XTsKKyAgICBET01SYW5nZSAqcmFuZ2UgPSBb
ZnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQb2ludDp0aGVQb2ludF07CiAgICAgaWYgKCFyYW5nZSkg
ewogICAgICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVm
KSAtPiBOU05vdEZvdW5kIiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSk7CiAgICAgICAgIHJldHVy
biBOU05vdEZvdW5kOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBbYnJpZGdl
IGNvbnZlcnRET01SYW5nZVRvTlNSYW5nZTpyYW5nZV0ubG9jYXRpb247CisgICAgdW5zaWduZWQg
cmVzdWx0ID0gW2ZyYW1lIF9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6cmFuZ2VdLmxvY2F0aW9u
OwogICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBvaW50OiglZiwgJWYpIC0+
ICV1IiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5TUmFuZ2UpdGhl
UmFuZ2UKIHsgICAgCi0gICAgV2ViRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2Vd
OworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CiAgICAgCiAgICAgLy8gSnVz
dCB0byBtYXRjaCBOU1RleHRWaWV3J3MgYmVoYXZpb3IuIFJlZ3Jlc3Npb24gdGVzdHMgY2Fubm90
IGRldGVjdCB0aGlzOwogICAgIC8vIHRvIHJlcHJvZHVjZSwgdXNlIGEgdGVzdCBhcHBsaWNhdGlv
biBmcm9tIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2ODIKQEAgLTQ5
ODMsNyArNDk3Niw3IEBAIHN0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJhbWUK
ICAgICBpZiAoKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoIDwgdGhlUmFuZ2Uu
bG9jYXRpb24pICYmICh0aGVSYW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCAhPSAwKSkK
ICAgICAgICAgdGhlUmFuZ2UubGVuZ3RoID0gMDsKICAgICAKLSAgICBET01SYW5nZSAqcmFuZ2Ug
PSBbYnJpZGdlIGNvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07CisgICAgRE9NUmFu
Z2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOwog
ICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9u
LCB0aGVSYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAw
KTsKQEAgLTQ5OTIsNyArNDk4NSw3IEBAIHN0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBj
b3JlRnJhbWUKICAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CiAgICAgQVNTRVJU
KFtyYW5nZSBlbmRDb250YWluZXJdKTsKICAgICAKLSAgICBOU1JlY3QgcmVzdWx0UmVjdCA9IFti
cmlkZ2UgZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOworICAgIE5TUmVjdCByZXN1bHRSZWN0
ID0gW2ZyYW1lIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07CiAgICAgcmVzdWx0UmVjdCA9
IFtzZWxmIGNvbnZlcnRSZWN0OnJlc3VsdFJlY3QgdG9WaWV3Om5pbF07CiAKICAgICBOU1dpbmRv
dyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKQEAgLTUwMDksNyArNTAwMiw3IEBAIHN0YXRpYyBC
T09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJhbWUKICAgICAgICAgTE9HKFRleHRJbnB1dCwg
InNlbGVjdGVkUmFuZ2UgLT4gKE5TTm90Rm91bmQsIDApIik7CiAgICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICB9Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbW3Nl
bGYgX2JyaWRnZV0gc2VsZWN0ZWROU1JhbmdlXTsKKyAgICBOU1JhbmdlIHJlc3VsdCA9IFtbc2Vs
ZiBfZnJhbWVdIF9zZWxlY3RlZE5TUmFuZ2VdOwogCiAgICAgTE9HKFRleHRJbnB1dCwgInNlbGVj
dGVkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC01MDE3LDcgKzUwMTAsNyBAQCBzdGF0aWMgQk9PTCBpc1Rl
eHRJbnB1dChGcmFtZSogY29yZUZyYW1lCiAKIC0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKIHsKLSAg
ICBOU1JhbmdlIHJlc3VsdCA9IFtbc2VsZiBfYnJpZGdlXSBtYXJrZWRUZXh0TlNSYW5nZV07Cisg
ICAgTlNSYW5nZSByZXN1bHQgPSBbW3NlbGYgX2ZyYW1lXSBfbWFya2VkVGV4dE5TUmFuZ2VdOwog
ICAgIExPRyhUZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2Nh
dGlvbiwgcmVzdWx0Lmxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUwMjgsOCAr
NTAyMSw4IEBAIHN0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJhbWUKICAgICAg
ICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkg
LT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1
cm4gbmlsOwogICAgIH0KLSAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRn
ZV07Ci0gICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0gW2JyaWRnZSBjb252ZXJ0TlNSYW5nZVRvRE9N
UmFuZ2U6bnNSYW5nZV07CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAg
ICBET01SYW5nZSAqZG9tUmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTpu
c1JhbmdlXTsKICAgICBpZiAoIWRvbVJhbmdlKSB7CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9j
YXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTUxMzksNyAr
NTEzMiw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXQKICAgICAg
ICAgLy8gVGhlIEFwcEtpdCBhZGRzIGEgJ3NlY3JldCcgcHJvcGVydHkgdG8gdGhlIHN0cmluZyB0
aGF0IGNvbnRhaW5zIHRoZSByZXBsYWNlbWVudCByYW5nZS4KICAgICAgICAgLy8gVGhlIHJlcGxh
Y2VtZW50IHJhbmdlIGlzIHRoZSByYW5nZSBvZiB0aGUgdGhlIHRleHQgdGhhdCBzaG91bGQgYmUg
cmVwbGFjZWQgd2l0aCB0aGUgbmV3IHN0cmluZy4KICAgICAgICAgaWYgKHJhbmdlU3RyaW5nKQot
ICAgICAgICAgICAgW1tzZWxmIF9icmlkZ2VdIHNlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJp
bmcocmFuZ2VTdHJpbmcpXTsKKyAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1Jh
bmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07CiAKICAgICAgICAgdGV4dCA9IFtz
dHJpbmcgc3RyaW5nXTsKICAgICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRlcmxp
bmVzKTsKQEAgLTUyMjAsNyArNTIxMyw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVz
KE5TQXR0cmlidXQKICAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRy
aWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAg
bG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbdGV4dCBs
ZW5ndGhdKV07CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTog
JUAiLCByYW5nZVN0cmluZyk7CiAgICAgICAgIGlmIChyYW5nZVN0cmluZykgewotICAgICAgICAg
ICAgW1tzZWxmIF9icmlkZ2VdIHNlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VT
dHJpbmcpXTsKKyAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFu
Z2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07CiAgICAgICAgICAgICBpc0Zyb21JbnB1dE1ldGhv
ZCA9IFlFUzsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNTMyNSw5ICs1MzE4LDkgQEAgc3Rh
dGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogewogICAgIC8vIEZJWE1FOiAz
NzY5NjU0IC0gV2Ugc2hvdWxkIHByZXNlcnZlIGNhc2Ugb2Ygc3RyaW5nIGJlaW5nIGluc2VydGVk
LCBldmVuIGluIHByZWZpeCAoYnV0IHRoZW4gYWxzbyBiZQogICAgIC8vIGFibGUgdG8gcmV2ZXJ0
IHRoYXQpLiAgTWltaWMgTlNUZXh0LgotICAgIFdlYkZyYW1lQnJpZGdlICpicmlkZ2UgPSBbX3Zp
ZXcgX2JyaWRnZV07CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CiAgICAg
TlNTdHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vic3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0
aF07Ci0gICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RS
ZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICBbZnJhbWUgX3JlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6
Tk9dOwogfQogCiAvLyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0K
QEAgLTU0MjQsOSArNTQxNyw5IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0
cmlidXQKICAgICAgICAgfQogCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQot
ICAgICAgICBXZWJGcmFtZUJyaWRnZSAqYnJpZGdlID0gW192aWV3IF9icmlkZ2VdOwotICAgICAg
ICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoW192aWV3IF9mcmFtZV0pLT5zZWxlY3Rp
b25Db250cm9sbGVyKCktPnRvUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIERPTVJhbmdlICp3aG9s
ZVdvcmQgPSBbYnJpZGdlIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9u
Q29udHJvbGxlcjo6RVhURU5ECisgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJh
bWVdOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxl
Y3Rpb25Db250cm9sbGVyKCktPnRvUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICp3
aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0
aW9uQ29udHJvbGxlcjo6RVhURU5ECiAgICAgICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29u
dHJvbGxlcjo6QkFDS1dBUkQgZ3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAg
RE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CiAgICAgICAgIFtwcmVm
aXggc2V0RW5kOltzZWxlY3Rpb24gc3RhcnRDb250YWluZXJdIG9mZnNldDpbc2VsZWN0aW9uIHN0
YXJ0T2Zmc2V0XV07CkBAIC01NDM2LDcgKzU0MjksNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5k
ZXJsaW5lcyhOU0F0dHJpYnV0CiAgICAgICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBOU1N0cmluZyAqcHJlZml4U3RyID0gW2JyaWRnZSBz
dHJpbmdGb3JSYW5nZTpwcmVmaXhdOworICAgICAgICBOU1N0cmluZyAqcHJlZml4U3RyID0gW2Zy
YW1lIF9zdHJpbmdGb3JSYW5nZTpwcmVmaXhdOwogICAgICAgICBOU1N0cmluZyAqdHJpbW1lZFBy
ZWZpeCA9IFtwcmVmaXhTdHIgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFy
YWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKICAgICAgICAgaWYg
KFt0cmltbWVkUHJlZml4IGxlbmd0aF0gPT0gMCkgewogICAgICAgICAgICAgTlNCZWVwKCk7CkBA
IC01NDU1LDkgKzU0NDgsOSBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJp
YnV0CiAgICAgICAgICAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBvYmplY3RB
dEluZGV4OjBdXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghX29yaWdp
bmFsU3RyaW5nKTsgICAgICAgLy8gdGhpcyBzaG91bGQgb25seSBiZSBzZXQgSUZGIHdlIGhhdmUg
YSBwb3B1cCB3aW5kb3cKLSAgICAgICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IFtbYnJpZGdlIHN0
cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0YWluXTsKKyAgICAgICAgICAgIF9vcmlnaW5hbFN0
cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0YWluXTsKICAgICAg
ICAgICAgIFtzZWxmIF9idWlsZFVJXTsKLSAgICAgICAgICAgIE5TUmVjdCB3b3JkUmVjdCA9IFti
cmlkZ2UgY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRDb250YWluZXJdIG9mZnNldDpb
d2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0
cmVhbV07CisgICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0
Tm9kZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9m
ZnNldF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOwogICAgICAgICAg
ICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5vdCB0aGUgY2FyZXQKICAgICAgICAgICAg
IC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0aW9uaW5nIGZvciByaWdodCB0byBsZWZ0
IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRoZSB1cHBlcgogICAgICAgICAgICAgLy8g
cmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3RlYWQgb2YgdXBwZXIgbGVmdCwgYW5kIHRo
ZSArMSB3b3VsZCBiZSBhIC0xLgpAQCAtNTQ4MCw4ICs1NDczLDggQEAgc3RhdGljIHZvaWQgZXh0
cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgICAgICBfcG9wdXBXaW5kb3cgPSBuaWw7CiAK
ICAgICAgICAgaWYgKHJldmVydENoYW5nZSkgewotICAgICAgICAgICAgV2ViRnJhbWVCcmlkZ2Ug
KmJyaWRnZSA9IFtfdmlldyBfYnJpZGdlXTsKLSAgICAgICAgICAgIFticmlkZ2UgcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21h
cnRSZXBsYWNlOk5PXTsKKyAgICAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJh
bWVdOworICAgICAgICAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdp
bmFsU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwogICAgICAg
ICB9IGVsc2UgaWYgKFtfdmlldyBfaGFzU2VsZWN0aW9uXSkgewogICAgICAgICAgICAgaWYgKGdv
TGVmdCkKICAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07CkBAIC01NjU2
LDcgKzU2NDksNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAK
IC0gKE5TU3RyaW5nICopc3RyaW5nCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBzdHJp
bmdGb3JSYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOworICAgIHJldHVybiBbW3NlbGYgX2Zy
YW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKIH0KIAogLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQpAQCAtNTY4Niw3ICs1Njc5LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGlu
ZXMoTlNBdHRyaWJ1dAogCiAtIChOU1N0cmluZyAqKXNlbGVjdGVkU3RyaW5nCiB7Ci0gICAgcmV0
dXJuIFtbc2VsZiBfYnJpZGdlXSBzZWxlY3RlZFN0cmluZ107CisgICAgcmV0dXJuIFtbc2VsZiBf
ZnJhbWVdIF9zZWxlY3RlZFN0cmluZ107CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZwpAQCAtNTcxMiw3ICs1NzA1LDcgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQog
ICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBzZWFy
Y2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3Jh
cDp3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOnN0YXJ0SW5TZWxlY3Rpb25dOworICAgIHJldHVy
biBbW3NlbGYgX2ZyYW1lXSBfc2VhcmNoRm9yOnN0cmluZyBkaXJlY3Rpb246Zm9yd2FyZCBjYXNl
U2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjpzdGFydElu
U2VsZWN0aW9uXTsKIH0KIAogQGVuZApAQCAtNTczNCwyNyArNTcyNywyNyBAQCBzdGF0aWMgdm9p
ZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAKIC0gKE5TVUludGVnZXIpbWFya0FsbE1h
dGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VG
bGFnIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0CiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdl
XSBtYXJrQWxsTWF0Y2hlc0ZvclRleHQ6c3RyaW5nIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgbGlt
aXQ6bGltaXRdOworICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfbWFya0FsbE1hdGNoZXNGb3JU
ZXh0OnN0cmluZyBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIGxpbWl0OmxpbWl0XTsKIH0KIAogLSAo
dm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCiB7
Ci0gICAgW1tzZWxmIF9icmlkZ2VdIHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6
bmV3VmFsdWVdOworICAgIFtbc2VsZiBfZnJhbWVdIF9zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkOm5ld1ZhbHVlXTsKIH0KIAogLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBtYXJrZWRUZXh0TWF0Y2hl
c0FyZUhpZ2hsaWdodGVkXTsKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX21hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWRdOwogfQogCiAtICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVz
CiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSB1bm1hcmtBbGxUZXh0TWF0Y2hlc107Cisg
ICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF91bm1hcmtBbGxUZXh0TWF0Y2hlc107CiB9CiAKIC0g
KE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVzCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJp
ZGdlXSByZWN0c0ZvclRleHRNYXRjaGVzXTsKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3Jl
Y3RzRm9yVGV4dE1hdGNoZXNdOwogfQogCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUmVuZGVyTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVu
ZGVyTm9kZS5tbQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVu
ZGVyTm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW1wb3J0ICJX
ZWJSZW5kZXJOb2RlLmgiCiAKLSNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUJyaWRnZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYkZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZUludGVybmFsLmg+CkBAIC04Miw3ICs4
MSw3IEBACiAgICAgfQogICAgIAogICAgIGNvcGllciA9IFtbV2ViS2l0UmVuZGVyVHJlZUNvcGll
ciBhbGxvY10gaW5pdF07Ci0gICAgc2VsZiA9IFtbW1tbdmlldyB3ZWJGcmFtZV0gX2RhdGFTb3Vy
Y2VdIF9icmlkZ2VdIGNvcHlSZW5kZXJUcmVlOmNvcGllcl0gcmV0YWluXTsKKyAgICBzZWxmID0g
W1tbdmlldyB3ZWJGcmFtZV0gX2NvcHlSZW5kZXJUcmVlOmNvcGllcl0gcmV0YWluXTsKICAgICBb
Y29waWVyIHJlbGVhc2VdOwogICAgIAogICAgIHJldHVybiBzZWxmOwpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlJlc291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJSZXNvdXJjZS5tbQkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUmVzb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9y
dCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCiAKLSNpbXBvcnQgIldlYkZyYW1lQnJpZGdlLmgiCisj
aW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJOU0RpY3Rpb25hcnlFeHRy
YXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVVUkxSZXNwb25zZS5oPgpAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IFdlYlJlc291cmNlUmVzcG8KIC0gKE5TU3RyaW5nICopX3N0cmluZ1ZhbHVlCiB7CiAgICAg
TlNTdHJpbmcgKnRleHRFbmNvZGluZ05hbWUgPSBbc2VsZiB0ZXh0RW5jb2RpbmdOYW1lXTsKLSAg
ICByZXR1cm4gW1dlYkZyYW1lQnJpZGdlIHN0cmluZ1dpdGhEYXRhOl9wcml2YXRlLT5kYXRhIHRl
eHRFbmNvZGluZ05hbWU6dGV4dEVuY29kaW5nTmFtZV07CisgICAgcmV0dXJuIFtXZWJGcmFtZSBf
c3RyaW5nV2l0aERhdGE6X3ByaXZhdGUtPmRhdGEgdGV4dEVuY29kaW5nTmFtZTp0ZXh0RW5jb2Rp
bmdOYW1lXTsKIH0KIAogQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlw
dERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpbXBvcnQgIldlYlNjcmlwdERlYnVnZ2VyLmgiCiAjaW1wb3J0ICJXZWJEYXRhU291cmNl
LmgiCiAjaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1l
QnJpZGdlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTY3Jp
cHREZWJ1Z1NlcnZlclByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNpbXBvcnQg
IldlYkVkaXRpbmdEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViRWRpdG9yQ2xpZW50LmgiCiAjaW1w
b3J0ICJXZWJGb3JtRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJGcmFtZUJyaWRnZS5o
IgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50
ZXJuYWwuaCIKICNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvbi5oIgpAQCAtMzcxLDcgKzM3
MCw2IEBAIHN0YXRpYyBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9IDAKIAogQGludGVy
ZmFjZSBXZWJWaWV3IChXZWJGaWxlSW50ZXJuYWwpCiAtIChXZWJGcmFtZSAqKV9zZWxlY3RlZE9y
TWFpbkZyYW1lOwotLSAoV2ViRnJhbWVCcmlkZ2UgKilfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5G
cmFtZTsKIC0gKEJPT0wpX2lzTG9hZGluZzsKIC0gKFdlYkZyYW1lVmlldyAqKV9mcmFtZVZpZXdB
dFdpbmRvd1BvaW50OihOU1BvaW50KXBvaW50OwogLSAoV2ViRnJhbWUgKilfZm9jdXNlZEZyYW1l
OwpAQCAtMTM2OSw3ICsxMzY3LDcgQEAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bkNhY2hlKgogLSAoTlNEaWN0aW9uYXJ5ICopX2Rhc2hib2FyZFJlZ2lvbnMKIHsKICAgICAvLyBP
bmx5IHJldHVybiByZWdpb25zIGZyb20gbWFpbiBmcmFtZS4KLSAgICBGcmFtZSogbWFpbkZyYW1l
ID0gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlkZ2VdIF9mcmFtZV07CisgICAgRnJhbWUqIG1haW5G
cmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVnaW9ucyA9IG1haW5G
cmFtZS0+ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnkoKTsKQEAgLTE0ODcsNyArMTQ4NSw3IEBA
IFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSoKIAogLSAodm9pZClzZXRQ
cm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmc6KEJPT0wpcHJvaGliaXRzCiB7Ci0gICAgRnJhbWUq
IG1haW5GcmFtZSA9IFtbW3NlbGYgbWFpbkZyYW1lXSBfYnJpZGdlXSBfZnJhbWVdOworICAgIEZy
YW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAgIGlmIChtYWluRnJh
bWUpCiAgICAgICAgIG1haW5GcmFtZS0+c2V0UHJvaGliaXRzU2Nyb2xsaW5nKHByb2hpYml0cyk7
CiB9CkBAIC0xNTAwLDE0ICsxNDk4LDE0IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSoKIAogLSAodm9pZClfc2V0SW5WaWV3U291cmNlTW9kZTooQk9PTClmbGFnCiB7
Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IFtbW3NlbGYgbWFpbkZyYW1lXSBfYnJpZGdlXSBfZnJh
bWVdOworICAgIEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAg
IGlmIChtYWluRnJhbWUpCiAgICAgICAgIG1haW5GcmFtZS0+c2V0SW5WaWV3U291cmNlTW9kZShm
bGFnKTsKIH0KIAogLSAoQk9PTClfaW5WaWV3U291cmNlTW9kZQogewotICAgIEZyYW1lKiBtYWlu
RnJhbWUgPSBbW1tzZWxmIG1haW5GcmFtZV0gX2JyaWRnZV0gX2ZyYW1lXTsKKyAgICBGcmFtZSog
bWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKICAgICByZXR1cm4gbWFpbkZyYW1l
ICYmIG1haW5GcmFtZS0+aW5WaWV3U291cmNlTW9kZSgpOwogfQogCkBAIC0xNjE5LDcgKzE2MTcs
NyBAQCBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqCiAKIC0gKHZvaWQp
X2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTooTlNTdHJpbmcgKiluYW1lIHZhbHVlOihOU1N0cmlu
ZyAqKXZhbHVlCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtbW3NlbGYgbWFpbkZyYW1lXSBf
YnJpZGdlXSBfZnJhbWVdOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5G
cmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgY29yZUZy
YW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKS5leGVjdXRlKHZhbHVlKTsKQEAgLTIzMTQsNyAr
MjMxMiw3IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSoKICAgICAg
ICAgICAgIHNjcmlwdCA9IFtzY3JpcHQgc3Vic3RyaW5nRnJvbUluZGV4OnJldHVyblN0cmluZ1Jh
bmdlLmxvY2F0aW9uICsgcmV0dXJuU3RyaW5nUmFuZ2UubGVuZ3RoXTsKICAgICB9CiAKLSAgICBO
U1N0cmluZyAqcmVzdWx0ID0gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlkZ2VdIHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnNjcmlwdF07CisgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IFtbc2VsZiBtYWluRnJhbWVdIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0
cmluZzpzY3JpcHRdOwogICAgIC8vIFRoZSBvbmx5IHdheSBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0RnJvbVN0cmluZyBjYW4gcmV0dXJuIG5pbCBpcyBpZiB0aGUgZnJhbWUgd2FzIHJlbW92
ZWQgYnkgdGhlIHNjcmlwdAogICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGdldCByaWQg
b2YgdGhlIG1haW4gZnJhbWUsIHJlc3VsdCB3aWxsIG5ldmVyIGV2ZXIgYmUgbmlsIGhlcmUuCiAg
ICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0zMDA0LDcgKzMwMDIsNyBAQCBzdGF0aWMgV2ViRnJhbWUg
KmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAKIC0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilh
ZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQK
IHsKLSAgICByZXR1cm4gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlkZ2VdIGFlRGVzY0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOnNjcmlwdF07CisgICAgcmV0dXJuIFtbc2VsZiBtYWlu
RnJhbWVdIF9hZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpzY3JpcHRdOwog
fQogCiAtIChCT09MKWNhbk1hcmtBbGxUZXh0TWF0Y2hlcwpAQCAtMzA5NSw3ICszMDkzLDcgQEAg
c3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogCiAtICh2b2lkKXNjcm9s
bERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgW1tbcmFuZ2Ugc3Rh
cnRDb250YWluZXJdIF9icmlkZ2VdIHNjcm9sbERPTVJhbmdlVG9WaXNpYmxlOnJhbmdlXTsKKyAg
ICBbW1tbcmFuZ2Ugc3RhcnRDb250YWluZXJdIG93bmVyRG9jdW1lbnRdIHdlYkZyYW1lXSBfc2Ny
b2xsRE9NUmFuZ2VUb1Zpc2libGU6cmFuZ2VdOwogfQogCiAtIChCT09MKWFsbG93c1VuZG8KQEAg
LTMyODQsNyArMzI4Miw3IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJh
bWUKICAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVyKCktPmNsZWFyKCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIC8vIERlcml2ZSB0aGUgZnJhbWUgdG8gdXNlIGZyb20gdGhlIHJh
bmdlIHBhc3NlZCBpbi4KLSAgICAgICAgLy8gVXNpbmcgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWlu
RnJhbWUgY291bGQgZ2l2ZSB1cyBhIGRpZmZlcmVudCBkb2N1bWVudCB0aGFuCisgICAgICAgIC8v
IFVzaW5nIF9zZWxlY3RlZE9yTWFpbkZyYW1lIGNvdWxkIGdpdmUgdXMgYSBkaWZmZXJlbnQgZG9j
dW1lbnQgdGhhbgogICAgICAgICAvLyB0aGUgb25lIHRoZSByYW5nZSB1c2VzLgogICAgICAgICBj
b3JlRnJhbWUgPSBjb3JlKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pLT5kb2N1bWVudCgpLT5mcmFt
ZSgpOwogICAgICAgICBpZiAoIWNvcmVGcmFtZSkKQEAgLTMzMTYsNyArMzMxNCw3IEBAIHN0YXRp
YyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUKICAgICAgICAgX3ByaXZhdGUtPmVk
aXRhYmxlID0gZmxhZzsKICAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzQ2hhbmdlZCAmJiBfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgICAgIF9wcml2YXRl
LT5wYWdlLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoIWZsYWcpOwotICAgICAgICBG
cmFtZSogbWFpbkZyYW1lID0gW1tbc2VsZiBtYWluRnJhbWVdIF9icmlkZ2VdIF9mcmFtZV07Cisg
ICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAgICAg
ICBpZiAobWFpbkZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoZmxhZykgewogICAgICAgICAgICAg
ICAgIG1haW5GcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CkBAIC0zMzM4
LDEyICszMzM2LDEyIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUK
IHsKICAgICAvLyBXZSBkb24ndCBrbm93IGVub3VnaCBhdCB0aGxzIGxldmVsIHRvIHBhc3MgaW4g
YSByZWxldmFudCBXZWJVbmRvQWN0aW9uOyB3ZSdkIGhhdmUgdG8KICAgICAvLyBjaGFuZ2UgdGhl
IEFQSSB0byBhbGxvdyB0aGlzLgotICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5G
cmFtZV0gc2V0VHlwaW5nU3R5bGU6c3R5bGUgd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblVuc3Bl
Y2lmaWVkXTsKKyAgICBbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIF9zZXRUeXBpbmdTdHls
ZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uVW5zcGVjaWZpZWRdOwogfQogCiAtIChE
T01DU1NTdHlsZURlY2xhcmF0aW9uICopdHlwaW5nU3R5bGUKIHsKLSAgICByZXR1cm4gW1tzZWxm
IF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lXSB0eXBpbmdTdHlsZV07CisgICAgcmV0dXJu
IFtbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gX3R5cGluZ1N0eWxlXTsKIH0KIAogLSAodm9p
ZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZwpAQCAtMzQ5MSwyMiArMzQ4
OSwyMiBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAKIC0gKHZv
aWQpcmVwbGFjZVNlbGVjdGlvbldpdGhOb2RlOihET01Ob2RlICopbm9kZQogewotICAgIFtbc2Vs
ZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gcmVwbGFjZVNlbGVjdGlvbldpdGhOb2Rl
Om5vZGUgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOTyBtYXRjaFN0eWxlOk5P
XTsKKyAgICBbW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0
aE5vZGU6bm9kZSBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PIG1hdGNoU3R5
bGU6Tk9dOwogfSAgICAKIAogLSAodm9pZClyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dAogewotICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0g
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0
UmVwbGFjZTpOT107CisgICAgW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpO
T107CiB9CiAKIC0gKHZvaWQpcmVwbGFjZVNlbGVjdGlvbldpdGhNYXJrdXBTdHJpbmc6KE5TU3Ry
aW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFp
bkZyYW1lXSByZXBsYWNlU2VsZWN0aW9uV2l0aE1hcmt1cFN0cmluZzptYXJrdXBTdHJpbmcgYmFz
ZVVSTFN0cmluZzpuaWwgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cisg
ICAgW1tzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhNYXJr
dXBTdHJpbmc6bWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6bmlsIHNlbGVjdFJlcGxhY2VtZW50
OllFUyBzbWFydFJlcGxhY2U6Tk9dOwogfQogCiAtICh2b2lkKXJlcGxhY2VTZWxlY3Rpb25XaXRo
QXJjaGl2ZTooV2ViQXJjaGl2ZSAqKWFyY2hpdmUKIHsKLSAgICBbW1tbc2VsZiBfYnJpZGdlRm9y
U2VsZWN0ZWRPck1haW5GcmFtZV0gd2ViRnJhbWVdIF9kYXRhU291cmNlXSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhBcmNoaXZlOmFyY2hpdmUgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTXTsKKyAgICBbW1tz
ZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBfZGF0YVNvdXJjZV0gX3JlcGxhY2VTZWxlY3Rpb25X
aXRoQXJjaGl2ZTphcmNoaXZlIHNlbGVjdFJlcGxhY2VtZW50OllFU107CiB9CiAKIC0gKHZvaWQp
ZGVsZXRlU2VsZWN0aW9uCkBAIC0zNTczLDEyICszNTcxLDEyIEBAIEZPUl9FQUNIX1JFU1BPTkRF
Ul9TRUxFQ1RPUihGT1JXQVJEKQogCiAtICh2b2lkKV9pbnNlcnROZXdsaW5lSW5RdW90ZWRDb250
ZW50OwogewotICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gaW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50XTsKKyAgICBbW3NlbGYgX3NlbGVjdGVk
T3JNYWluRnJhbWVdIF9pbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRdOwog
fQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aE5vZGU6KERPTU5vZGUgKilub2RlIG1h
dGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0
ZWRPck1haW5GcmFtZV0gcmVwbGFjZVNlbGVjdGlvbldpdGhOb2RlOm5vZGUgc2VsZWN0UmVwbGFj
ZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOTyBtYXRjaFN0eWxlOm1hdGNoU3R5bGVdOworICAgIFtb
c2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoTm9kZTpub2Rl
IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk8gbWF0Y2hTdHlsZTptYXRjaFN0
eWxlXTsKIH0KIAogQGVuZApAQCAtMzg1MywxMSArMzg1MSw2IEBAIHN0YXRpYyBXZWJGcmFtZVZp
ZXcgKmNvbnRhaW5pbmdGcmFtZVZpZXcKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChXZWJG
cmFtZUJyaWRnZSAqKV9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lCi17Ci0gICAgcmV0dXJu
IFtbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0gX2JyaWRnZV07Ci19Ci0KIC0gKEJPT0wpX2lz
TG9hZGluZwogewogICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSBbc2VsZiBtYWluRnJhbWVdOwo=
</data>
<flag name="review"
          id="8624"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>