<?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>63878</bug_id>
          
          <creation_ts>2011-07-03 14:58:08 -0700</creation_ts>
          <short_desc>Add support for constructor syntax for Events</short_desc>
          <delta_ts>2011-09-08 18:05:32 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-event-constructor</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67824</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annevk</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>feherzs</cc>
    
    <cc>kkristof</cc>
    
    <cc>loki</cc>
    
    <cc>ossy</cc>
    
    <cc>podivilov</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>431749</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-03 14:58:08 -0700</bug_when>
    <thetext>The latest DOM Core draft has new syntax for constructing and initializing DOM events in a  much more succinct manner (new Event(&apos;eventType&apos;, { bubbles: true, cancelable: false })).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431750</commentid>
    <comment_count>1</comment_count>
      <attachid>99582</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-03 14:59:08 -0700</bug_when>
    <thetext>Created attachment 99582
First pass a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431751</commentid>
    <comment_count>2</comment_count>
      <attachid>99583</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-03 15:02:42 -0700</bug_when>
    <thetext>Created attachment 99583
First pass at an implementation

I am throwing up my first pass at a implementation so I don&apos;t lose it. I currently has the following issues:
- It is not auto generating support for IDL dictionaries, which I think we should eventually.
- It only supports the Event base class (so new CustomEvent, new MouseEvent don&apos;t work).
- JSC only
(Probably other issues too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431784</commentid>
    <comment_count>3</comment_count>
      <attachid>99593</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-03 21:03:09 -0700</bug_when>
    <thetext>Created attachment 99593
Second pass (now with CustomEvent support)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431786</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-03 21:22:06 -0700</bug_when>
    <thetext>Now I have to decide how far I want to go without auto generating.  The pattern has become pretty clear to me; we need to generate the fillFoo() function from the &quot;dictionary&quot; Web IDL interfaces.  

It might make sense to find a better a way to share the default values for properties between the Event and EventInit classes (since they could get out of sync) or maybe EventInit should just store whether a particular property has been set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432397</commentid>
    <comment_count>5</comment_count>
      <attachid>99744</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-05 14:08:25 -0700</bug_when>
    <thetext>Created attachment 99744
Third pass

Add a few more Event subclasses and refactor to avoid adding so many more new files.  I am liking this general direction right now, may stick with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439261</commentid>
    <comment_count>6</comment_count>
      <attachid>101345</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-19 11:03:03 -0700</bug_when>
    <thetext>Created attachment 101345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439264</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-19 11:05:48 -0700</bug_when>
    <thetext>Attachment 101345 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/dom/WheelEvent.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/PageTransitionEvent.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/js/JSEventConstructors.cpp:200:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/js/JSEventConstructors.cpp:123:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/js/JSEventConstructors.cpp:128:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/js/JSEventConstructors.cpp:133:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/js/JSEventConstructors.cpp:138:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/dom/UIEventWithKeyState.h:31:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/OverflowEvent.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/WebKitAnimationEvent.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/CompositionEvent.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/MouseRelatedEvent.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/ErrorEvent.h:39:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/MouseEvent.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/MutationEvent.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/WebKitTransitionEvent.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 16 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439272</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-07-19 11:15:27 -0700</bug_when>
    <thetext>I decide to use macros to create a DSL for these constructors.  A V8 specific implementation would be easy to add for someone who knew how.

I am posting this to see how well it builds, it needs additional tests and probably breaking up a bit (and maybe some enable guards).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439274</commentid>
    <comment_count>9</comment_count>
      <attachid>101345</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-07-19 11:16:35 -0700</bug_when>
    <thetext>Comment on attachment 101345
Patch

Attachment 101345 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9153244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439289</commentid>
    <comment_count>10</comment_count>
      <attachid>101345</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-19 11:33:17 -0700</bug_when>
    <thetext>Comment on attachment 101345
Patch

Attachment 101345 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9150253</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439324</commentid>
    <comment_count>11</comment_count>
      <attachid>101345</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-19 11:57:42 -0700</bug_when>
    <thetext>Comment on attachment 101345
Patch

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

&gt; Source/WebCore/bindings/generic/EventConstructors.h:31
&gt; +#define INSTANTIAT_INIT_CONSTRUCTOR_FOR_EVENT(DICTIONARY_START, DICTIONARY_END, FILL_PARENT_PROPERTIES, FILL_PROPERTY) \

Typo throughout: INSTANTIAT instead of INSTANTIATE.

I also don’t completely understand what an “init constructor” is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439337</commentid>
    <comment_count>12</comment_count>
      <attachid>101345</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-19 12:07:40 -0700</bug_when>
    <thetext>Comment on attachment 101345
Patch

Attachment 101345 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9155243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458026</commentid>
    <comment_count>13</comment_count>
      <attachid>105451</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-28 16:30:27 -0700</bug_when>
    <thetext>Created attachment 105451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458027</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-28 16:31:59 -0700</bug_when>
    <thetext>Since there is now some movement on the V8 side to get this in, I am going to finish this off.  I am uploading a version with just support for Event, and the test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458028</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-28 16:33:04 -0700</bug_when>
    <thetext>Attachment 105451 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/bindings/js/JSEventConstructors.cpp:99:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458030</commentid>
    <comment_count>16</comment_count>
      <attachid>105451</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-08-28 16:41:19 -0700</bug_when>
    <thetext>Comment on attachment 105451
Patch

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

&gt; Source/WebCore/bindings/js/JSEventConstructors.cpp:55
&gt; +        // FIXME: Not all conversions require this exception check.

does this really warrant a fixme? it&apos;s a single indirect read that doesn&apos;t cause any harm.  If anything you should have another exception check before the convertValue call -- getValue can execute arbitrary js so can throw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458032</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-28 16:43:07 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 105451 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105451&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSEventConstructors.cpp:55
&gt; &gt; +        // FIXME: Not all conversions require this exception check.
&gt; 
&gt; does this really warrant a fixme? it&apos;s a single indirect read that doesn&apos;t cause any harm.  If anything you should have another exception check before the convertValue call -- getValue can execute arbitrary js so can throw

You are probably right.  I&apos;ll remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458033</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-08-28 16:58:31 -0700</bug_when>
    <thetext>Committed r93951: &lt;http://trac.webkit.org/changeset/93951&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458143</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-08-29 02:18:27 -0700</bug_when>
    <thetext>It made 3 tests fail on the Qt bot:
http://build.webkit.org/results/Qt%20Linux%20Release/r93951%20%2836880%29/results.html

fast/dom/constructed-objects-prototypes.html
fast/dom/dom-constructors.html
fast/events/constructors/event-constructors.html

I cc-ed Szeged gardeners of monday. Could you check it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458173</commentid>
    <comment_count>20</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-08-29 04:58:06 -0700</bug_when>
    <thetext>These tests started to fail on all bots:

Regressions: Unexpected text diff mismatch : (13)
  fast/dom/constructed-objects-prototypes.html = TEXT
  fast/dom/dom-constructors.html = TEXT
  fast/events/constructors/event-constructors.html = TEXT
  fast/loader/local-CSS-from-local.html = TEXT
  fast/loader/local-JavaScript-from-local.html = TEXT
  fast/loader/local-image-from-local.html = TEXT</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>99582</attachid>
            <date>2011-07-03 14:59:08 -0700</date>
            <delta_ts>2011-07-03 14:59:08 -0700</delta_ts>
            <desc>First pass a test case.</desc>
            <filename>testEventConstructor.html</filename>
            <type>text/html</type>
            <size>3138</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHByZSBpZD0iY29uc29sZSI+PC9wcmU+CjxzY3JpcHQ+CgpmdW5jdGlvbiBsb2cobXNnKQp7CiAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKfQoKZnVuY3Rpb24gdGVzdCh0b0V2YWwsIGJ1
YmJsZXNFeHBlY3RlZCwgY2FuY2VsYWJsZUV4cGVjdGVkKQp7CiAgICB2YXIgZXZlbnQgPSBldmFs
KHRvRXZhbCk7CiAgICBsb2codG9FdmFsKTsKCiAgICBpZiAoZXZlbnQuYnViYmxlcyAhPSBidWJi
bGVzRXhwZWN0ZWQpIHsKICAgICAgICBsb2coIkZBSUw6IGV2ZW50LmJ1YmJsZXMgaXMgIiArIGV2
ZW50LmJ1YmJsZXMgKyAiIGJ1dCAiICsgYnViYmxlc0V4cGVjdGVkICsgIiB3YXMgZXhwZWN0ZWQu
IikKICAgIH0gZWxzZXsKICAgICAgICBsb2coIlBBU1M6IGV2ZW50LmJ1YmJsZXMgaXMgIiArIGV2
ZW50LmJ1YmJsZXMgKyAiIGFzIGV4cGVjdGVkLiIpCiAgICB9CgogICAgaWYgKGV2ZW50LmNhbmNl
bGFibGUgIT0gY2FuY2VsYWJsZUV4cGVjdGVkKSB7CiAgICAgICAgbG9nKCJGQUlMOiBldmVudC5j
YW5jZWxhYmxlIGlzICIgKyBldmVudC5jYW5jZWxhYmxlICsgIiBidXQgIiArIGNhbmNlbGFibGVF
eHBlY3RlZCArICIgd2FzIGV4cGVjdGVkLiIpCiAgICB9IGVsc2V7CiAgICAgICAgbG9nKCJQQVNT
OiBldmVudC5jYW5jZWxhYmxlIGlzICIgKyBldmVudC5jYW5jZWxhYmxlICsgIiBhcyBleHBlY3Rl
ZC4iKQogICAgfQoKICAgIGxvZygiIik7Cn0KCmZ1bmN0aW9uIHRlc3RTaG91bGRUaHJvdyh0b0V2
YWwpCnsKICAgIGxvZyh0b0V2YWwpOwoKICAgIHRyeSB7CiAgICAgICAgZXZhbCh0b0V2YWwpOwog
ICAgICAgIGxvZygiRkFJTDogTm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYnV0IG9uZSB3YXMgZXhw
ZWN0ZWQuLiIpCiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgbG9nKCJQQVNTOiBFeGNlcHRpb24g
d2FzIHRocm93biBhcyBleHBlY3RlZCBbIiArIGUgKyAiXS4iKQogICAgfQoKICAgIGxvZygiIik7
Cn0KCi8vIE5vIGluaXRpYWxpemVyIHBhc3NlZC4KdGVzdCgibmV3IEV2ZW50KCdldmVudFR5cGUn
KSIsIGZhbHNlLCBmYWxzZSk7CgovLyBCb3RoIHRydWUuCnRlc3QoIm5ldyBFdmVudCgnZXZlbnRU
eXBlJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pIiwgdHJ1ZSwgdHJ1ZSk7
CgovLyBPbmUgdHJ1ZSwgb25lIGZhbHNlLgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsg
YnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogZmFsc2UgfSkiLCB0cnVlLCBmYWxzZSk7CgovLyBP
bmUgZXhwbGljaXRseSB1bmRlZmluZWQuCnRlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBi
dWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB1bmRlZmluZWQgfSkiLCB0cnVlLCBmYWxzZSk7Cgov
LyBPbmUgYSBudW1lcmljIHZhbHVlLgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnVi
YmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogMCB9KSIsIHRydWUsIGZhbHNlKTsKCi8vIE9uZSBtaXNz
aW5nLgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSB9KSIsIHRy
dWUsIGZhbHNlKTsKCi8vIEVtcHR5IGluaXRhbGl6ZXIuCnRlc3QoIm5ldyBFdmVudCgnZXZlbnRU
eXBlJywgeyB9KSIsIGZhbHNlLCBmYWxzZSk7CgovLyBudWxsIGluaXRpYWxpemVyLgp0ZXN0KCJu
ZXcgRXZlbnQoJ2V2ZW50VHlwZScsIG51bGwpIiwgZmFsc2UsIGZhbHNlKTsKCi8vIEV4cGxpY2l0
bHkgdW5kZWZpbmVkIGluaXRpYWxpemVyLgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHVu
ZGVmaW5lZCkiLCBmYWxzZSwgZmFsc2UpOwoKLy8gQSBudW1iZXIgYXMgdGhlIGluaXRpYWxpemVy
LgovLyBGSVhNRTogU2hvdWxkIHRoaXMgdGhyb3c/CnRlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBl
JywgMCkiLCBmYWxzZSwgZmFsc2UpOwoKLy8gVGhlIHdpbmRvdyBhcyB0aGUgaW5pdGlhbGl6ZXIu
CnRlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgd2luZG93KSIsIGZhbHNlLCBmYWxzZSk7Cgov
LyBUaGUgd2luZG93IGFzIHRoZSBpbml0aWFsaXplciwgYnV0IHdpdGggYnViYmxlcyBkZWZpbmVk
IHRvIHRydWUuCnZhciBidWJibGVzID0gdHJ1ZTsKdGVzdCgibmV3IEV2ZW50KCdldmVudFR5cGUn
LCB3aW5kb3cpIiwgdHJ1ZSwgZmFsc2UpOwoKLy8gT25lIHZhbHVlIGRlZmluZWQgb24gdGhlIHBy
b3RvdHlwZSBjaGFpbiBvZiBhIGhvc3Qgb2JqZWN0LgpEb2N1bWVudC5wcm90b3R5cGUuYnViYmxl
cyA9IHRydWU7CnRlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgZG9jdW1lbnQpIiwgdHJ1ZSwg
ZmFsc2UpOwoKLy8gT25lIHZhbHVlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBjaGFpbiBvZiBh
IHZhbmlsbGEgb2JqZWN0Lgp2YXIgQ29uc3RydWN0aWJsZSA9IGZ1bmN0aW9uKCkgeyB9CkNvbnN0
cnVjdGlibGUucHJvdG90eXBlLmJ1YmJsZXMgPSB0cnVlOwp2YXIgY29uc3RydWN0aWJsZSA9IG5l
dyBDb25zdHJ1Y3RpYmxlOwp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIGNvbnN0cnVjdGli
bGUpIiwgdHJ1ZSwgZmFsc2UpOwoKLy8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIG9uIHRoZSBpbml0
aWFsaXplcgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgY2Fu
Y2VsYWJsZTogdHJ1ZSwgb3RoZXI6IHRydWUgfSkiLCB0cnVlLCB0cnVlKTsKCi8vIE9uZSBnZXR0
ZXIgcmV0dXJuaW5nIHRydWUuCnRlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVz
OiB0cnVlLCBnZXQgY2FuY2VsYWJsZSgpIHsgcmV0dXJuIHRydWU7IH0gfSkiLCB0cnVlLCB0cnVl
KTsKCi8vIE9uZSBnZXR0ZXIgcmV0dXJuaW5nIGZhbHNlLgp0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50
VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgZ2V0IGNhbmNlbGFibGUoKSB7IHJldHVybiBmYWxzZTsg
fSB9KSIsIHRydWUsIGZhbHNlKTsKCi8vIE9uZSBnZXR0ZXIgdGhyb3dzIGFuIGV4ZWNlcHRpb24u
CnRlc3RTaG91bGRUaHJvdygibmV3IEV2ZW50KCdldmVudFR5cGUnLCB7IGJ1YmJsZXM6IHRydWUs
IGdldCBjYW5jZWxhYmxlKCkgeyB0aHJvdyAnQ3VzdG9tIEVycm9yJzsgfSB9KSIpCgo8L3Njcmlw
dD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99583</attachid>
            <date>2011-07-03 15:02:42 -0700</date>
            <delta_ts>2011-07-03 21:03:09 -0700</delta_ts>
            <desc>First pass at an implementation</desc>
            <filename>firstPass.diff</filename>
            <type>text/plain</type>
            <size>17131</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDkwMzQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTUxLDYgKzUxNTEsOCBAQAog
CQlCQ0QzRjk4MzEzMjZDOTM3MDAwOThBNjAgLyogVGV4dE9yaWVudGF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QzRjk4MjEzMjZDOTM3MDAw
OThBNjAgLyogVGV4dE9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNENDFBQkIwQzA2MERFODAwQzBFNDQ2IC8qIEpTSFRNTEZy
YW1lU2V0RWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Q0MUFCQTBDMDYwREU4MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRF
bGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNENTMzNjQwRUQ2ODQ4OTAwODg3NDY4IC8qIENh
Y2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0Q1MzM2MzBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaCAqLzsgfTsKKwkJQkNENjRFNzExM0MxMDNBQzAwNDEwMjJCIC8qIEV2
ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0Q2NEU2RjEzQzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmNwcCAqLzsgfTsKKwkJQkNE
NjRFNzIxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNENjRFNzAxM0MxMDNBQzAwNDEwMjJCIC8qIEV2
ZW50SW5pdC5oICovOyB9OwogCQlCQ0Q5QzI2MjBDMTdBQTY3MDA1QzkwQTIgLyogSlNET01XaW5k
b3dDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNEOUMyNUUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTRE9NV2luZG93Q3VzdG9tLmNwcCAqLzsg
fTsKIAkJQkNEOUMyNjMwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTmFtZWROb2RlTWFwQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDlDMjVG
MEMxN0FBNjcwMDVDOTBBMiAvKiBKU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgKi87IH07CiAJCUJD
RDlDMjY0MEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyNjAwQzE3QUE2NzAwNUM5MEEy
IC8qIEpTTm9kZUN1c3RvbS5jcHAgKi87IH07CkBAIC0xMTc3NSw2ICsxMTc3Nyw4IEBACiAJCUJD
RDNGOTgyMTMyNkM5MzcwMDA5OEE2MCAvKiBUZXh0T3JpZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dE9yaWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRDQxQUJBMEMwNjBERTgwMEMwRTQ0NiAvKiBKU0hUTUxGcmFtZVNldEVs
ZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDRDUzMzYzMEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Q2NEU2RjEzQzEwM0FD
MDA0MTAyMkIgLyogRXZlbnRJbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV2ZW50SW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRDY0
RTcwMTNDMTAzQUMwMDQxMDIyQiAvKiBFdmVudEluaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
RDlDMjVFMEMxN0FBNjcwMDVDOTBBMiAvKiBKU0RPTVdpbmRvd0N1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01XaW5kb3dDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNO
YW1lZE5vZGVNYXBDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkNEOUMyNjAwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9kZUN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOb2RlQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NjE0LDYgKzE5NjE4LDggQEAKIAkJCQk4NTAzMUIyQjBB
NDRFRkM3MDBGOTkyRTAgLyogRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjJDMEE0NEVGQzcwMEY5
OTJFMCAvKiBFdmVudC5oICovLAogCQkJCTE0RTgzNkQyMDlGODUxMjAwMEI4NUFFNCAvKiBFdmVu
dC5pZGwgKi8sCisJCQkJQkNENjRFNkYxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5jcHAg
Ki8sCisJCQkJQkNENjRFNzAxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5oICovLAogCQkJ
CTQxMzhEMzM0MTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuY3BwICovLAogCQkJCTQx
MzhEMzMzMTI0NDA1NDgwMDMyM0QzMyAvKiBFdmVudENvbnRleHQuaCAqLywKIAkJCQk0MThBMDZD
RjEzM0MwNEQ1MDBDRDM3OUMgLyogRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKQEAgLTIzMDg4LDYg
KzIzMDk0LDcgQEAKIAkJCQkwODYzOTUxNjEzQjVGRTU3MDBCQjM0NEQgLyogU1ZHQW5pbWF0ZWRQ
YXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzFBMkY5QzEzQjZGMkIwMDA3NzkxRTQgLyogU1ZH
QW5pbWF0ZWROdW1iZXJPcHRpb25hbE51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVBQkI3
ODcxM0I5MDRCQzAwRjE5N0UzIC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQkNENjRFNzIxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNTg1NSw2ICsyNTg2Miw3IEBACiAJCQkJNDMxQTMwMjExM0I4OURDQzAw
Nzc5MUU0IC8qIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzFBMzA4ODEzQjhGOTc4MDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQzRjZGRDk2MTNCQ0QwQjEwMDIyNDA1MiAvKiBTVkdBbmlt
YXRlZEludGVnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNENjRFNzExM0MxMDNBQzAwNDEw
MjJCIC8qIEV2ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA5MDM0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRGV2aWNlTW90aW9uRXZlbnQuaCIKICNpbmNs
dWRlICJEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNs
dWRlICJFdmVudEluaXQuaCIKICNpbmNsdWRlICJKU0JlZm9yZUxvYWRFdmVudC5oIgogI2luY2x1
ZGUgIkpTQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiSlNDdXN0b21FdmVudC5oIgpAQCAtNzYsNiAr
NzcsNyBAQAogI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCIKKyNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKQEAgLTIyMyw0ICsyMjUsNjIgQEAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIHJldHVybiB3cmFwcGVyOwogfQogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRXZlbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
SlNFdmVudChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNFdmVudENvbnN0cnVjdG9yKiBqc0Nv
bnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNFdmVudENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOworCisgICAgLy8gQ3VyaW91c2x5LCB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIERvY3Vt
ZW50LgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGpzQ29uc3RydWN0b3ItPmRvY3VtZW50KCk7
CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiRXZlbnQgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBk
b2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKKworCisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHVz
dHJpbmdUb1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworCisgICAgUmVmUHRyPEV2ZW50PiBldmVudDsKKworICAgIEpTVmFsdWUg
aW5pdGlhbGl6ZXJWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIGlmICghaW5pdGlhbGl6
ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZmls
bCBpbiB0aGUgRXZlbnRJbml0LgorICAgICAgICBFdmVudEluaXQgZXZlbnRJbml0OworICAgICAg
ICBldmVudEluaXQuYnViYmxlcyA9IGZhbHNlOworICAgICAgICBldmVudEluaXQuY2FuY2VsYWJs
ZSA9IGZhbHNlOworCisgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwg
YWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KKyAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2Jq
ZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAvLyBBY2Nl
c3MgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIEpTVmFsdWUgYnViYmxlc1ZhbHVlID0gaW5pdGlh
bGl6ZXJPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJidWJibGVzIikpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBJdCBpcyBub3Qg
Y2xlYXIgaWYgYW4gdW5kZWZpbmVkIGNoZWNrIGlzIHJpZ2h0IGhlcmUuIFdlIG1heSBvbmx5IHdh
bnQgdG8gY2hlY2sKKyAgICAgICAgLy8gZm9yIGV4aXN0ZW5jZSBhbmQgZm9yIHVuZGVmaW5lZCwg
ZG8gdGhlIGRlZmF1bHQgdG9Cb29sZWFuIGNvbnZlcnNpb24uCisgICAgICAgIGlmICghYnViYmxl
c1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIGV2ZW50SW5pdC5idWJibGVzID0g
YnViYmxlc1ZhbHVlLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSBjYW5jZWxhYmxlVmFsdWUg
PSBpbml0aWFsaXplck9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNhbmNlbGFi
bGUiKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAgICAgLy8gRklYTUU6
IEl0IGlzIG5vdCBjbGVhciBpZiBhbiB1bmRlZmluZWQgY2hlY2sgaXMgcmlnaHQgaGVyZS4gV2Ug
bWF5IG9ubHkgd2FudCB0byBjaGVjaworICAgICAgICAvLyBmb3IgZXhpc3RlbmNlIGFuZCBmb3Ig
dW5kZWZpbmVkLCBkbyB0aGUgZGVmYXVsdCB0b0Jvb2xlYW4gY29udmVyc2lvbi4KKyAgICAgICAg
aWYgKCFjYW5jZWxhYmxlVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAgICAgZXZlbnRJ
bml0LmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlVmFsdWUudG9Cb29sZWFuKGV4ZWMpOworICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KKworICAgICAgICBldmVu
dCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBldmVudEluaXQpOworICAgIH0gZWxzZQorICAg
ICAgICBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFsc2UpOworCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBldmVudC5nZXQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gOTAzNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAwMCw5ICszMDAwLDEy
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KIAogICAgIG15ICRjb25zdHJ1
Y3RvckNsYXNzTmFtZSA9ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAgICAgbXkgJGNhbkNv
bnN0cnVjdCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbkJlQ29uc3RydWN0
ZWQifTsKKyAgICBteSAkY29uc3RydWN0b3JJc0RvY3VtZW50T25seSA9ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkRvY3VtZW50T25seUNvbnN0cnVjdG9yIn07CiAgICAgbXkgJGNh
bGxXaXRoID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKIAot
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNsYXNzICR7Y29uc3RydWN0b3JDbGFzc05hbWV9IDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHtcbiIpOworICAgIG15ICRwYXJlbnRDb25zdHJ1
Y3RvckNsYXNzTmFtZSA9ICgkY29uc3RydWN0b3JJc0RvY3VtZW50T25seSA/ICJET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudCIgOiAiRE9NQ29uc3RydWN0b3JPYmplY3QiKTsKKworICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgImNsYXNzICR7Y29uc3RydWN0b3JDbGFzc05hbWV9IDogcHVibGljICR7
cGFyZW50Q29uc3RydWN0b3JDbGFzc05hbWV9IHtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgInB1YmxpYzpcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QqKTtcblxuIik7CiAKQEAgLTMwMTYsNyArMzAxOSw3IEBAIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7
CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwcm90ZWN0ZWQ6XG4iKTsKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFncztcbiIpOworICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hh
c0luc3RhbmNlIHwgJHtwYXJlbnRDb25zdHJ1Y3RvckNsYXNzTmFtZX06OlN0cnVjdHVyZUZsYWdz
O1xuIik7CiAKICAgICBpZiAoJGNhbkNvbnN0cnVjdCkgewogICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3Qke2NsYXNzTmFtZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOwpAQCAtMzAzOCwxMyArMzA0
MSwxNiBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkY29uc3Ry
dWN0b3JDbGFzc05hbWUgPSAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRjYW5D
b25zdHJ1Y3QgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVj
dGVkIn07CiAgICAgbXkgJGN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uID0gJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24ifTsKKyAgICBteSAkY29u
c3RydWN0b3JJc0RvY3VtZW50T25seSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkRvY3VtZW50T25seUNvbnN0cnVjdG9yIn07CiAgICAgbXkgJGNhbGxXaXRoID0gJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKICAgICBteSAkbnVtYmVyT2Zjb25z
dHJ1Y3RQYXJhbWV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3Ry
dWN0b3JQYXJhbWV0ZXJzIn07CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25zdCBDbGFz
c0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2libGVDbGFz
c05hbWV9Q29uc3RydWN0b3JcIiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICYke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfVRhYmxlLCAwIH07XG5cbiIpOworICAgIG15ICRwYXJlbnRDb25z
dHJ1Y3RvckNsYXNzTmFtZSA9ICgkY29uc3RydWN0b3JJc0RvY3VtZW50T25seSA/ICJET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudCIgOiAiRE9NQ29uc3RydWN0b3JPYmplY3QiKTsKKworICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUNsYXNzTmFtZX1Db25zdHJ1Y3RvclwiLCAmJHtwYXJl
bnRDb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5mbywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9
VGFibGUsIDAgfTtcblxuIik7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIp
OwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IDogJHtwYXJlbnRDb25zdHJ1Y3RvckNsYXNzTmFtZX0oc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIpOwogICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZp
c2lvbiA5MDM0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDkgKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJF
dmVudC5oIgorCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiRXZlbnRJ
bml0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLQogI2luY2x1ZGUgIlVzZXJHZXN0dXJl
SW5kaWNhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC02MCw2ICs2MSwyMSBAQCBFdmVudDo6RXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5CiB7CiB9CiAKK0V2ZW50OjpFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICA6
IG1fdHlwZShldmVudFR5cGUpCisgICAgLCBtX2NhbkJ1YmJsZShpbml0aWFsaXplci5idWJibGVz
KQorICAgICwgbV9jYW5jZWxhYmxlKGluaXRpYWxpemVyLmNhbmNlbGFibGUpCisgICAgLCBtX3By
b3BhZ2F0aW9uU3RvcHBlZChmYWxzZSkKKyAgICAsIG1faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9w
cGVkKGZhbHNlKQorICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNlKQorICAgICwgbV9kZWZh
dWx0SGFuZGxlZChmYWxzZSkKKyAgICAsIG1fY2FuY2VsQnViYmxlKGZhbHNlKQorICAgICwgbV9l
dmVudFBoYXNlKDApCisgICAgLCBtX2N1cnJlbnRUYXJnZXQoMCkKKyAgICAsIG1fY3JlYXRlVGlt
ZShjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKQoreworfQorCiBF
dmVudDo6fkV2ZW50KCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiA5MDM0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50VGFyZ2V0OwogICAg
IGNsYXNzIEV2ZW50RGlzcGF0Y2hlcjsKKyAgICBzdHJ1Y3QgRXZlbnRJbml0OwogCiAgICAgY2xh
c3MgRXZlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudD4gewogICAgIHB1YmxpYzoKQEAgLTY5
LDYgKzcwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUpKTsK
ICAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGUoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2ZW50KHR5cGUsIGluaXRp
YWxpemVyKSk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5FdmVudCgpOwogCiAgICAg
ICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJi
bGUsIGJvb2wgY2FuY2VsYWJsZSk7CkBAIC0xNzUsNiArMTgyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgRXZlbnQoKTsKICAgICAgICAgRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsK
KyAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBFdmVudEluaXQm
IGluaXRpYWxpemVyKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsK
ICAgICAgICAgYm9vbCBkaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gOTAzNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNh
bS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDkgQEAgbW9kdWxl
IGV2ZW50cyB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFs
QXJndW1lbnRzLAogICAgICAgICBDdXN0b21Ub0pTLAorICAgICAgICBDYW5CZUNvbnN0cnVjdGVk
LAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbiwKKyAgICAgICAgRG9jdW1lbnRPbmx5
Q29uc3RydWN0b3IsCiAgICAgICAgIE5vU3RhdGljVGFibGVzLAogICAgICAgICBQb2x5bW9ycGhp
YwogICAgIF0gRXZlbnQgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFdmVudEluaXQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50SW5pdF9oCisjZGVmaW5lIEV2ZW50SW5p
dF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV2ZW50SW5pdCB7CisgICAgYm9v
bCBidWJibGVzOworICAgIGJvb2wgY2FuY2VsYWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEV2ZW50SW5pdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99593</attachid>
            <date>2011-07-03 21:03:09 -0700</date>
            <delta_ts>2011-07-05 14:08:25 -0700</delta_ts>
            <desc>Second pass (now with CustomEvent support)</desc>
            <filename>take2.diff</filename>
            <type>text/plain</type>
            <size>42622</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDkwMzQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDI1LDYgKzUwMjUsMTMgQEAK
IAkJQkM3NzJDNUUwQzRFQjM0NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM1RDBDNEVC
MzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSAqLzsgfTsKIAkJQkM3NzJFMTMx
MzMxNjIwQzAwMUVDOUNFIC8qIENTU0xpbmVCb3hDb250YWluVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyRTEyMTMzMTYyMEMwMDFFQzlD
RSAvKiBDU1NMaW5lQm94Q29udGFpblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM3NzJFMTYxMzMxNjJDMjAwMUVDOUNFIC8qIENTU0xp
bmVCb3hDb250YWluVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM3NzJFMTUxMzMxNjJDMjAwMUVDOUNFIC8qIENTU0xpbmVCb3hDb250YWlu
VmFsdWUuY3BwICovOyB9OworCQlCQzdFMUU1MDEzQzE1MDk2MDBEMjc1NjAgLyogSlNFdmVudElu
aXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3
RTFFNEUxM0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmNwcCAqLzsgfTsKKwkJQkM3RTFF
NTExM0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdFMUU0RjEzQzE1MDk2MDBEMjc1NjAgLyogSlNF
dmVudEluaXQuaCAqLzsgfTsKKwkJQkM3RTFFNUIxM0MxNUMyMzAwRDI3NTYwIC8qIEN1c3RvbUV2
ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzdFMUU1OTEzQzE1QzIzMDBEMjc1NjAgLyogQ3VzdG9tRXZlbnRJbml0LmNwcCAqLzsgfTsK
KwkJQkM3RTFFNUMxM0MxNUMyMzAwRDI3NTYwIC8qIEN1c3RvbUV2ZW50SW5pdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RTFFNUExM0MxNUMyMzAw
RDI3NTYwIC8qIEN1c3RvbUV2ZW50SW5pdC5oICovOyB9OworCQlCQzdFMUU1RjEzQzE1RTY3MDBE
Mjc1NjAgLyogSlNDdXN0b21FdmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdFMUU1RDEzQzE1RTY3MDBEMjc1NjAgLyogSlNDdXN0
b21FdmVudEN1c3RvbS5jcHAgKi87IH07CisJCUJDN0UxRTYzMTNDMTVGMTIwMEQyNzU2MCAvKiBK
U0N1c3RvbUV2ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdFMUU2MTEzQzE1RjExMDBEMjc1NjAgLyogSlNDdXN0b21FdmVudEluaXQu
Y3BwICovOyB9OworCQlCQzdFMUU2NDEzQzE1RjEyMDBEMjc1NjAgLyogSlNDdXN0b21FdmVudElu
aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0Ux
RTYyMTNDMTVGMTEwMEQyNzU2MCAvKiBKU0N1c3RvbUV2ZW50SW5pdC5oICovOyB9OwogCQlCQzdG
NDRBODBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RjQ0QTcwQjlFMzI0RTAwQTlEMDgxIC8q
IEltYWdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjFF
MEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICovOyB9OwogCQlCQzdGQTYy
MTBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyog
RHluYW1pY05vZGVMaXN0LmggKi87IH07CkBAIC01MTUxLDYgKzUxNTgsOCBAQAogCQlCQ0QzRjk4
MzEzMjZDOTM3MDAwOThBNjAgLyogVGV4dE9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QzRjk4MjEzMjZDOTM3MDAwOThBNjAgLyog
VGV4dE9yaWVudGF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkNENDFBQkIwQzA2MERFODAwQzBFNDQ2IC8qIEpTSFRNTEZyYW1lU2V0RWxl
bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0Q0MUFCQTBDMDYwREU4MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcCAqLzsgfTsKIAkJQkNENTMzNjQwRUQ2ODQ4OTAwODg3NDY4IC8qIENhY2hlZFNjcmlw
dFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0Q1MzM2MzBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNlUHJv
dmlkZXIuaCAqLzsgfTsKKwkJQkNENjRFNzExM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Q2NEU2
RjEzQzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmNwcCAqLzsgfTsKKwkJQkNENjRFNzIxM0Mx
MDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNENjRFNzAxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5o
ICovOyB9OwogCQlCQ0Q5QzI2MjBDMTdBQTY3MDA1QzkwQTIgLyogSlNET01XaW5kb3dDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMy
NUUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTRE9NV2luZG93Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkNE
OUMyNjMwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDlDMjVGMEMxN0FBNjcw
MDVDOTBBMiAvKiBKU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgKi87IH07CiAJCUJDRDlDMjY0MEMx
N0FBNjcwMDVDOTBBMiAvKiBKU05vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyNjAwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9k
ZUN1c3RvbS5jcHAgKi87IH07CkBAIC0xMTY0MSw2ICsxMTY1MCwxMyBAQAogCQlCQzc3MkUxMjEz
MzE2MjBDMDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDU1NMaW5lQm94Q29udGFpblZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDNzcyRTE1MTMzMTYyQzIwMDFFQzlDRSAvKiBDU1NMaW5lQm94
Q29udGFpblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U0xpbmVCb3hDb250YWluVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzdCMkFGODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJQkM3RTFFNEUx
M0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRJbml0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM3RTFFNEYxM0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDN0UxRTU5MTNDMTVDMjMwMEQyNzU2MCAvKiBDdXN0b21FdmVudEluaXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tRXZlbnRJbml0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RTFFNUExM0MxNUMyMzAwRDI3
NTYwIC8qIEN1c3RvbUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDdXN0b21FdmVudEluaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RTFF
NUQxM0MxNUU2NzAwRDI3NTYwIC8qIEpTQ3VzdG9tRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21FdmVudEN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0UxRTYxMTNDMTVGMTEwMEQyNzU2MCAvKiBKU0N1
c3RvbUV2ZW50SW5pdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0N1c3RvbUV2ZW50SW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0Ux
RTYyMTNDMTVGMTEwMEQyNzU2MCAvKiBKU0N1c3RvbUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUV2ZW50SW5pdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VPYnNlcnZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzdGQTYxRTBEMUYwQ0JEMDBEQjIyQTkgLyogRHlu
YW1pY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER5
bmFtaWNOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDN0ZBNjFG
MEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRHluYW1pY05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTc3NSw2ICsxMTc5MSw4IEBACiAJCUJDRDNGOTgyMTMyNkM5MzcwMDA5OEE2MCAv
KiBUZXh0T3JpZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dE9yaWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDQxQUJBMEMw
NjBERTgwMEMwRTQ0NiAvKiBKU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDUzMzYzMEVENjg0ODkwMDg4
NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0Q2NEU2RjEzQzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50SW5pdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRDY0RTcwMTNDMTAzQUMwMDQxMDIyQiAvKiBF
dmVudEluaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRJbml0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDlDMjVFMEMxN0FBNjcwMDVDOTBBMiAv
KiBKU0RPTVdpbmRvd0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNET01XaW5kb3dDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmFtZWROb2RlTWFwQ3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEOUMyNjAwQzE3QUE2NzAwNUM5
MEEyIC8qIEpTTm9kZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNOb2RlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4
MzAwLDYgKzE4MzE4LDEwIEBACiAJCQkJNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9N
V3JhcHBlci5oICovLAogCQkJCUYzRDQ2MTQ2MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFu
ZGxlci5jcHAgKi8sCiAJCQkJRjNENDYxNDcxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JIYW5k
bGVyLmggKi8sCisJCQkJQkM3RTFFNEUxM0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmNw
cCAqLywKKwkJCQlCQzdFMUU0RjEzQzE1MDk2MDBEMjc1NjAgLyogSlNFdmVudEluaXQuaCAqLywK
KwkJCQlCQzdFMUU2MTEzQzE1RjExMDBEMjc1NjAgLyogSlNDdXN0b21FdmVudEluaXQuY3BwICov
LAorCQkJCUJDN0UxRTYyMTNDMTVGMTEwMEQyNzU2MCAvKiBKU0N1c3RvbUV2ZW50SW5pdC5oICov
LAogCQkJCUJDNjA5MDFFMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCAqLywK
IAkJCQlCQzYwOTAxRDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5oICovLAogCQkJ
CTMzMTRBQ0U5MTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2UuY3BwICovLApAQCAt
MTg1MzQsNiArMTg1NTYsNyBAQAogCQkJCUJDREZENDkxMEUzMDU2QkQwMDlEMTBBRCAvKiBKU1hN
TEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcCAqLywKIAkJCQlBMUM3RkFBMTEzM0E1RDM1MDBE
NjczMkQgLyogSlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFRkUxRTQwRENBNUYz
MzAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAgKi8sCisJCQkJQkM3RTFFNUQx
M0MxNUU2NzAwRDI3NTYwIC8qIEpTQ3VzdG9tRXZlbnRDdXN0b20uY3BwICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBDdXN0b207CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTk1NDAsNiAr
MTk1NjMsOCBAQAogCQkJCTYyQ0QzMjU2MTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0b21FdmVudC5j
cHAgKi8sCiAJCQkJNjJDRDMyNTcxMTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50LmggKi8s
CiAJCQkJNjJDRDMyNTgxMTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50LmlkbCAqLywKKwkJ
CQlCQzdFMUU1OTEzQzE1QzIzMDBEMjc1NjAgLyogQ3VzdG9tRXZlbnRJbml0LmNwcCAqLywKKwkJ
CQlCQzdFMUU1QTEzQzE1QzIzMDBEMjc1NjAgLyogQ3VzdG9tRXZlbnRJbml0LmggKi8sCiAJCQkJ
QkM2NDY0MUIxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3BwICovLAog
CQkJCUJDNjQ2NDFBMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggKi8s
CiAJCQkJODE1RTYxNjYxMzI1ODdBQTAwQjYyMkIwIC8qIERhdGFUcmFuc2Zlckl0ZW0uY3BwICov
LApAQCAtMTk2MTQsNiArMTk2MzksOCBAQAogCQkJCTg1MDMxQjJCMEE0NEVGQzcwMEY5OTJFMCAv
KiBFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCMkMwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50Lmgg
Ki8sCiAJCQkJMTRFODM2RDIwOUY4NTEyMDAwQjg1QUU0IC8qIEV2ZW50LmlkbCAqLywKKwkJCQlC
Q0Q2NEU2RjEzQzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmNwcCAqLywKKwkJCQlCQ0Q2NEU3
MDEzQzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmggKi8sCiAJCQkJNDEzOEQzMzQxMjQ0MDU0
ODAwMzIzRDMzIC8qIEV2ZW50Q29udGV4dC5jcHAgKi8sCiAJCQkJNDEzOEQzMzMxMjQ0MDU0ODAw
MzIzRDMzIC8qIEV2ZW50Q29udGV4dC5oICovLAogCQkJCTQxOEEwNkNGMTMzQzA0RDUwMENEMzc5
QyAvKiBFdmVudERpc3BhdGNoZXIuY3BwICovLApAQCAtMjMwODgsNiArMjMxMTUsMTAgQEAKIAkJ
CQkwODYzOTUxNjEzQjVGRTU3MDBCQjM0NEQgLyogU1ZHQW5pbWF0ZWRQYXRoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MzFBMkY5QzEzQjZGMkIwMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWROdW1iZXJP
cHRpb25hbE51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVBQkI3ODcxM0I5MDRCQzAwRjE5
N0UzIC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNE
NjRFNzIxM0MxMDNBQzAwNDEwMjJCIC8qIEV2ZW50SW5pdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkM3RTFFNTExM0MxNTA5NjAwRDI3NTYwIC8qIEpTRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCQzdFMUU1QzEzQzE1QzIzMDBEMjc1NjAgLyogQ3VzdG9tRXZlbnRJbml0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCQzdFMUU2NDEzQzE1RjEyMDBEMjc1NjAgLyogSlNDdXN0b21FdmVudElu
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU4NTUsNiArMjU4ODYsMTEgQEAKIAkJCQk0MzFBMzAy
MTEzQjg5RENDMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQzMUEzMDg4MTNCOEY5NzgwMDc3OTFFNCAvKiBTVkdBbmltYXRl
ZEJvb2xlYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDNGNkZEOTYxM0JDRDBCMTAwMjI0MDUy
IC8qIFNWR0FuaW1hdGVkSW50ZWdlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQ0Q2NEU3MTEz
QzEwM0FDMDA0MTAyMkIgLyogRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0Ux
RTUwMTNDMTUwOTYwMEQyNzU2MCAvKiBKU0V2ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCQzdFMUU1QjEzQzE1QzIzMDBEMjc1NjAgLyogQ3VzdG9tRXZlbnRJbml0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUJDN0UxRTVGMTNDMTVFNjcwMEQyNzU2MCAvKiBKU0N1c3RvbUV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0UxRTYzMTNDMTVGMTIwMEQyNzU2MCAvKiBK
U0N1c3RvbUV2ZW50SW5pdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNDdXN0b21FdmVudC5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRXZl
bnQuaCIKKyNpbmNsdWRlICJDdXN0b21FdmVudEluaXQuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUV2
ZW50SW5pdC5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBz
aW5jZSB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGluaXRpYWxpemUKKy8vIGEgU2NyaXB0
VmFsdWUgdG8gYmUganNOdWxsKCkuCitKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFpbChFeGVj
U3RhdGUqKSBjb25zdAoreworICAgIFNjcmlwdFZhbHVlIGRldGFpbCA9IHN0YXRpY19jYXN0PEN1
c3RvbUV2ZW50Kj4oaW1wbCgpKS0+ZGV0YWlsKCk7CisgICAgaWYgKGRldGFpbC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4gZGV0YWlsLmpzVmFsdWUo
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0N1c3RvbUV2ZW50Q29uc3Ry
dWN0b3I6OmNvbnN0cnVjdEpTQ3VzdG9tRXZlbnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
Q3VzdG9tRXZlbnRDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ3Vz
dG9tRXZlbnRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGpzQ29uc3RydWN0b3ItPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVuY2VFcnJvcihl
eGVjLCAiRXZlbnQgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJs
ZSIpKTsKKworICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5nVG9BdG9taWNTdHJp
bmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKworICAgIEN1c3RvbUV2ZW50SW5pdCBldmVudEluaXQ7CisKKyAgICBKU1ZhbHVlIGluaXRp
YWxpemVyVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBpZiAoIWluaXRpYWxpemVyVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVz
dCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCisgICAgICAgIEpTT2JqZWN0KiBp
bml0aWFsaXplck9iamVjdCA9IGluaXRpYWxpemVyVmFsdWUudG9PYmplY3QoZXhlYyk7CisKKyAg
ICAgICAgLy8gQXR0ZW1wdCB0byBmaWxsIGluIHRoZSBFdmVudEluaXQuCisgICAgICAgIGlmICgh
ZmlsbEN1c3RvbUV2ZW50SW5pdChldmVudEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQorCisgICAgUmVmUHRyPEN1c3RvbUV2ZW50PiBldmVudCA9IEN1c3RvbUV2ZW50OjpjcmVhdGUo
ZXZlbnRUeXBlLCBldmVudEluaXQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhl
eGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZXZlbnQuZ2V0KCkpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21FdmVudEluaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tRXZlbnRJbml0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRJbml0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0N1c3RvbUV2ZW50SW5pdC5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRXZlbnRJbml0LmgiCisjaW5j
bHVkZSAiSlNFdmVudEluaXQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBmaWxsQ3Vz
dG9tRXZlbnRJbml0KEN1c3RvbUV2ZW50SW5pdCYgZXZlbnRJbml0LCBFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIGZpbGwg
aW4gdGhlIEV2ZW50SW5pdCBwYXJ0IGZpcnN0LgorICAgIGlmICghZmlsbEV2ZW50SW5pdChldmVu
dEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSWRlbnRpZmllciBkZXRhaWxJZGVudGlmaWVyKGV4ZWMsICJkZXRhaWwiKTsKKyAgICBQ
cm9wZXJ0eVNsb3QgZGV0YWlsU2xvdChpbml0aWFsaXplck9iamVjdCk7CisgICAgaWYgKGluaXRp
YWxpemVyT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgZGV0YWlsSWRlbnRpZmllciwgZGV0
YWlsU2xvdCkpIHsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEpTVmFsdWUgZGV0YWlsVmFsdWUgPSBkZXRhaWxT
bG90LmdldFZhbHVlKGV4ZWMsIGRldGFpbElkZW50aWZpZXIpOworICAgICAgICBldmVudEluaXQu
ZGV0YWlsID0gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXRhaWxWYWx1ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBleGNlcHRpb24gY2hlY2sgbWF5IG5vdCBi
ZSByZXF1aXJlZCwgc2luY2UgSSBkb24ndCB0aGluayAKKyAgICAgICAgLy8gdGhlIHNsb3QuZ2V0
VmFsdWUgb3IgU2NyaXB0VmFsdWUgY29uc3RydWN0aW9uIGNhbiB0aHJvdy4gCisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEluaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50SW5pdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEluaXQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlND
dXN0b21FdmVudEluaXRfaAorI2RlZmluZSBKU0N1c3RvbUV2ZW50SW5pdF9oCisKK25hbWVzcGFj
ZSBKU0MgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU09iamVjdDsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ3VzdG9tRXZlbnRJbml0OworCitib29sIGZp
bGxDdXN0b21FdmVudEluaXQoQ3VzdG9tRXZlbnRJbml0JiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEpTQ3VzdG9tRXZlbnRJbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA5MDM0NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRGV2aWNlTW90aW9uRXZlbnQuaCIKICNpbmNsdWRl
ICJEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEluaXQuaCIKICNpbmNsdWRlICJKU0JlZm9yZUxvYWRFdmVudC5oIgogI2luY2x1ZGUg
IkpTQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiSlNDdXN0b21FdmVudC5oIgpAQCAtNDIsNiArNDMs
NyBAQAogI2luY2x1ZGUgIkpTRGV2aWNlTW90aW9uRXZlbnQuaCIKICNpbmNsdWRlICJKU0Rldmlj
ZU9yaWVudGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJKU0Vycm9yRXZlbnQuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50SW5pdC5oIgogI2luY2x1ZGUgIkpTSGFzaENoYW5nZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiSlNLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlRXZlbnQuaCIKQEAgLTc2
LDYgKzc4LDcgQEAKICNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRl
ICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Lmgi
CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCkBAIC0yMjMsNCArMjI2LDMzIEBAIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICByZXR1cm4gd3JhcHBlcjsKIH0K
IAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0V2ZW50Q29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTRXZlbnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRXZlbnRDb25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTRXZlbnRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNh
bGxlZSgpKTsKKworICAgIC8vIEN1cmlvdXNseSwgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIHRoZSBE
b2N1bWVudC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBqc0NvbnN0cnVjdG9yLT5kb2N1bWVu
dCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkV2ZW50IGNvbnN0cnVjdG9yIGFzc29jaWF0
ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisKKyAgICBBdG9taWNTdHJpbmcgZXZlbnRU
eXBlID0gdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBFdmVudEluaXQgZXZlbnRJbml0Owor
CisgICAgSlNWYWx1ZSBpbml0aWFsaXplclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAg
aWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgLy8g
R2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0Lgor
ICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRv
T2JqZWN0KGV4ZWMpOworCisgICAgICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbiB0aGUgRXZlbnRJ
bml0LgorICAgICAgICBpZiAoIWZpbGxFdmVudEluaXQoZXZlbnRJbml0LCBleGVjLCBpbml0aWFs
aXplck9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIH0KKworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRl
KGV2ZW50VHlwZSwgZXZlbnRJbml0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMo
ZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGV2ZW50LmdldCgpKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRJbml0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50SW5pdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50SW5pdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNFdmVudEluaXQuaCIKKwor
I2luY2x1ZGUgIkV2ZW50SW5pdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGZpbGxF
dmVudEluaXQoRXZlbnRJbml0JiBldmVudEluaXQsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGluaXRpYWxpemVyT2JqZWN0KQoreworICAgIElkZW50aWZpZXIgYnViYmxlc0lkZW50aWZpZXIo
ZXhlYywgImJ1YmJsZXMiKTsKKyAgICBQcm9wZXJ0eVNsb3QgYnViYmxlc1Nsb3QoaW5pdGlhbGl6
ZXJPYmplY3QpOworICAgIGlmIChpbml0aWFsaXplck9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGJ1YmJsZXNJZGVudGlmaWVyLCBidWJibGVzU2xvdCkpIHsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEpT
VmFsdWUgYnViYmxlc1ZhbHVlID0gYnViYmxlc1Nsb3QuZ2V0VmFsdWUoZXhlYywgYnViYmxlc0lk
ZW50aWZpZXIpOworICAgICAgICBldmVudEluaXQuYnViYmxlcyA9IGJ1YmJsZXNWYWx1ZS50b0Jv
b2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIGNhbmNlbGFibGVJZGVu
dGlmaWVyKGV4ZWMsICJjYW5jZWxhYmxlIik7CisgICAgUHJvcGVydHlTbG90IGNhbmNlbGFibGVT
bG90KGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICBpZiAoaW5pdGlhbGl6ZXJPYmplY3QtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBjYW5jZWxhYmxlSWRlbnRpZmllciwgY2FuY2VsYWJsZVNsb3QpKSB7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBKU1ZhbHVlIGNhbmNlbGFibGVWYWx1ZSA9IGNhbmNlbGFibGVTbG90
LmdldFZhbHVlKGV4ZWMsIGNhbmNlbGFibGVJZGVudGlmaWVyKTsKKyAgICAgICAgZXZlbnRJbml0
LmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlVmFsdWUudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRJbml0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEluaXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTRXZlbnRJbml0X2gKKyNkZWZp
bmUgSlNFdmVudEluaXRfaAorCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7
CisgICAgY2xhc3MgSlNPYmplY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IEV2ZW50SW5pdDsKKworYm9vbCBmaWxsRXZlbnRJbml0KEV2ZW50SW5pdCYsIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBKU0V2ZW50SW5pdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
OTAzNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAwMCw5ICszMDAwLDEyIEBAIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9yRGVjbGFyYXRpb24KIAogICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICIk
e2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAgICAgbXkgJGNhbkNvbnN0cnVjdCA9ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbkJlQ29uc3RydWN0ZWQifTsKKyAgICBteSAkY29u
c3RydWN0b3JJc0RvY3VtZW50T25seSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkRvY3VtZW50T25seUNvbnN0cnVjdG9yIn07CiAgICAgbXkgJGNhbGxXaXRoID0gJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKIAotICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgImNsYXNzICR7Y29uc3RydWN0b3JDbGFzc05hbWV9IDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHtcbiIpOworICAgIG15ICRwYXJlbnRDb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICgk
Y29uc3RydWN0b3JJc0RvY3VtZW50T25seSA/ICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCIg
OiAiRE9NQ29uc3RydWN0b3JPYmplY3QiKTsKKworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNs
YXNzICR7Y29uc3RydWN0b3JDbGFzc05hbWV9IDogcHVibGljICR7cGFyZW50Q29uc3RydWN0b3JD
bGFzc05hbWV9IHtcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInB1YmxpYzpcbiIpOwog
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTtcblxuIik7
CiAKQEAgLTMwMTYsNyArMzAxOSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRp
b24KICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAKICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJwcm90ZWN0ZWQ6XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IERPTUNvbnN0cnVj
dG9yT2JqZWN0OjpTdHJ1Y3R1cmVGbGFncztcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgJHtwYXJl
bnRDb25zdHJ1Y3RvckNsYXNzTmFtZX06OlN0cnVjdHVyZUZsYWdzO1xuIik7CiAKICAgICBpZiAo
JGNhbkNvbnN0cnVjdCkgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0o
SlNDOjpFeGVjU3RhdGUqKTtcbiIpOwpAQCAtMzAzOCwxMyArMzA0MSwxNiBAQCBzdWIgR2VuZXJh
dGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAi
JHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRjYW5Db25zdHJ1Y3QgPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYW5CZUNvbnN0cnVjdGVkIn07CiAgICAgbXkgJGN1
c3RvbUNvbnN0cnVjdEZ1bmN0aW9uID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tQ29uc3RydWN0RnVuY3Rpb24ifTsKKyAgICBteSAkY29uc3RydWN0b3JJc0RvY3VtZW50
T25seSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvY3VtZW50T25seUNvbnN0
cnVjdG9yIn07CiAgICAgbXkgJGNhbGxXaXRoID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbFdpdGgifTsKICAgICBteSAkbnVtYmVyT2Zjb25zdHJ1Y3RQYXJhbWV0ZXJzID0g
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JQYXJhbWV0ZXJzIn07
CiAKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2libGVDbGFzc05hbWV9Q29uc3RydWN0b3Jc
IiwgJkRPTUNvbnN0cnVjdG9yT2JqZWN0OjpzX2luZm8sICYke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fVRhYmxlLCAwIH07XG5cbiIpOworICAgIG15ICRwYXJlbnRDb25zdHJ1Y3RvckNsYXNzTmFtZSA9
ICgkY29uc3RydWN0b3JJc0RvY3VtZW50T25seSA/ICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dCIgOiAiRE9NQ29uc3RydWN0b3JPYmplY3QiKTsKKworICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
ImNvbnN0IENsYXNzSW5mbyAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7
dmlzaWJsZUNsYXNzTmFtZX1Db25zdHJ1Y3RvclwiLCAmJHtwYXJlbnRDb25zdHJ1Y3RvckNsYXNz
TmFtZX06OnNfaW5mbywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIDAgfTtcblxuIik7
CiAKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6JHtj
b25zdHJ1Y3RvckNsYXNzTmFtZX0oRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIDogJHtwYXJlbnRDb25zdHJ1
Y3RvckNsYXNzTmFtZX0oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ7XG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJU
KGluaGVyaXRzKCZzX2luZm8pKTtcbiIpOwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9N
V2luZG93IikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCShyZXZpc2lvbiA5
MDM0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0
b21FdmVudC5oIgogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkN1c3RvbUV2
ZW50SW5pdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0LDYgKzM0LDEyIEBAIEN1
c3RvbUV2ZW50OjpDdXN0b21FdmVudCgpCiB7CiB9CiAKK0N1c3RvbUV2ZW50OjpDdXN0b21FdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEN1c3RvbUV2ZW50SW5pdCYgaW5pdGlh
bGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fZGV0YWlsKGlu
aXRpYWxpemVyLmRldGFpbCkKK3sKK30KKwogQ3VzdG9tRXZlbnQ6On5DdXN0b21FdmVudCgpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaAkocmV2aXNpb24gOTAzNDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAg
KzI4LDExIEBACiAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEN1c3RvbUV2ZW50SW5pdDsKKwogY2xhc3MgQ3VzdG9tRXZlbnQgOiBwdWJs
aWMgRXZlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkN1c3RvbUV2ZW50KCk7CkBAIC00MSw2
ICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3VzdG9tRXZl
bnQpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUV2ZW50PiBjcmVhdGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBDdXN0b21FdmVudEluaXQmIGluaXRpYWxp
emVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21FdmVudCh0eXBl
LCBpbml0aWFsaXplcikpOworICAgIH0KKwogICAgIHZvaWQgaW5pdEN1c3RvbUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgU2Ny
aXB0VmFsdWUgZGV0YWlsKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbUV2ZW50KCkgY29u
c3Q7CkBAIC00OSw2ICs1NSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBDdXN0b21FdmVu
dCgpOworICAgIEN1c3RvbUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgQ3Vz
dG9tRXZlbnRJbml0JiBpbml0aWFsaXplcik7CiAKICAgICBTY3JpcHRWYWx1ZSBtX2RldGFpbDsK
IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwJKHJldmlzaW9uIDkwMzQ0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjksOSArMjksMTIgQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00g
TGV2ZWwgMzoKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxB
cmd1bWVudHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0
cnVjdEZ1bmN0aW9uLAorICAgICAgICBEb2N1bWVudE9ubHlDb25zdHJ1Y3RvcgogICAgIF0gQ3Vz
dG9tRXZlbnQgOiBFdmVudCB7CiAKLSAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NT2JqZWN0
IGRldGFpbDsKKyAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gRE9NT2JqZWN0IGRl
dGFpbDsKIAogICAgICAgIHZvaWQgaW5pdEN1c3RvbUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJn
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnRJbml0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnRJbml0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudEluaXQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkN1c3RvbUV2ZW50SW5pdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1c3RvbUV2
ZW50SW5pdDo6Q3VzdG9tRXZlbnRJbml0KCkKKyAgICA6IEV2ZW50SW5pdCgpCit7CisgICAgLy8g
RklYTUU6IGRldGFpbCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gbnVsbCwgaXQgaXMgbm90IGNs
ZWFyIGlmIHRoYXQgaXMKKyAgICAvLyB0aGUgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBvZiBTY3Jp
cHRWYWx1ZSBvciBub3QuCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudEluaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUV2ZW50SW5pdF9oCisjZGVmaW5lIEN1c3RvbUV2ZW50
SW5pdF9oCisKKyNpbmNsdWRlICJFdmVudEluaXQuaCIgCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgQ3VzdG9tRXZlbnRJbml0IDogcHVi
bGljIEV2ZW50SW5pdCB7CisgICAgQ3VzdG9tRXZlbnRJbml0KCk7CisgICAgCisgICAgU2NyaXB0
VmFsdWUgZGV0YWlsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
Q3VzdG9tRXZlbnRJbml0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAkocmV2aXNpb24gOTAzNDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5
ICsyMiwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKwog
I2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkV2ZW50SW5pdC5oIgogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0KICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5o
IgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgpAQCAtNjAsNiArNjEsMjEgQEAgRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeQogewogfQogCitFdmVudDo6RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGNvbnN0IEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBtX3R5cGUoZXZl
bnRUeXBlKQorICAgICwgbV9jYW5CdWJibGUoaW5pdGlhbGl6ZXIuYnViYmxlcykKKyAgICAsIG1f
Y2FuY2VsYWJsZShpbml0aWFsaXplci5jYW5jZWxhYmxlKQorICAgICwgbV9wcm9wYWdhdGlvblN0
b3BwZWQoZmFsc2UpCisgICAgLCBtX2ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZChmYWxzZSkK
KyAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKKyAgICAsIG1fZGVmYXVsdEhhbmRsZWQo
ZmFsc2UpCisgICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKKyAgICAsIG1fZXZlbnRQaGFzZSgw
KQorICAgICwgbV9jdXJyZW50VGFyZ2V0KDApCisgICAgLCBtX2NyZWF0ZVRpbWUoY29udmVydFNl
Y29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSkKK3sKK30KKwogRXZlbnQ6On5FdmVu
dCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gOTAzNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBFdmVu
dERpc3BhdGNoZXI7CisgICAgc3RydWN0IEV2ZW50SW5pdDsKIAogICAgIGNsYXNzIEV2ZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8RXZlbnQ+IHsKICAgICBwdWJsaWM6CkBAIC02OSw2ICs3MCwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKSk7CiAgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgY29uc3QgRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOwor
ICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB+RXZlbnQoKTsKIAogICAgICAgICB2b2lkIGlu
aXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUpOwpAQCAtMTc1LDYgKzE4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIEV2ZW50KCk7CiAgICAgICAgIEV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSk7CisgICAgICAgIEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRXZlbnRJbml0JiBpbml0aWFsaXpl
cik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0KCk7CiAgICAgICAgIGJv
b2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5pZGwJKHJldmlzaW9uIDkwMzQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsyNCw5IEBAIG1vZHVsZSBldmVudHMgewog
ICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywK
ICAgICAgICAgQ3VzdG9tVG9KUywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAg
Q3VzdG9tQ29uc3RydWN0RnVuY3Rpb24sCisgICAgICAgIERvY3VtZW50T25seUNvbnN0cnVjdG9y
LAogICAgICAgICBOb1N0YXRpY1RhYmxlcywKICAgICAgICAgUG9seW1vcnBoaWMKICAgICBdIEV2
ZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50SW5pdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRJbml0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXZlbnRJbml0OjpFdmVudEluaXQoKQorICAg
IDogYnViYmxlcyhmYWxzZSkKKyAgICAsIGNhbmNlbGFibGUoZmFsc2UpCit7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudEluaXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRJbml0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50SW5pdF9oCisjZGVmaW5lIEV2ZW50
SW5pdF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV2ZW50SW5pdCB7CisgICAg
RXZlbnRJbml0KCk7CisgICAgCisgICAgYm9vbCBidWJibGVzOworICAgIGJvb2wgY2FuY2VsYWJs
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV2ZW50SW5pdF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiA5MDM0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDYg
KzUxNCw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFs
PVdFQl9BVURJT10gQXVkaW9QYW5uZXJOb2RlQ29uc3RydWN0b3Igd2Via2l0QXVkaW9QYW5uZXJO
b2RlOyAvLyBOZWVkZWQgZm9yIHBhbm5pbmcgbW9kZWwgY29uc3RhbnRzCiAKICAgICAgICAgYXR0
cmlidXRlIEV2ZW50Q29uc3RydWN0b3IgRXZlbnQ7CisgICAgICAgIGF0dHJpYnV0ZSBDdXN0b21F
dmVudENvbnN0cnVjdG9yIEN1c3RvbUV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgQmVmb3JlTG9h
ZEV2ZW50Q29uc3RydWN0b3IgQmVmb3JlTG9hZEV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgSGFz
aENoYW5nZUV2ZW50Q29uc3RydWN0b3IgSGFzaENoYW5nZUV2ZW50OwogICAgICAgICBhdHRyaWJ1
dGUgS2V5Ym9hcmRFdmVudENvbnN0cnVjdG9yIEtleWJvYXJkRXZlbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99744</attachid>
            <date>2011-07-05 14:08:25 -0700</date>
            <delta_ts>2011-07-19 11:02:57 -0700</delta_ts>
            <desc>Third pass</desc>
            <filename>patch3.diff</filename>
            <type>text/plain</type>
            <size>45885</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTE2LDYgKzUxMTYsOCBAQAog
CQlCQ0I3NzM2MjBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I3NzM1RjBDMTc4
NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi87IH07CiAJCUJDQjc3MzYz
MEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCNzczNjAwQzE3ODUzRDAwMTMyQkE0
IC8qIEpTTm9kZUZpbHRlckN1c3RvbS5jcHAgKi87IH07CiAJCUJDQjkyRDRGMTI5MzU1MEIwMEM4
Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0JDNzBD
NTEzQzI0QkNGMDBBRTBENDQgLyogSlNFdmVudENvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JDNzBDMzEzQzI0QkNGMDBBRTBE
NDQgLyogSlNFdmVudENvbnN0cnVjdG9ycy5jcHAgKi87IH07CisJCUJDQkM3MEM2MTNDMjRCQ0Yw
MEFFMEQ0NCAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0JDNzBDNDEzQzI0QkNGMDBBRTBENDQgLyogSlNFdmVu
dENvbnN0cnVjdG9ycy5oICovOyB9OwogCQlCQ0JEMjFBQjBFNDE3QUQ0MDBBMDcwRjIgLyogS1VS
TEhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
QkQyMUFBMEU0MTdBRDQwMEEwNzBGMiAvKiBLVVJMSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQkZCNTNDMERDRDI5Q0YwMDE5QjNFNSAv
KiBKU0RPTVdpbmRvd1NoZWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQkZCNTNBMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxs
LmNwcCAqLzsgfTsKIAkJQkNCRkI1M0QwRENEMjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93U2hl
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkZC
NTNCMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzM4LDYgKzExNzQwLDggQEAK
IAkJQkNCNzczNUYwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjc3MzYwMEMxNzg1M0QwMDEzMkJBNCAv
KiBKU05vZGVGaWx0ZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTTm9kZUZpbHRlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEJhc2VsaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDQkM3MEMzMTNDMjRCQ0YwMEFFMEQ0NCAvKiBKU0V2ZW50Q29uc3RydWN0
b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRDb25z
dHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0JDNzBDNDEzQzI0
QkNGMDBBRTBENDQgLyogSlNFdmVudENvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0V2ZW50Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDQkQyMUFBMEU0MTdBRDQwMEEwNzBGMiAvKiBLVVJMSGFzaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLVVJMSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0JGQjUzQTBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVdpbmRvd1NoZWxs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCRkI1M0IwRENEMjlDRjAwMTlC
M0U1IC8qIEpTRE9NV2luZG93U2hlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNET01XaW5kb3dTaGVsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgz
MDAsNiArMTgzMDQsOCBAQAogCQkJCTY1RTBFOTQzMTEzM0M4OUYwMEI0Q0IxMCAvKiBKU0RPTVdy
YXBwZXIuaCAqLywKIAkJCQlGM0Q0NjE0NjExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRs
ZXIuY3BwICovLAogCQkJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxl
ci5oICovLAorCQkJCUJDQkM3MEMzMTNDMjRCQ0YwMEFFMEQ0NCAvKiBKU0V2ZW50Q29uc3RydWN0
b3JzLmNwcCAqLywKKwkJCQlCQ0JDNzBDNDEzQzI0QkNGMDBBRTBENDQgLyogSlNFdmVudENvbnN0
cnVjdG9ycy5oICovLAogCQkJCUJDNjA5MDFFMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFy
Z2V0LmNwcCAqLywKIAkJCQlCQzYwOTAxRDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdl
dC5oICovLAogCQkJCTMzMTRBQ0U5MTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2Uu
Y3BwICovLApAQCAtMjMwODgsNiArMjMwOTQsNyBAQAogCQkJCTA4NjM5NTE2MTNCNUZFNTcwMEJC
MzQ0RCAvKiBTVkdBbmltYXRlZFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMUEyRjlDMTNC
NkYyQjAwMDc3OTFFNCAvKiBTVkdBbmltYXRlZE51bWJlck9wdGlvbmFsTnVtYmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUFCQjc4NzEzQjkwNEJDMDBGMTk3RTMgLyogTGluZUJyZWFrSXRlcmF0
b3JQb29sSUNVLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0JDNzBDNjEzQzI0QkNGMDBBRTBENDQg
LyogSlNFdmVudENvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTg1NSw2ICsyNTg2
Miw3IEBACiAJCQkJNDMxQTMwMjExM0I4OURDQzAwNzc5MUU0IC8qIFNWR0FuaW1hdGVkUHJlc2Vy
dmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzFBMzA4ODEzQjhGOTc4MDA3
NzkxRTQgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzRjZG
RDk2MTNCQ0QwQjEwMDIyNDA1MiAvKiBTVkdBbmltYXRlZEludGVnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkNCQzcwQzUxM0MyNEJDRjAwQUUwRDQ0IC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJCZWZvcmVMb2FkRXZlbnQuaCIK
KyNpbmNsdWRlICJDdXN0b21FdmVudC5oIgorI2luY2x1ZGUgIkpTQmVmb3JlTG9hZEV2ZW50Lmgi
CisjaW5jbHVkZSAiSlNDdXN0b21FdmVudC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisj
aW5jbHVkZSAiSlNFdmVudC5oIgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJKU0tleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJKU01vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJKU1Byb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB2YWx1ZS50b0Jvb2xlYW4oZXhl
Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIGludCYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHZhbHVlLnRvSW50MzIoZXhl
Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gdmFsdWUudG9VSW50
MzIoZXhlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIHNob3J0JiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBjaGVjayBpZiB0aGlzIGlzIHRoZSBjb3JyZWN0IGNvbnZlcnNpb24gZm9yIHVu
c2lnbmVkIHNob3J0CisgICAgLy8gYWNjb3JkaW5nIHRvIFdlYklETC4KKyAgICByZXN1bHQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4odmFsdWUudG9VSW50MzIoZXhlYykpOworfQorCitz
dGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBsb25nIGxvbmcmIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyBjb252
ZXJzaW9uIGNvcnJlY3Q/IEphdmFTY3JpcHQgY2FuJ3QgYWN0dWFsbHkgcmVwcmVzZW50CisgICAg
Ly8gdGhlIGZ1bGwgNjQtYml0IHJhbmdlIG9mIHVuc2lnbmVkIGxvbmcgbG9uZy4KKyAgICByZXN1
bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHZhbHVlLnRvSW50ZWdlcihleGVj
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHVzdHJpbmdUb1N0cmlu
Zyh2YWx1ZS50b1N0cmluZyhleGVjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFNjcmlwdFZhbHVlJiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0ID0gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB2YWx1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHZhbHVlLCBSZWZQ
dHI8RE9NV2luZG93PiYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHRvRE9NV2luZG93KHZhbHVl
KTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFs
dWUsIFJlZlB0cjxFdmVudFRhcmdldD4mIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB0b0V2ZW50
VGFyZ2V0KHZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdD4KK3N0YXRpYyBi
b29sIHRyeUdldFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGluaXRpYWxpemVy
T2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFJlc3VsdCYgcmVzdWx0KQoreworICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIFByb3BlcnR5
U2xvdCBzbG90KGluaXRpYWxpemVyT2JqZWN0KTsKKyAgICBpZiAoaW5pdGlhbGl6ZXJPYmplY3Qt
PmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkgeworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisgICAg
ICAgIAorICAgICAgICBjb252ZXJ0VmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdCk7CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogTm90IGFsbCBjb252ZXJzaW9ucyByZXF1aXJlIHRoaXMgZXhj
ZXB0aW9uIGNoZWNrLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCisK
Ky8vIEZpbGxlcnMKKworLy8gRXZlbnQKKworYm9vbCBmaWxsRXZlbnRJbml0KEV2ZW50SW5pdCYg
ZXZlbnRJbml0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCkK
K3sKKyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAiYnVi
YmxlcyIsIGV2ZW50SW5pdC5idWJibGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghdHJ5R2V0UHJvcGVydHkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QsICJjYW5jZWxhYmxlIiwg
ZXZlbnRJbml0LmNhbmNlbGFibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNFdmVudENvbnN0cnVj
dG9yOjpjb25zdHJ1Y3RKU0V2ZW50KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gY29u
c3RydWN0SlNFdmVudFdpdGhJbml0aWFsaXplcjxKU0V2ZW50Q29uc3RydWN0b3IsIEV2ZW50LCBF
dmVudEluaXQ+KGV4ZWMsIGZpbGxFdmVudEluaXQpOworfQorCisvLyBDdXN0b21FdmVudAorCiti
b29sIGZpbGxDdXN0b21FdmVudEluaXQoQ3VzdG9tRXZlbnRJbml0JiBldmVudEluaXQsIEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0KQoreworICAgIC8vIEF0dGVt
cHQgdG8gZmlsbCBpbiB0aGUgRXZlbnRJbml0IHBhcnQgZmlyc3QuCisgICAgaWYgKCFmaWxsRXZl
bnRJbml0KGV2ZW50SW5pdCwgZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IHRvIGZpbGwgYWRkaXRpb25hbCBwcm9wZXJ0aWVz
LgorICAgIGlmICghdHJ5R2V0UHJvcGVydHkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QsICJkZXRh
aWwiLCBldmVudEluaXQuZGV0YWlsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNDdXN0b21FdmVu
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0N1c3RvbUV2ZW50KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gY29uc3RydWN0SlNFdmVudFdpdGhJbml0aWFsaXplcjxKU0N1c3RvbUV2ZW50
Q29uc3RydWN0b3IsIEN1c3RvbUV2ZW50LCBDdXN0b21FdmVudEluaXQ+KGV4ZWMsIGZpbGxDdXN0
b21FdmVudEluaXQpOworfQorCisvLyBQcm9ncmVzc0V2ZW50CisKK2Jvb2wgZmlsbFByb2dyZXNz
RXZlbnRJbml0KFByb2dyZXNzRXZlbnRJbml0JiBldmVudEluaXQsIEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0KQoreworICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBp
biB0aGUgRXZlbnRJbml0IHBhcnQgZmlyc3QuCisgICAgaWYgKCFmaWxsRXZlbnRJbml0KGV2ZW50
SW5pdCwgZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBBdHRlbXB0IHRvIGZpbGwgYWRkaXRpbmFsIHByb3BlcnRpZXMuCisgICAgaWYgKCF0
cnlHZXRQcm9wZXJ0eShleGVjLCBpbml0aWFsaXplck9iamVjdCwgImxlbmd0aENvbXB1dGFibGUi
LCBldmVudEluaXQubGVuZ3RoQ29tcHV0YWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAibG9hZGVkIiwg
ZXZlbnRJbml0LmxvYWRlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXRyeUdl
dFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAidG90YWwiLCBldmVudEluaXQudG90
YWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb2dyZXNzRXZlbnRDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNQcm9ncmVzc0V2ZW50KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gY29u
c3RydWN0SlNFdmVudFdpdGhJbml0aWFsaXplcjxKU1Byb2dyZXNzRXZlbnRDb25zdHJ1Y3Rvciwg
UHJvZ3Jlc3NFdmVudCwgUHJvZ3Jlc3NFdmVudEluaXQ+KGV4ZWMsIGZpbGxQcm9ncmVzc0V2ZW50
SW5pdCk7Cit9CisKKworLy8gQmVmb3JlTG9hZEV2ZW50CisKK2Jvb2wgZmlsbEJlZm9yZUxvYWRF
dmVudEluaXQoQmVmb3JlTG9hZEV2ZW50SW5pdCYgZXZlbnRJbml0LCBFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCkKK3sKKyAgICAvLyBBdHRlbXB0IHRvIGZpbGwg
aW4gdGhlIEV2ZW50SW5pdCBwYXJ0IGZpcnN0LgorICAgIGlmICghZmlsbEV2ZW50SW5pdChldmVu
dEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQXR0ZW1wdCB0byBmaWxsIGFkZGl0aW5hbCBwcm9wZXJ0aWVzLgorICAgIGlmICgh
dHJ5R2V0UHJvcGVydHkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QsICJ1cmwiLCBldmVudEluaXQu
dXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCZWZvcmVMb2FkRXZlbnRDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNCZWZvcmVMb2FkRXZlbnQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBjb25zdHJ1Y3RKU0V2ZW50V2l0aEluaXRpYWxpemVyPEpTQmVmb3JlTG9hZEV2ZW50Q29uc3Ry
dWN0b3IsIEJlZm9yZUxvYWRFdmVudCwgQmVmb3JlTG9hZEV2ZW50SW5pdD4oZXhlYywgZmlsbEJl
Zm9yZUxvYWRFdmVudEluaXQpOworfQorCisKKy8vIFVJRXZlbnQKKworYm9vbCBmaWxsVUlFdmVu
dEluaXQoVUlFdmVudEluaXQmIGV2ZW50SW5pdCwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
aW5pdGlhbGl6ZXJPYmplY3QpCit7CisgICAgLy8gQXR0ZW1wdCB0byBmaWxsIGluIHRoZSBFdmVu
dEluaXQgcGFydCBmaXJzdC4KKyAgICBpZiAoIWZpbGxFdmVudEluaXQoZXZlbnRJbml0LCBleGVj
LCBpbml0aWFsaXplck9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEF0
dGVtcHQgdG8gZmlsbCBhZGRpdGluYWwgcHJvcGVydGllcy4KKyAgICBpZiAoIXRyeUdldFByb3Bl
cnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAidmlldyIsIGV2ZW50SW5pdC52aWV3KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdHJ5R2V0UHJvcGVydHkoZXhlYywgaW5pdGlh
bGl6ZXJPYmplY3QsICJkZXRhaWwiLCBldmVudEluaXQuZGV0YWlsKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNVSUV2ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTVUlFdmVudChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXI8SlNV
SUV2ZW50Q29uc3RydWN0b3IsIFVJRXZlbnQsIFVJRXZlbnRJbml0PihleGVjLCBmaWxsVUlFdmVu
dEluaXQpOworfQorCisvLyBNb3VzZUV2ZW50CisKK2Jvb2wgZmlsbE1vdXNlRXZlbnRJbml0KE1v
dXNlRXZlbnRJbml0JiBldmVudEluaXQsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGluaXRp
YWxpemVyT2JqZWN0KQoreworICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbiB0aGUgVUlFdmVudElu
aXQgcGFydCBmaXJzdC4KKyAgICBpZiAoIWZpbGxVSUV2ZW50SW5pdChldmVudEluaXQsIGV4ZWMs
IGluaXRpYWxpemVyT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQXR0
ZW1wdCB0byBmaWxsIGFkZGl0aW5hbCBwcm9wZXJ0aWVzLgorICAgIGlmICghdHJ5R2V0UHJvcGVy
dHkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QsICJzY3JlZW5YIiwgZXZlbnRJbml0LnNjcmVlblgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0cnlHZXRQcm9wZXJ0eShleGVjLCBp
bml0aWFsaXplck9iamVjdCwgInNjcmVlblkiLCBldmVudEluaXQuc2NyZWVuWSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVy
T2JqZWN0LCAiY2xpZW50WCIsIGV2ZW50SW5pdC5jbGllbnRYKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghdHJ5R2V0UHJvcGVydHkoZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QsICJj
bGllbnRZIiwgZXZlbnRJbml0LmNsaWVudFkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCF0cnlHZXRQcm9wZXJ0eShleGVjLCBpbml0aWFsaXplck9iamVjdCwgImN0cmxLZXkiLCBl
dmVudEluaXQuY3RybEtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXRyeUdl
dFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAiYWx0S2V5IiwgZXZlbnRJbml0LmFs
dEtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4
ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAic2hpZnRLZXkiLCBldmVudEluaXQuc2hpZnRLZXkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF0cnlHZXRQcm9wZXJ0eShleGVjLCBpbml0
aWFsaXplck9iamVjdCwgIm1ldGFLZXkiLCBldmVudEluaXQubWV0YUtleSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2Jq
ZWN0LCAiYnV0dG9uIiwgZXZlbnRJbml0LmJ1dHRvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAicmVsYXRl
ZFRhcmdldCIsIGV2ZW50SW5pdC5yZWxhdGVkVGFyZ2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNNb3VzZUV2ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTTW91c2VFdmVudChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXI8SlNN
b3VzZUV2ZW50Q29uc3RydWN0b3IsIE1vdXNlRXZlbnQsIE1vdXNlRXZlbnRJbml0PihleGVjLCBm
aWxsTW91c2VFdmVudEluaXQpOworfQorCisKKy8vIEtleWJvYXJkRXZlbnQKKworYm9vbCBmaWxs
S2V5Ym9hcmRFdmVudEluaXQoS2V5Ym9hcmRFdmVudEluaXQmIGV2ZW50SW5pdCwgRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpCit7CisgICAgLy8gQXR0ZW1wdCB0
byBmaWxsIGluIHRoZSBVSUV2ZW50SW5pdCBwYXJ0IGZpcnN0LgorICAgIGlmICghZmlsbFVJRXZl
bnRJbml0KGV2ZW50SW5pdCwgZXhlYywgaW5pdGlhbGl6ZXJPYmplY3QpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IHRvIGZpbGwgYWRkaXRpbmFsIHByb3BlcnRpZXMu
CisgICAgaWYgKCF0cnlHZXRQcm9wZXJ0eShleGVjLCBpbml0aWFsaXplck9iamVjdCwgImtleUlk
ZW50aWZpZXIiLCBldmVudEluaXQua2V5SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAia2V5
TG9jYXRpb24iLCBldmVudEluaXQua2V5TG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCF0cnlHZXRQcm9wZXJ0eShleGVjLCBpbml0aWFsaXplck9iamVjdCwgImFsdEdy
YXBoS2V5IiwgZXZlbnRJbml0LmFsdEdyYXBoS2V5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNL
ZXlib2FyZEV2ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTS2V5Ym9hcmRFdmVudChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXI8
SlNLZXlib2FyZEV2ZW50Q29uc3RydWN0b3IsIEtleWJvYXJkRXZlbnQsIEtleWJvYXJkRXZlbnRJ
bml0PihleGVjLCBmaWxsS2V5Ym9hcmRFdmVudEluaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0
b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudENv
bnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudENvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBKU0V2ZW50Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgSlNFdmVudENv
bnN0cnVjdG9yc19oCisKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiSlNFdmVudC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0VmFsdWU7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN0cnVjdG9yLCB0eXBlbmFtZSBFdmVudFR5cGUsIHR5
cGVuYW1lIEV2ZW50SW5pdFR5cGU+CitKU0M6OkVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTRXZl
bnRXaXRoSW5pdGlhbGl6ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgKCpmaWxsZXIpKEV2
ZW50SW5pdFR5cGUmLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqKSkKK3sKKyAgICBD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PENvbnN0cnVjdG9yKj4oZXhl
Yy0+Y2FsbGVlKCkpOworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29u
dGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAo
IWV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIHJldHVybiBKU0M6OnRocm93Vk1FcnJvcihleGVj
LCBKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsICJDb25zdHJ1Y3RvciBhc3NvY2lhdGVk
IGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpOworCisgICAgQXRvbWljU3RyaW5n
IGV2ZW50VHlwZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKKworICAgIEV2ZW50
SW5pdFR5cGUgZXZlbnRJbml0OworCisgICAgSlNDOjpKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUg
PSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICBpZiAoIWluaXRpYWxpemVyVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxs
IGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCisgICAgICAgIEpTQzo6SlNPYmplY3QqIGluaXRpYWxp
emVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAv
LyBBdHRlbXB0IHRvIGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KKyAgICAgICAgaWYgKCFmaWxsZXIo
ZXZlbnRJbml0LCBleGVjLCBpbml0aWFsaXplck9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBS
ZWZQdHI8RXZlbnRUeXBlPiBldmVudCA9IEV2ZW50VHlwZTo6Y3JlYXRlKGV2ZW50VHlwZSwgZXZl
bnRJbml0KTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0Nv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZXZlbnQuZ2V0KCkpKTsKK30KKworCitzdHJ1Y3Qg
RXZlbnRJbml0OworYm9vbCBmaWxsRXZlbnRJbml0KEV2ZW50SW5pdCYsIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCitzdHJ1Y3QgQ3VzdG9tRXZl
bnRJbml0OworYm9vbCBmaWxsQ3VzdG9tRXZlbnRJbml0KEN1c3RvbUV2ZW50SW5pdCYsIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCitzdHJ1Y3Qg
UHJvZ3Jlc3NFdmVudEluaXQ7Citib29sIGZpbGxQcm9ncmVzc0V2ZW50SW5pdChQcm9ncmVzc0V2
ZW50SW5pdCYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmpl
Y3QpOworCitzdHJ1Y3QgQmVmb3JlTG9hZEV2ZW50SW5pdDsKK2Jvb2wgZmlsbEJlZm9yZUxvYWRF
dmVudEluaXQoQmVmb3JlTG9hZEV2ZW50SW5pdCYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCitzdHJ1Y3QgVUlFdmVudEluaXQ7Citib29sIGZp
bGxVSUV2ZW50SW5pdChVSUV2ZW50SW5pdCYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCogaW5pdGlhbGl6ZXJPYmplY3QpOworCitzdHJ1Y3QgTW91c2VFdmVudEluaXQ7Citib29sIGZp
bGxNb3VzZUV2ZW50SW5pdChNb3VzZUV2ZW50SW5pdCYsIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCitzdHJ1Y3QgS2V5Ym9hcmRFdmVudEluaXQ7
Citib29sIGZpbGxLZXlib2FyZEV2ZW50SW5pdChLZXlib2FyZEV2ZW50SW5pdCYsIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpOworCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEpTRXZlbnRDb25zdHJ1Y3RvcnNfaApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEJlZm9yZUxvYWRFdmVu
dEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKKyAgICBCZWZvcmVMb2FkRXZlbnRJbml0KCkKKyAg
ICB7CisgICAgfQorCisgICAgU3RyaW5nIHVybDsKK307CisKIGNsYXNzIEJlZm9yZUxvYWRFdmVu
dCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQmVmb3JlTG9h
ZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDEsNiArNDksMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJlZm9yZUxvYWRFdmVudCh1cmwpKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+IGNyZWF0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEJlZm9yZUxvYWRFdmVudEluaXQmIGluaXRhbGl6
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJlZm9yZUxvYWRFdmVudCh0
eXBlLCBpbml0YWxpemVyKSk7CisgICAgfQorCiAgICAgdm9pZCBpbml0QmVmb3JlTG9hZEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgewogICAgICAgICBpZiAoZGlzcGF0Y2hlZCgpKQpA
QCAtNTcsNyArNzAsMTQgQEAgcHJpdmF0ZToKICAgICBCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3Ry
aW5nJiB1cmwpCiAgICAgICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWxvYWRFdmVudCwg
ZmFsc2UsIHRydWUpCiAgICAgICAgICwgbV91cmwodXJsKQotICAgIHt9CisgICAgeworICAgIH0K
KworICAgIEJlZm9yZUxvYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEJl
Zm9yZUxvYWRFdmVudEluaXQmIGluaXRhbGl6ZXIpCisgICAgICAgIDogRXZlbnQodHlwZSwgaW5p
dGFsaXplcikKKyAgICAgICAgLCBtX3VybChpbml0YWxpemVyLnVybCkKKyAgICB7CisgICAgfQog
CiAgICAgU3RyaW5nIG1fdXJsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVM
b2FkRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2Fk
RXZlbnQuaWRsCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVM
b2FkRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBAIG1vZHVsZSBldmVu
dHMgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJn
dW1lbnRzLAorICAgICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1
Y3RGdW5jdGlvbgogICAgIF0gQmVmb3JlTG9hZEV2ZW50IDogRXZlbnQgewogICAgICAgICB2b2lk
IGluaXRCZWZvcmVMb2FkRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZSwgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DdXN0b21FdmVudC5jcHAJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDI1IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRXZlbnQuaCIKIAotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDdXN0b21FdmVudEluaXQ6OkN1
c3RvbUV2ZW50SW5pdCgpCit7CisgICAgLy8gRklYTUU6IGRldGFpbCBzaG91bGQgYmUgaW5pdGlh
bGl6ZWQgdG8gbnVsbCwgaXQgaXMgbm90IGNsZWFyIGlmIHRoYXQgaXMKKyAgICAvLyB0aGUgZGVm
YXVsdCBpbml0aWFsaXphdGlvbiBvZiBTY3JpcHRWYWx1ZSBvciBub3QuCit9CisKKwogQ3VzdG9t
RXZlbnQ6OkN1c3RvbUV2ZW50KCkKIHsKIH0KIAorQ3VzdG9tRXZlbnQ6OkN1c3RvbUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgQ3VzdG9tRXZlbnRJbml0JiBpbml0aWFsaXpl
cikKKyAgICA6IEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKQorICAgICwgbV9kZXRhaWwoaW5pdGlh
bGl6ZXIuZGV0YWlsKQoreworfQorCiBDdXN0b21FdmVudDo6fkN1c3RvbUV2ZW50KCkKIHsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgs
MTUgQEAKIAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdHJ1Y3QgQ3VzdG9tRXZlbnRJbml0IDogcHVibGljIEV2ZW50SW5pdCB7CisgICAgQ3VzdG9t
RXZlbnRJbml0KCk7CisgICAgCisgICAgU2NyaXB0VmFsdWUgZGV0YWlsOworfTsKKwogY2xhc3Mg
Q3VzdG9tRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkN1c3Rv
bUV2ZW50KCk7CkBAIC00MSw2ICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ3VzdG9tRXZlbnQpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1
c3RvbUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBDdXN0b21F
dmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDdXN0b21FdmVudCh0eXBlLCBpbml0aWFsaXplcikpOworICAgIH0KKwogICAgIHZvaWQgaW5p
dEN1c3RvbUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJv
b2wgY2FuY2VsYWJsZSwgU2NyaXB0VmFsdWUgZGV0YWlsKTsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0N1c3RvbUV2ZW50KCkgY29uc3Q7CkBAIC00OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBDdXN0b21FdmVudCgpOworICAgIEN1c3RvbUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgY29uc3QgQ3VzdG9tRXZlbnRJbml0JiBpbml0aWFsaXplcik7CiAKICAgICBTY3Jp
cHRWYWx1ZSBtX2RldGFpbDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZl
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwJ
KHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAvLyBJ
bnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2Fj
eURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAg
ICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIEN1c3RvbUV2ZW50IDogRXZlbnQg
ewogCiAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTU9iamVjdCBkZXRhaWw7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudC5jcHAJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTUgKzIyLDIyIEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJFdmVudC5oIgorCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVy
LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLQogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5k
aWNhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorRXZlbnRJbml0OjpF
dmVudEluaXQoKQorICAgIDogYnViYmxlcyhmYWxzZSkKKyAgICAsIGNhbmNlbGFibGUoZmFsc2Up
Cit7Cit9CisKKwogRXZlbnQ6OkV2ZW50KCkKICAgICA6IG1fY2FuQnViYmxlKGZhbHNlKQogICAg
ICwgbV9jYW5jZWxhYmxlKGZhbHNlKQpAQCAtNjAsNiArNjcsMjEgQEAgRXZlbnQ6OkV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeQogewogfQogCitFdmVudDo6RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAg
OiBtX3R5cGUoZXZlbnRUeXBlKQorICAgICwgbV9jYW5CdWJibGUoaW5pdGlhbGl6ZXIuYnViYmxl
cykKKyAgICAsIG1fY2FuY2VsYWJsZShpbml0aWFsaXplci5jYW5jZWxhYmxlKQorICAgICwgbV9w
cm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCisgICAgLCBtX2ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv
cHBlZChmYWxzZSkKKyAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKKyAgICAsIG1fZGVm
YXVsdEhhbmRsZWQoZmFsc2UpCisgICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKKyAgICAsIG1f
ZXZlbnRQaGFzZSgwKQorICAgICwgbV9jdXJyZW50VGFyZ2V0KDApCisgICAgLCBtX2NyZWF0ZVRp
bWUoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSkKK3sKK30KKwog
RXZlbnQ6On5FdmVudCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gOTA0MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEV2ZW50VGFyZ2V0OwogICAg
IGNsYXNzIEV2ZW50RGlzcGF0Y2hlcjsKIAorICAgIHN0cnVjdCBFdmVudEluaXQgeworICAgICAg
ICBFdmVudEluaXQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgYnViYmxlczsKKyAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlOworICAgIH07CisKICAgICBjbGFzcyBFdmVudCA6IHB1YmxpYyBSZWZD
b3VudGVkPEV2ZW50PiB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFBoYXNlVHlwZSB7IApA
QCAtNjksNiArNzYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJs
ZSkpOwogICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZlbnQodHlwZSwg
aW5pdGlhbGl6ZXIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwgfkV2ZW50KCk7CiAK
ICAgICAgICAgdm9pZCBpbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNh
bkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKQEAgLTE3NSw2ICsxODgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBFdmVudCgpOwogICAgICAgICBFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFi
bGUpOworICAgICAgICBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEV2ZW50
SW5pdCYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwogICAgICAg
ICBib29sIGRpc3BhdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnQuaWRsCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5p
Z0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQsOCBAQCBtb2R1bGUgZXZlbnRz
IHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVu
dHMsCiAgICAgICAgIEN1c3RvbVRvSlMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAg
ICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uLAogICAgICAgICBOb1N0YXRpY1RhYmxlcywKICAg
ICAgICAgUG9seW1vcnBoaWMKICAgICBdIEV2ZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vS2V5
Ym9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK0tleWJvYXJkRXZlbnRJbml0OjpLZXlib2FyZEV2ZW50SW5pdCgp
CisgICAgOiBrZXlMb2NhdGlvbihLZXlib2FyZEV2ZW50OjpET01fS0VZX0xPQ0FUSU9OX1NUQU5E
QVJEKQorICAgICwgYWx0R3JhcGhLZXkoZmFsc2UpCit7Cit9CisKKwogc3RhdGljIGlubGluZSBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZUZvcktleWJvYXJkRXZlbnRUeXBlKFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNzcs
NiArODQsMTQgQEAgS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taQogewog
fQogCitLZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgY29uc3QgS2V5Ym9hcmRFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogVUlFdmVudFdp
dGhLZXlTdGF0ZSh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fa2V5SWRlbnRpZmllcihpbml0
aWFsaXplci5rZXlJZGVudGlmaWVyKQorICAgICwgbV9rZXlMb2NhdGlvbihpbml0aWFsaXplci5r
ZXlMb2NhdGlvbikKKyAgICAsIG1fYWx0R3JhcGhLZXkoaW5pdGlhbGl6ZXIuYWx0R3JhcGhLZXkp
Cit7Cit9CisKIEtleWJvYXJkRXZlbnQ6On5LZXlib2FyZEV2ZW50KCkKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0MywxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgIH07CiAjZW5k
aWYKLSAgICAKKworICAgIHN0cnVjdCBLZXlib2FyZEV2ZW50SW5pdCA6IHB1YmxpYyBVSUV2ZW50
V2l0aEtleVN0YXRlSW5pdCB7CisgICAgICAgIEtleWJvYXJkRXZlbnRJbml0KCk7CisKKyAgICAg
ICAgU3RyaW5nIGtleUlkZW50aWZpZXI7CisgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uOwor
ICAgICAgICBib29sIGFsdEdyYXBoS2V5OworICAgIH07CisKICAgICAvLyBJbnRyb2R1Y2VkIGlu
IERPTSBMZXZlbCAzCiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0
aEtleVN0YXRlIHsKICAgICBwdWJsaWM6CkBAIC02OSw2ICs3NywxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleWJvYXJkRXZlbnQodHlw
ZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBrZXlJZGVudGlmaWVyLCBrZXlMb2NhdGlv
biwKICAgICAgICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBh
bHRHcmFwaEtleSkpOwogICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEtleWJv
YXJkRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEtleWJvYXJk
RXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyBLZXlib2FyZEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHZpcnR1YWwgfktleWJvYXJkRXZlbnQoKTsKICAgICAKICAgICAgICAgdm9pZCBpbml0S2V5Ym9h
cmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIEFic3RyYWN0VmlldyosCkBAIC0xMDEsNiArMTE0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Ym9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIHVuc2lnbmVkIGtleUxv
Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXks
IGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBhbHRHcmFwaEtleSk7CisgICAgICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBLZXlib2FyZEV2
ZW50SW5pdCYpOwogCiAgICAgICAgIE93blB0cjxQbGF0Zm9ybUtleWJvYXJkRXZlbnQ+IG1fa2V5
RXZlbnQ7CiAgICAgICAgIFN0cmluZyBtX2tleUlkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0tleWJvYXJkRXZlbnQuaWRsCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9LZXlib2FyZEV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQCBt
b2R1bGUgZXZlbnRzIHsKICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzOgogICAgIGlu
dGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAg
ICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAg
ICBdIEtleWJvYXJkRXZlbnQgOiBVSUV2ZW50IHsKIAogI2lmICFkZWZpbmVkKExBTkdVQUdFX0pB
VkFTQ1JJUFQpIHx8ICFMQU5HVUFHRV9KQVZBU0NSSVBUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01vdXNl
RXZlbnQuY3BwCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitNb3VzZUV2ZW50SW5pdDo6TW91c2VFdmVudEluaXQoKQorICAgIDogYnV0dG9u
KDApIAoreworfQorCisKIFBhc3NSZWZQdHI8TW91c2VFdmVudD4gTW91c2VFdmVudDo6Y3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4g
dmlldywgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgaW50IGRldGFpbCwgUGFzc1Jl
ZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KQogewogICAgIEFTU0VSVChldmVudC5ldmVudFR5cGUo
KSA9PSBNb3VzZUV2ZW50TW92ZWQgfHwgZXZlbnQuYnV0dG9uKCkgIT0gTm9CdXR0b24pOwpAQCAt
NjMsNiArNjksMTQgQEAgTW91c2VFdmVudDo6TW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbgog
ewogfQogCitNb3VzZUV2ZW50OjpNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBjb25zdCBNb3VzZUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBNb3VzZVJlbGF0
ZWRFdmVudChldmVudFR5cGUsIGluaXRpYWxpemVyKQorICAgICwgbV9idXR0b24oaW5pdGlhbGl6
ZXIuYnV0dG9uKQorICAgICwgbV9idXR0b25Eb3duKGluaXRpYWxpemVyLmJ1dHRvbiAhPSAodW5z
aWduZWQgc2hvcnQpLTEpCisgICAgLCBtX3JlbGF0ZWRUYXJnZXQoaW5pdGlhbGl6ZXIucmVsYXRl
ZFRhcmdldCkKK3sKK30KKwogTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5oCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDE1IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXZlbnREaXNwYXRjaGVyOwotY2xhc3MgUGxhdGZv
cm1Nb3VzZUV2ZW50OworICAgIGNsYXNzIEV2ZW50RGlzcGF0Y2hlcjsKKyAgICBjbGFzcyBQbGF0
Zm9ybU1vdXNlRXZlbnQ7CisKKyAgICBzdHJ1Y3QgTW91c2VFdmVudEluaXQgOiBwdWJsaWMgTW91
c2VSZWxhdGVkRXZlbnRJbml0IHsKKyAgICAgICAgTW91c2VFdmVudEluaXQoKTsKKworICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBidXR0b247CisgICAgICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVs
YXRlZFRhcmdldDsKKyAgICB9OwogCiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgog
ICAgIGNsYXNzIE1vdXNlRXZlbnQgOiBwdWJsaWMgTW91c2VSZWxhdGVkRXZlbnQgewpAQCAtMzks
NiArNDYsNyBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW91c2VFdmVudCk7CiAgICAgICAgIH0KKwogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywKICAgICAgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQg
c2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCiAgICAgICAgICAgICBib29sIGN0cmxLZXks
IGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIHVuc2lnbmVkIHNob3J0
IGJ1dHRvbiwKQEAgLTQ3LDYgKzU1LDEyIEBAIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKICAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW91c2VFdmVudCh0eXBlLCBjYW5CdWJibGUs
IGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgcGFnZVgsIHBhZ2VZ
LAogICAgICAgICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1
dHRvbiwgcmVsYXRlZFRhcmdldCwgY2xpcGJvYXJkLCBpc1NpbXVsYXRlZCkpOwogICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TW91c2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBNb3VzZUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTW91c2VFdmVudChldmVudFR5cGUs
IGluaXRpYWxpemVyKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1v
dXNlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBpbnQgZGV0YWlsLCBQ
YXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOwogCiAgICAgICAgIHZpcnR1YWwgfk1vdXNl
RXZlbnQoKTsKQEAgLTc5LDYgKzkzLDcgQEAgY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogICAg
ICAgICAgICAgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50
IHBhZ2VYLCBpbnQgcGFnZVksCiAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29s
IGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCB1bnNpZ25lZCBzaG9ydCBidXR0
b24sCiAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRh
cmdldCwgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCwgYm9vbCBpc1NpbXVsYXRlZCk7
CisgICAgICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0
IE1vdXNlRXZlbnRJbml0Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBNb3VzZUV2ZW50KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaWRsCShyZXZpc2lvbiA5MDQwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsOCBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAy
OgogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50
cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0RnVu
Y3Rpb24KICAgICBdIE1vdXNlRXZlbnQgOiBVSUV2ZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgICAgICAgICAgICAgc2NyZWVuWDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGxvbmcgICAgICAgICAgICAgc2NyZWVuWTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
b3VzZVJlbGF0ZWRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlUmVsYXRlZEV2ZW50LmNwcAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMjkg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitNb3VzZVJlbGF0ZWRFdmVudEluaXQ6Ok1vdXNl
UmVsYXRlZEV2ZW50SW5pdCgpCisgICAgOiBzY3JlZW5YKDApIAorICAgICwgc2NyZWVuWSgwKSAK
KyAgICAsIGNsaWVudFgoMCkgCisgICAgLCBjbGllbnRZKDApCit7Cit9CisKKwogTW91c2VSZWxh
dGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KCkKICAgICA6IG1faXNTaW11bGF0ZWQoZmFsc2Up
CiAgICAgLCBtX2hhc0NhY2hlZFJlbGF0aXZlUG9zaXRpb24oZmFsc2UpCiB7CiB9CiAKK01vdXNl
UmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgY29uc3QgTW91c2VSZWxhdGVkRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICA6IFVJ
RXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fc2NyZWVu
TG9jYXRpb24oaW5pdGlhbGl6ZXIuc2NyZWVuWCwgaW5pdGlhbGl6ZXIuc2NyZWVuWSkKKyAgICAs
IG1faXNTaW11bGF0ZWQoZmFsc2UpCit7CisgICAgaW5pdENvb3JkaW5hdGVzKEludFBvaW50KGlu
aXRpYWxpemVyLmNsaWVudFgsIGluaXRpYWxpemVyLmNsaWVudFkpKTsKK30KKwogc3RhdGljIElu
dFNpemUgY29udGVudHNTY3JvbGxPZmZzZXQoQWJzdHJhY3RWaWV3KiBhYnN0cmFjdFZpZXcpCiB7
CiAgICAgaWYgKCFhYnN0cmFjdFZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VS
ZWxhdGVkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxh
dGVkRXZlbnQuaAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VS
ZWxhdGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisgICAgc3RydWN0IE1vdXNlUmVsYXRlZEV2ZW50SW5pdCA6IHB1Ymxp
YyBVSUV2ZW50V2l0aEtleVN0YXRlSW5pdCB7CisgICAgICAgIE1vdXNlUmVsYXRlZEV2ZW50SW5p
dCgpOworCisgICAgICAgIGludCBzY3JlZW5YOyAKKyAgICAgICAgaW50IHNjcmVlblk7IAorICAg
ICAgICBpbnQgY2xpZW50WDsgCisgICAgICAgIGludCBjbGllbnRZOworICAgIH07CisKICAgICAv
LyBJbnRlcm5hbCBvbmx5OiBIZWxwZXIgY2xhc3MgZm9yIHdoYXQncyBjb21tb24gYmV0d2VlbiBt
b3VzZSBhbmQgd2hlZWwgZXZlbnRzLgogICAgIGNsYXNzIE1vdXNlUmVsYXRlZEV2ZW50IDogcHVi
bGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewogICAgIHB1YmxpYzoKQEAgLTYxLDYgKzcwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwg
Y29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQb2ludCYgd2luZG93TG9j
YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRL
ZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBpc1NpbXVsYXRlZCA9IGZhbHNl
KTsKKyAgICAgICAgTW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBNb3VzZVJlbGF0ZWRFdmVudEluaXQmKTsKIAogICAgICAgICB2b2lkIGluaXRDb29yZGlu
YXRlcygpOwogICAgICAgICB2b2lkIGluaXRDb29yZGluYXRlcyhjb25zdCBJbnRQb2ludCYgY2xp
ZW50TG9jYXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmNwcAkocmV2
aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKK1Byb2dyZXNzRXZlbnRJbml0OjpQcm9ncmVzc0V2ZW50SW5pdCgpCisgICAgOiBsZW5ndGhD
b21wdXRhYmxlKGZhbHNlKQorICAgICwgbG9hZGVkKDApCisgICAgLCB0b3RhbCgwKQoreworfQor
CisKIFByb2dyZXNzRXZlbnQ6OlByb2dyZXNzRXZlbnQoKQogICAgIDogbV9sZW5ndGhDb21wdXRh
YmxlKGZhbHNlKQogICAgICwgbV9sb2FkZWQoMCkKQEAgLTQyLDcgKzUwLDE1IEBAIFByb2dyZXNz
RXZlbnQ6OlByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWkKICAgICAsIG1fdG90YWwodG90YWwpCiB7
CiB9Ci0gICAgCisKK1Byb2dyZXNzRXZlbnQ6OlByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBQcm9ncmVzc0V2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBF
dmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fbGVuZ3RoQ29tcHV0YWJsZShpbml0aWFs
aXplci5sZW5ndGhDb21wdXRhYmxlKQorICAgICwgbV9sb2FkZWQoaW5pdGlhbGl6ZXIubG9hZGVk
KQorICAgICwgbV90b3RhbChpbml0aWFsaXplci50b3RhbCkKK3sKK30KKwogdm9pZCBQcm9ncmVz
c0V2ZW50Ojppbml0UHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsIGJv
b2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsCiAgICAgYm9vbCBsZW5ndGhDb21w
dXRhYmxlQXJnLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkQXJnLCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWxBcmcpCiB7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCShy
ZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDE1IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUHJvZ3Jlc3NFdmVudEluaXQgOiBwdWJsaWMgRXZl
bnRJbml0IHsKKyAgICBQcm9ncmVzc0V2ZW50SW5pdCgpOwogICAgIAorICAgIGJvb2wgbGVuZ3Ro
Q29tcHV0YWJsZTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkOworICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbDsKK307CisKIGNsYXNzIFByb2dyZXNzRXZlbnQgOiBwdWJsaWMgRXZl
bnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyZXNzRXZlbnQ+IGNyZWF0
ZSgpCkBAIC00MCw2ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFByb2dyZXNzRXZlbnQodHlwZSwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0
b3RhbCkpOwogICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmVzc0V2ZW50PiBjcmVh
dGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQcm9ncmVzc0V2ZW50SW5pdCYgaW5p
dGlhbGl6ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2dyZXNzRXZl
bnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICB9CiAKICAgICB2b2lkIGluaXRQcm9ncmVzc0V2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wg
Y2FuY2VsYWJsZUFyZywKICAgICAgICAgYm9vbCBsZW5ndGhDb21wdXRhYmxlQXJnLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbG9hZGVkQXJnLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxBcmcpOwpAQCAt
NTEsNiArNjMsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgUHJvZ3Jlc3NFdmVudCgpOwog
ICAgIFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGxlbmd0aENv
bXB1dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbCk7CisgICAgUHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0
IFByb2dyZXNzRXZlbnRJbml0Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzUHJv
Z3Jlc3NFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qcm9ncmVzc0V2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
UHJvZ3Jlc3NFdmVudC5pZGwJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1Byb2dyZXNzRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNywxMCBAQCBtb2R1bGUg
ZXZlbnRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25h
bEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29u
c3RydWN0RnVuY3Rpb24sCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAgIEN1c3Rv
bUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBQcm9ncmVzc0V2ZW50IDogRXZlbnQgewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsZW5ndGhDb21wdXRhYmxlOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVUlFdmVudC5jcHAJKHJldmlzaW9uIDkwNDA0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VJ
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNywxMiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK1VJRXZlbnRJbml0OjpVSUV2ZW50SW5pdCgpCisgICAgOiBkZXRhaWwoMCkK
K3sKK30KKworCiBVSUV2ZW50OjpVSUV2ZW50KCkKICAgICA6IG1fZGV0YWlsKDApCiB7CkBAIC0z
OSw2ICs0NSwxMyBAQCBVSUV2ZW50OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlCiB7
CiB9CiAKK1VJRXZlbnQ6OlVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBV
SUV2ZW50SW5pdCYgaW5pdGFsaXplcikKKyAgICA6IEV2ZW50KHR5cGUsIGluaXRhbGl6ZXIpCisg
ICAgLCBtX3ZpZXcoaW5pdGFsaXplci52aWV3KQorICAgICwgbV9kZXRhaWwoaW5pdGFsaXplci5k
ZXRhaWwpCit7Cit9CisKIFVJRXZlbnQ6On5VSUV2ZW50KCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VJ
RXZlbnQuaAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogCisgICAgc3RydWN0IFVJRXZl
bnRJbml0IDogcHVibGljIEV2ZW50SW5pdCB7CisgICAgICAgIFVJRXZlbnRJbml0KCk7CisKKyAg
ICAgICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldzsKKyAgICAgICAgaW50IGRldGFpbDsKKyAg
ICB9OworCiAgICAgY2xhc3MgVUlFdmVudCA6IHB1YmxpYyBFdmVudCB7CiAgICAgcHVibGljOgog
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVSUV2ZW50PiBjcmVhdGUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVJRXZlbnQpOwogICAgICAgICB9CisKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VUlFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0
cmFjdFZpZXc+IHZpZXcsIGludCBkZXRhaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVUlFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcs
IGRldGFpbCkpOwogICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VUlFdmVu
dD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgVUlFdmVudEluaXQmIGlu
aXRpYWxpemVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVJ
RXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwg
flVJRXZlbnQoKTsKIAogICAgICAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0
cmFjdFZpZXc+LCBpbnQgZGV0YWlsKTsKQEAgLTY0LDYgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgVUlFdmVudCgpOwogICAgICAgICBVSUV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBpbnQgZGV0YWlsKTsKKyAgICAgICAgVUlFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFVJRXZlbnRJbml0Jik7CiAKICAgICBw
cml2YXRlOgogICAgICAgICBSZWZQdHI8QWJzdHJhY3RWaWV3PiBtX3ZpZXc7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vVUlFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1VJRXZlbnQuaWRsCShyZXZpc2lvbiA5MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9V
SUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQCBtb2R1bGUgZXZlbnRz
IHsKICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICAgIGludGVyZmFjZSBbCiAg
ICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25z
dHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIFVJRXZlbnQg
OiBFdmVudCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01XaW5kb3cgICAgICAgICAg
ICB2aWV3OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICAgICAgICAgICAgICAg
ZGV0YWlsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmNw
cAkocmV2aXNpb24gOTA0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDE1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKK1VJRXZlbnRXaXRoS2V5U3RhdGVJbml0OjpVSUV2ZW50V2l0aEtleVN0
YXRlSW5pdCgpCisgICAgOiBjdHJsS2V5KGZhbHNlKQorICAgICwgYWx0S2V5KGZhbHNlKSAKKyAg
ICAsIHNoaWZ0S2V5KGZhbHNlKQorICAgICwgbWV0YUtleShmYWxzZSkKK3sKK30KKworCiBVSUV2
ZW50V2l0aEtleVN0YXRlKiBmaW5kRXZlbnRXaXRoS2V5U3RhdGUoRXZlbnQqIGV2ZW50KQogewog
ICAgIGZvciAoRXZlbnQqIGUgPSBldmVudDsgZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5oCShyZXZpc2lvbiA5
MDQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDE2IEBACiAjaW5jbHVkZSAiVUlFdmVudC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKKyAgICBzdHJ1Y3QgVUlFdmVudFdpdGhLZXlTdGF0ZUlu
aXQgOiBwdWJsaWMgVUlFdmVudEluaXQgeworICAgICAgICBVSUV2ZW50V2l0aEtleVN0YXRlSW5p
dCgpOworCisgICAgICAgIGJvb2wgY3RybEtleTsgCisgICAgICAgIGJvb2wgYWx0S2V5OworICAg
ICAgICBib29sIHNoaWZ0S2V5OyAKKyAgICAgICAgYm9vbCBtZXRhS2V5OworICAgIH07CisKICAg
ICBjbGFzcyBVSUV2ZW50V2l0aEtleVN0YXRlIDogcHVibGljIFVJRXZlbnQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9CkBA
IC01NCw2ICs2MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCisgICAgICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBjb25zdCBVSUV2ZW50V2l0aEtleVN0YXRlSW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgICAgICAg
ICA6IFVJRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpCisgICAgICAgICAgICAsIG1fY3RybEtleShp
bml0aWFsaXplci5jdHJsS2V5KQorICAgICAgICAgICAgLCBtX2FsdEtleShpbml0aWFsaXplci5h
bHRLZXkpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoaW5pdGlhbGl6ZXIuc2hpZnRLZXkpCisg
ICAgICAgICAgICAsIG1fbWV0YUtleShpbml0aWFsaXplci5tZXRhS2V5KQorICAgICAgICB7Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBFeHBvc2UgdGhlc2Ugc28gaW5pdCBmdW5jdGlvbnMgY2Fu
IHNldCB0aGVtLgogICAgICAgICBib29sIG1fY3RybEtleSA6IDE7CiAgICAgICAgIGJvb2wgbV9h
bHRLZXkgOiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gOTA0
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTUxMywyOSArNTEzLDMxIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUg
W0pTQ0N1c3RvbUdldHRlcixDb25kaXRpb25hbD1XRUJfQVVESU8sRW5hYmxlZEF0UnVudGltZV0g
QXVkaW9Db250ZXh0Q29uc3RydWN0b3Igd2Via2l0QXVkaW9Db250ZXh0OyAvLyBVc2FibGUgd2l0
aCBuZXcgb3BlcmF0b3IKICAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1XRUJfQVVESU9d
IEF1ZGlvUGFubmVyTm9kZUNvbnN0cnVjdG9yIHdlYmtpdEF1ZGlvUGFubmVyTm9kZTsgLy8gTmVl
ZGVkIGZvciBwYW5uaW5nIG1vZGVsIGNvbnN0YW50cwogCi0gICAgICAgIGF0dHJpYnV0ZSBFdmVu
dENvbnN0cnVjdG9yIEV2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgQmVmb3JlTG9hZEV2ZW50Q29u
c3RydWN0b3IgQmVmb3JlTG9hZEV2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgSGFzaENoYW5nZUV2
ZW50Q29uc3RydWN0b3IgSGFzaENoYW5nZUV2ZW50OworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRD
b25zdHJ1Y3RvciBFdmVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAg
ICBhdHRyaWJ1dGUgQ3VzdG9tRXZlbnRDb25zdHJ1Y3RvciBDdXN0b21FdmVudDsgLy8gVXNhYmxl
IHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgQmVmb3JlTG9hZEV2ZW50
Q29uc3RydWN0b3IgQmVmb3JlTG9hZEV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJh
dG9yCisgICAgICAgIGF0dHJpYnV0ZSBVSUV2ZW50Q29uc3RydWN0b3IgVUlFdmVudDsgLy8gVXNh
YmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgUHJvZ3Jlc3NFdmVu
dENvbnN0cnVjdG9yIFByb2dyZXNzRXZlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0
b3IKKyAgICAgICAgYXR0cmlidXRlIE1vdXNlRXZlbnRDb25zdHJ1Y3RvciBNb3VzZUV2ZW50OyAv
LyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCiAgICAgICAgIGF0dHJpYnV0ZSBLZXlib2Fy
ZEV2ZW50Q29uc3RydWN0b3IgS2V5Ym9hcmRFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIE1vdXNl
RXZlbnRDb25zdHJ1Y3RvciBNb3VzZUV2ZW50OworCisgICAgICAgIGF0dHJpYnV0ZSBXaGVlbEV2
ZW50Q29uc3RydWN0b3IgV2hlZWxFdmVudDsKKyAgICAgICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVu
dENvbnN0cnVjdG9yIE1lc3NhZ2VFdmVudDsKKyAgICAgICAgYXR0cmlidXRlIEhhc2hDaGFuZ2VF
dmVudENvbnN0cnVjdG9yIEhhc2hDaGFuZ2VFdmVudDsKICAgICAgICAgYXR0cmlidXRlIE11dGF0
aW9uRXZlbnRDb25zdHJ1Y3RvciBNdXRhdGlvbkV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgT3Zl
cmZsb3dFdmVudENvbnN0cnVjdG9yIE92ZXJmbG93RXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBQ
YWdlVHJhbnNpdGlvbkV2ZW50Q29uc3RydWN0b3IgUGFnZVRyYW5zaXRpb25FdmVudDsKLSAgICAg
ICAgYXR0cmlidXRlIFByb2dyZXNzRXZlbnRDb25zdHJ1Y3RvciBQcm9ncmVzc0V2ZW50OwogICAg
ICAgICBhdHRyaWJ1dGUgVGV4dEV2ZW50Q29uc3RydWN0b3IgVGV4dEV2ZW50OwotICAgICAgICBh
dHRyaWJ1dGUgVUlFdmVudENvbnN0cnVjdG9yIFVJRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBX
ZWJLaXRBbmltYXRpb25FdmVudENvbnN0cnVjdG9yIFdlYktpdEFuaW1hdGlvbkV2ZW50OwogICAg
ICAgICBhdHRyaWJ1dGUgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Q29uc3RydWN0b3IgV2ViS2l0VHJh
bnNpdGlvbkV2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgV2hlZWxFdmVudENvbnN0cnVjdG9yIFdo
ZWVsRXZlbnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNz
YWdlRXZlbnQ7CisKICAgICAgICAgYXR0cmlidXRlIEV2ZW50RXhjZXB0aW9uQ29uc3RydWN0b3Ig
RXZlbnRFeGNlcHRpb247CiAKICAgICAgICAgYXR0cmlidXRlIFdlYktpdENTU0tleWZyYW1lUnVs
ZUNvbnN0cnVjdG9yIFdlYktpdENTU0tleWZyYW1lUnVsZTsKICAgICAgICAgYXR0cmlidXRlIFdl
YktpdENTU0tleWZyYW1lc1J1bGVDb25zdHJ1Y3RvciBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOwog
CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBXZWJLaXRDU1NNYXRyaXhDb25z
dHJ1Y3RvciBXZWJLaXRDU1NNYXRyaXg7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IK
LQotICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gV2ViS2l0UG9pbnRDb25zdHJ1
Y3RvciBXZWJLaXRQb2ludDsgLy8gVXNhYmxlIHdpdGggbmV3IHRoZSBvcGVyYXRvcgorICAgICAg
ICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gV2ViS2l0UG9pbnRDb25zdHJ1Y3RvciBXZWJL
aXRQb2ludDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgogCiAgICAgICAgIGF0dHJp
YnV0ZSBDbGlwYm9hcmRDb25zdHJ1Y3RvciBDbGlwYm9hcmQ7CiAKQEAgLTU0OCw3ICs1NTAsNyBA
QCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFJhbmdlRXhjZXB0aW9uQ29uc3Ry
dWN0b3IgUmFuZ2VFeGNlcHRpb247CiAKICNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKLSAgICAgICAg
YXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRT
b3VyY2U7IC8vIFVzYWJsZSB3aXRoIG5ldyB0aGUgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRl
IFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7IC8v
IFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKICNlbmRpZgogCiAgICAgICAgIC8vIE1vemls
bGEgaGFzIGEgc2VwYXJhdGUgWE1MRG9jdW1lbnQgb2JqZWN0IGZvciBYTUwgZG9jdW1lbnRzLiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101345</attachid>
            <date>2011-07-19 11:03:03 -0700</date>
            <delta_ts>2011-08-28 16:30:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63878-20110719110302.patch</filename>
            <type>text/plain</type>
            <size>99838</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDctMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY29uc3RydWN0
b3Igc3ludGF4IGZvciBFdmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1tSZWFsIENoYW5nZUxvZyByZXF1aXJlZC5dXQorCiAyMDExLTA3LTE5ICBB
Ymhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ3Jhc2ggd2hl
biByZW1vdmluZyB1bnJlbmRlcmVyZWQgbm9kZXMgaW4gcmVwbGFjZW1lbnQgZnJhZ21lbnQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDkxMjcxKQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjM5LDYg
KzYzOSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmggXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dlbmVyaWMvRXZlbnRDb25zdHJ1Y3RvcnMuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9HZW5lcmljQmluZGluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBcCkBAIC03MTIsNiArNzEzLDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VudHJ5
Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbnRyeVN5bmNDdXN0
b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudENvbnN0cnVjdG9ycy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMTcxNCw2ICsxNzE0LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy9n
ZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmlj
L0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmlj
L0JpbmRpbmdTZWN1cml0eUJhc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9F
dmVudENvbnN0cnVjdG9ycy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0dlbmVy
aWNCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oJywKQEAgLTE4MDIsNiArMTgwMyw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvSlNFbnRyeVN5bmNDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9KU0Vycm9ySGFuZGxlci5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMu
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlz
aW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTI3Myw2ICsyNzMsNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRD
dXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcCBcCiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcCBcCisgICAgICAgIGJpbmRpbmdz
L2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVu
dEN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwK
ICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgXApAQCAtMTIyNSw2
ICsxMjI2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmggXAogICAgIGJpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmggXAogICAgIGJpbmRpbmdz
L2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2suaCBcCisgICAgYmluZGluZ3MvZ2VuZXJpYy9FdmVu
dENvbnN0cnVjdG9ycy5oIFwKICAgICBiaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaAogCiB2OCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTc5MzMsNiArNTc5MzMs
MTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGJpbmRpbmdzXGdlbmVyaWNcRXZlbnRDb25zdHJ1Y3RvcnMuaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGdlbmVyaWNc
R2VuZXJpY0JpbmRpbmcuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTYwNTQ1LDYgKzYwNTQ5
LDU4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCIKKwkJCQkJPgorCQkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJl
bGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZl
bnRDdXN0b20uY3BwIgogCQkJCQk+CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4NjEsNiArNDg2MSw3IEBACiAJCUJDMjc1Qjgx
MTFDNUQyQjQwMEM5MjA2QyAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1QjgwMTFDNUQyQjQwMEM5MjA2
QyAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyNzVDQjMxMUM1RTg1QzAw
QzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJy
YXlCdWZmZXJDdXN0b20uY3BwICovOyB9OwogCQlCQzJDQzhERjBGMzI4ODEwMDBBOURGMjYgLyog
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzJDQzhERTBGMzI4ODEwMDBBOURGMjYgLyogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQkMyRTY5QTkxM0Q1Rjc0QzAwOTBFOUMxIC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTY5QTgxM0Q1
Rjc0MTAwOTBFOUMxIC8qIEpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwICovOyB9OwogCQlCQzJFRDU1
NTBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkVENTU0MEM2QjlCRDMwMDkyMEJGRiAv
KiBKU0VsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlCQzJFRDZCQzBDNkJEMkYwMDA5MjBCRkYg
LyogSlNBdHRyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICov
OyB9OwogCQlCQzJFRDdBNTBDNkMwRjM2MDA5MjBCRkYgLyogSlNIVE1MRnJhbWVFbGVtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MkVEN0E0MEM2QzBGMzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwICov
OyB9OwpAQCAtMTE0NzUsNiArMTE0NzYsOCBAQAogCQlCQzI3NUI4MDExQzVEMkI0MDBDOTIwNkMg
LyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlckN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNDOERFMEYzMjg4MTAwMEE5
REYyNiAvKiBSZW5kZXJPYmplY3RDaGlsZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyT2JqZWN0Q2hpbGRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDMkU2OUE2MTNENUY3MUIwMDkwRTlDMSAvKiBFdmVudENvbnN0cnVjdG9ycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFdmVudENvbnN0cnVjdG9ycy5oOyBwYXRo
ID0gZ2VuZXJpYy9FdmVudENvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzJFNjlBODEzRDVGNzQxMDA5MEU5QzEgLyogSlNFdmVudENvbnN0cnVjdG9ycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0V2ZW50Q29uc3RydWN0b3Jz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRUQ1NTQwQzZCOUJEMzAwOTIw
QkZGIC8qIEpTRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0VsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXR0ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDMkVEN0E0MEM2QzBGMzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4MjQ5LDYgKzE4MjUyLDcgQEAKIAkJCQlBNjIyQThGNTEyMkM0NEE2MDBBNzg1QjMgLyog
QmluZGluZ1NlY3VyaXR5LmggKi8sCiAJCQkJQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJp
bmRpbmdTZWN1cml0eUJhc2UuY3BwICovLAogCQkJCUE2MjJBOEY3MTIyQzQ0QTYwMEE3ODVCMyAv
KiBCaW5kaW5nU2VjdXJpdHlCYXNlLmggKi8sCisJCQkJQkMyRTY5QTYxM0Q1RjcxQjAwOTBFOUMx
IC8qIEV2ZW50Q29uc3RydWN0b3JzLmggKi8sCiAJCQkJQTYyMkE4RjkxMjJDNDRBNjAwQTc4NUIz
IC8qIEdlbmVyaWNCaW5kaW5nLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGdlbmVyaWM7CkBAIC0x
ODMxNSw2ICsxODMxOSw3IEBACiAJCQkJNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9N
V3JhcHBlci5oICovLAogCQkJCUYzRDQ2MTQ2MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFu
ZGxlci5jcHAgKi8sCiAJCQkJRjNENDYxNDcxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JIYW5k
bGVyLmggKi8sCisJCQkJQkMyRTY5QTgxM0Q1Rjc0MTAwOTBFOUMxIC8qIEpTRXZlbnRDb25zdHJ1
Y3RvcnMuY3BwICovLAogCQkJCUJDNjA5MDFFMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFy
Z2V0LmNwcCAqLywKIAkJCQlCQzYwOTAxRDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdl
dC5oICovLAogCQkJCTMzMTRBQ0U5MTA4OTIwODYwMDBGMEU1NiAvKiBKU0V4Y2VwdGlvbkJhc2Uu
Y3BwICovLApAQCAtMjU4ODIsNiArMjU4ODcsNyBAQAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAw
OERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ1QkZEMzEzQ0Y4MDkw
MDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk2OUIw
RjIxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQzJFNjlBOTEzRDVGNzRDMDA5MEU5QzEgLyogSlNFdmVudENvbnN0cnVj
dG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OTEzQTI0MTEzRDQ5RUJBMDBGNUIwNUMgLyog
SWRlbnRpZmllcnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ2VuZXJpYy9FdmVudENvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvRXZlbnRDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvRXZlbnRDb25zdHJ1Y3RvcnMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50
Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgRXZlbnRDb25zdHJ1Y3RvcnNfaAorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNkZWZpbmUgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9FVkVO
VChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElF
UywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKEV2ZW50KSBc
CisgICAgICAgIEZJTExfUFJPUEVSVFkoYnViYmxlcykgXAorICAgICAgICBGSUxMX1BST1BFUlRZ
KGNhbmNlbGFibGUpIFwKKyAgICBESUNUSU9OQVJZX0VORChFdmVudCkKKworI2RlZmluZSBJTlNU
QU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX0NVU1RPTV9FVkVOVChESUNUSU9OQVJZX1NUQVJU
LCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkg
XAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKEN1c3RvbUV2ZW50KSBcCisgICAgICAgIEZJ
TExfUEFSRU5UX1BST1BFUlRJRVMoRXZlbnQpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShkZXRh
aWwpIFwKKyAgICBESUNUSU9OQVJZX0VORChDdXN0b21FdmVudCkKKworI2RlZmluZSBJTlNUQU5U
SUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX1BST0dSRVNTX0VWRU5UKERJQ1RJT05BUllfU1RBUlQs
IERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBc
CisgICAgXAorICAgIERJQ1RJT05BUllfU1RBUlQoUHJvZ3Jlc3NFdmVudCkgXAorICAgICAgICBG
SUxMX1BBUkVOVF9QUk9QRVJUSUVTKEV2ZW50KSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkobGVu
Z3RoQ29tcHV0YWJsZSkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKGxvYWRlZCkgXAorICAgICAg
ICBGSUxMX1BST1BFUlRZKHRvdGFsKSBcCisgICAgRElDVElPTkFSWV9FTkQoUHJvZ3Jlc3NFdmVu
dCkKKworI2RlZmluZSBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX0JFRk9SRV9MT0FE
X0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9Q
RVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisgICAgXAorICAgIERJQ1RJT05BUllfU1RBUlQoQmVm
b3JlTG9hZEV2ZW50KSBcCisgICAgICAgIEZJTExfUEFSRU5UX1BST1BFUlRJRVMoRXZlbnQpIFwK
KyAgICAgICAgRklMTF9QUk9QRVJUWSh1cmwpIFwKKyAgICBESUNUSU9OQVJZX0VORChCZWZvcmVM
b2FkRXZlbnQpCisKKyNkZWZpbmUgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9VSV9F
VkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVS
VElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKFVJRXZl
bnQpIFwKKyAgICAgICAgRklMTF9QQVJFTlRfUFJPUEVSVElFUyhFdmVudCkgXAorICAgICAgICBG
SUxMX1BST1BFUlRZKHZpZXcpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShkZXRhaWwpIFwKKyAg
ICBESUNUSU9OQVJZX0VORChVSUV2ZW50KQorCisjZGVmaW5lIElOU1RBTlRJQVRfSU5JVF9DT05T
VFJVQ1RPUl9GT1JfTU9VU0VfRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQs
IEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBcCisgICAgRElD
VElPTkFSWV9TVEFSVChNb3VzZUV2ZW50KSBcCisgICAgICAgIEZJTExfUEFSRU5UX1BST1BFUlRJ
RVMoVUlFdmVudCkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKHNjcmVlblgpIFwKKyAgICAgICAg
RklMTF9QUk9QRVJUWShzY3JlZW5ZKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoY2xpZW50WCkg
XAorICAgICAgICBGSUxMX1BST1BFUlRZKGNsaWVudFkpIFwKKyAgICAgICAgRklMTF9QUk9QRVJU
WShjdHJsS2V5KSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoYWx0S2V5KSBcCisgICAgICAgIEZJ
TExfUFJPUEVSVFkoc2hpZnRLZXkpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShtZXRhS2V5KSBc
CisgICAgICAgIEZJTExfUFJPUEVSVFkoYnV0dG9uKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFko
cmVsYXRlZFRhcmdldCkgXAorICAgIERJQ1RJT05BUllfRU5EKE1vdXNlRXZlbnQpCisKKyNkZWZp
bmUgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9LRVlCT0FSRF9FVkVOVChESUNUSU9O
QVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9Q
Uk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKEtleWJvYXJkRXZlbnQpIFwK
KyAgICAgICAgRklMTF9QQVJFTlRfUFJPUEVSVElFUyhVSUV2ZW50KSBcCisgICAgICAgIEZJTExf
UFJPUEVSVFkoa2V5SWRlbnRpZmllcikgXAorICAgICAgICBGSUxMX1BST1BFUlRZKGtleUxvY2F0
aW9uKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoYWx0R3JhcGhLZXkpIFwKKyAgICBESUNUSU9O
QVJZX0VORChLZXlib2FyZEV2ZW50KQorCisjZGVmaW5lIElOU1RBTlRJQVRfSU5JVF9DT05TVFJV
Q1RPUl9GT1JfV0hFRUxfRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJ
TExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBcCisgICAgRElDVElP
TkFSWV9TVEFSVChXaGVlbEV2ZW50KSBcCisgICAgICAgIEZJTExfUEFSRU5UX1BST1BFUlRJRVMo
VUlFdmVudCkgXAorICAgIERJQ1RJT05BUllfRU5EKFdoZWVsRXZlbnQpCisKKyNkZWZpbmUgSU5T
VEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9URVhUX0VWRU5UKERJQ1RJT05BUllfU1RBUlQs
IERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBc
CisgICAgXAorICAgIERJQ1RJT05BUllfU1RBUlQoVGV4dEV2ZW50KSBcCisgICAgICAgIEZJTExf
UEFSRU5UX1BST1BFUlRJRVMoVUlFdmVudCkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKGRhdGEp
IFwKKyAgICBESUNUSU9OQVJZX0VORChUZXh0RXZlbnQpCisKKyNkZWZpbmUgSU5TVEFOVElBVF9J
TklUX0NPTlNUUlVDVE9SX0ZPUl9DT01QT1NJVElPTl9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBE
SUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAor
ICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKENvbXBvc2l0aW9uRXZlbnQpIFwKKyAgICAgICAg
RklMTF9QQVJFTlRfUFJPUEVSVElFUyhVSUV2ZW50KSBcCisgICAgICAgIEZJTExfUFJPUEVSVFko
ZGF0YSkgXAorICAgIERJQ1RJT05BUllfRU5EKENvbXBvc2l0aW9uRXZlbnQpCisKKyNkZWZpbmUg
SU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9IQVNIX0NIQU5HRV9FVkVOVChESUNUSU9O
QVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9Q
Uk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKEhhc2hDaGFuZ2VFdmVudCkg
XAorICAgICAgICBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTKEV2ZW50KSBcCisgICAgICAgIEZJTExf
UFJPUEVSVFkob2xkVVJMKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkobmV3VVJMKSBcCisgICAg
RElDVElPTkFSWV9FTkQoSGFzaENoYW5nZUV2ZW50KQorCisjZGVmaW5lIElOU1RBTlRJQVRfSU5J
VF9DT05TVFJVQ1RPUl9GT1JfTUVTU0FHRV9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9O
QVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwK
KyAgICBESUNUSU9OQVJZX1NUQVJUKE1lc3NhZ2VFdmVudCkgXAorICAgICAgICBGSUxMX1BBUkVO
VF9QUk9QRVJUSUVTKEV2ZW50KSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoZGF0YSkgXAorICAg
ICAgICBGSUxMX1BST1BFUlRZKG9yaWdpbikgXAorICAgICAgICBGSUxMX1BST1BFUlRZKGxhc3RF
dmVudElkKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoc291cmNlKSBcCisgICAgRElDVElPTkFS
WV9FTkQoTWVzc2FnZUV2ZW50KQorCisjZGVmaW5lIElOU1RBTlRJQVRfSU5JVF9DT05TVFJVQ1RP
Ul9GT1JfV0VCS0lUX0FOSU1BVElPTl9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZ
X0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAg
ICBESUNUSU9OQVJZX1NUQVJUKFdlYktpdEFuaW1hdGlvbkV2ZW50KSBcCisgICAgICAgIEZJTExf
UEFSRU5UX1BST1BFUlRJRVMoRXZlbnQpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShhbmltYXRp
b25OYW1lKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoZWxhcHNlZFRpbWUpIFwKKyAgICBESUNU
SU9OQVJZX0VORChXZWJLaXRBbmltYXRpb25FdmVudCkKKworI2RlZmluZSBJTlNUQU5USUFUX0lO
SVRfQ09OU1RSVUNUT1JfRk9SX1dFQktJVF9UUkFOU0lUSU9OX0VWRU5UKERJQ1RJT05BUllfU1RB
UlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZ
KSBcCisgICAgXAorICAgIERJQ1RJT05BUllfU1RBUlQoV2ViS2l0VHJhbnNpdGlvbkV2ZW50KSBc
CisgICAgICAgIEZJTExfUEFSRU5UX1BST1BFUlRJRVMoRXZlbnQpIFwKKyAgICAgICAgRklMTF9Q
Uk9QRVJUWShwcm9wZXJ0eU5hbWUpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShlbGFwc2VkVGlt
ZSkgXAorICAgIERJQ1RJT05BUllfRU5EKFdlYktpdFRyYW5zaXRpb25FdmVudCkKKworI2RlZmlu
ZSBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX0VSUk9SX0VWRU5UKERJQ1RJT05BUllf
U1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BF
UlRZKSBcCisgICAgXAorICAgIERJQ1RJT05BUllfU1RBUlQoRXJyb3JFdmVudCkgXAorICAgICAg
ICBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTKEV2ZW50KSBcCisgICAgICAgIEZJTExfUFJPUEVSVFko
bWVzc2FnZSkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKGZpbGVOYW1lKSBcCisgICAgICAgIEZJ
TExfUFJPUEVSVFkobGluZW5vKSBcCisgICAgRElDVElPTkFSWV9FTkQoRXJyb3JFdmVudCkKKwor
I2RlZmluZSBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX1BBR0VfVFJBTlNJVElPTl9F
VkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVS
VElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJUKFBhZ2VU
cmFuc2l0aW9uRXZlbnQpIFwKKyAgICAgICAgRklMTF9QQVJFTlRfUFJPUEVSVElFUyhFdmVudCkg
XAorICAgICAgICBGSUxMX1BST1BFUlRZKHBlcnNpc3RlZCkgXAorICAgIERJQ1RJT05BUllfRU5E
KFBhZ2VUcmFuc2l0aW9uRXZlbnQpCisKKyNkZWZpbmUgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVD
VE9SX0ZPUl9QT1BfU1RBVEVfRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQs
IEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBcCisgICAgRElD
VElPTkFSWV9TVEFSVChQb3BTdGF0ZUV2ZW50KSBcCisgICAgICAgIEZJTExfUEFSRU5UX1BST1BF
UlRJRVMoRXZlbnQpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShzdGF0ZSkgXAorICAgIERJQ1RJ
T05BUllfRU5EKFBvcFN0YXRlRXZlbnQpCisKKyNkZWZpbmUgSU5TVEFOVElBVF9JTklUX0NPTlNU
UlVDVE9SX0ZPUl9PVkVSRkxPV19FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VO
RCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAgICBE
SUNUSU9OQVJZX1NUQVJUKE92ZXJmbG93RXZlbnQpIFwKKyAgICAgICAgRklMTF9QQVJFTlRfUFJP
UEVSVElFUyhFdmVudCkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKG9yaWVudCkgXAorICAgICAg
ICBGSUxMX1BST1BFUlRZKGhvcml6b250YWxPdmVyZmxvdykgXAorICAgICAgICBGSUxMX1BST1BF
UlRZKHZlcnRpY2FsT3ZlcmZsb3cpIFwKKyAgICBESUNUSU9OQVJZX0VORChPdmVyZmxvd0V2ZW50
KQorCisjZGVmaW5lIElOU1RBTlRJQVRfSU5JVF9DT05TVFJVQ1RPUl9GT1JfTVVUQVRJT05fRVZF
TlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJ
RVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBcCisgICAgRElDVElPTkFSWV9TVEFSVChNdXRhdGlv
bkV2ZW50KSBcCisgICAgICAgIEZJTExfUEFSRU5UX1BST1BFUlRJRVMoRXZlbnQpIFwKKyAgICAg
ICAgRklMTF9QUk9QRVJUWShyZWxhdGVkTm9kZSkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKHBy
ZXZWYWx1ZSkgXAorICAgICAgICBGSUxMX1BST1BFUlRZKG5ld1ZhbHVlKSBcCisgICAgICAgIEZJ
TExfUFJPUEVSVFkoYXR0ck5hbWUpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShhdHRyQ2hhbmdl
KSBcCisgICAgRElDVElPTkFSWV9FTkQoTXV0YXRpb25FdmVudCkKKworCisKKyNpZiBFTkFCTEUo
V0VCX1NPQ0tFVFMpCisKKyNkZWZpbmUgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9D
TE9TRV9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRf
UFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIFwKKyAgICBESUNUSU9OQVJZX1NUQVJU
KENsb3NlRXZlbnQpIFwKKyAgICAgICAgRklMTF9QQVJFTlRfUFJPUEVSVElFUyhFdmVudCkgXAor
ICAgICAgICBGSUxMX1BST1BFUlRZKHdhc0NsZWFuKSBcCisgICAgRElDVElPTkFSWV9FTkQoQ2xv
c2VFdmVudCkKKworI2Vsc2UKKworI2RlZmluZSBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1Jf
Rk9SX0NMT1NFX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BB
UkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKQorCisjZW5kaWYKKworCisjZGVmaW5lIElO
U1RBTlRJQVRfRVZFTlRfSU5JVF9DT05TVFJVQ1RPUlMoRElDVElPTkFSWV9TVEFSVCwgRElDVElP
TkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJ
TlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJ
Q1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisg
ICAgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9DVVNUT01fRVZFTlQoRElDVElPTkFS
WV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJP
UEVSVFkpIFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX1BST0dSRVNTX0VW
RU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJU
SUVTLCBGSUxMX1BST1BFUlRZKSBcCisgICAgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZP
Ul9CRUZPUkVfTE9BRF9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklM
TF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIElOU1RBTlRJQVRfSU5J
VF9DT05TVFJVQ1RPUl9GT1JfVUlfRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9F
TkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJTlNUQU5U
SUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX01PVVNFX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJ
Q1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisg
ICAgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9LRVlCT0FSRF9FVkVOVChESUNUSU9O
QVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9Q
Uk9QRVJUWSkgXAorICAgIElOU1RBTlRJQVRfSU5JVF9DT05TVFJVQ1RPUl9GT1JfV0hFRUxfRVZF
TlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJ
RVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9S
X1RFWFRfRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5U
X1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09OU1RS
VUNUT1JfRk9SX0NPTVBPU0lUSU9OX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllf
RU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisgICAgSU5TVEFO
VElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9IQVNIX0NIQU5HRV9FVkVOVChESUNUSU9OQVJZX1NU
QVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJU
WSkgXAorICAgIElOU1RBTlRJQVRfSU5JVF9DT05TVFJVQ1RPUl9GT1JfTUVTU0FHRV9FVkVOVChE
SUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywg
RklMTF9QUk9QRVJUWSkgXAorICAgIElOU1RBTlRJQVRfSU5JVF9DT05TVFJVQ1RPUl9GT1JfV0VC
S0lUX0FOSU1BVElPTl9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklM
TF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIElOU1RBTlRJQVRfSU5J
VF9DT05TVFJVQ1RPUl9GT1JfV0VCS0lUX1RSQU5TSVRJT05fRVZFTlQoRElDVElPTkFSWV9TVEFS
VCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkp
IFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX0VSUk9SX0VWRU5UKERJQ1RJ
T05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxM
X1BST1BFUlRZKSBcCisgICAgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9QQUdFX1RS
QU5TSVRJT05fRVZFTlQoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFS
RU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09O
U1RSVUNUT1JfRk9SX1BPUF9TVEFURV9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZ
X0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorICAgIElOU1RB
TlRJQVRfSU5JVF9DT05TVFJVQ1RPUl9GT1JfT1ZFUkZMT1dfRVZFTlQoRElDVElPTkFSWV9TVEFS
VCwgRElDVElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkp
IFwKKyAgICBJTlNUQU5USUFUX0lOSVRfQ09OU1RSVUNUT1JfRk9SX01VVEFUSU9OX0VWRU5UKERJ
Q1RJT05BUllfU1RBUlQsIERJQ1RJT05BUllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBG
SUxMX1BST1BFUlRZKSBcCisgICAgSU5TVEFOVElBVF9JTklUX0NPTlNUUlVDVE9SX0ZPUl9DTE9T
RV9FVkVOVChESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZX0VORCwgRklMTF9QQVJFTlRfUFJP
UEVSVElFUywgRklMTF9QUk9QRVJUWSkgXAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFdmVudENvbnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDkxMjcxKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0b20uY3Bw
IgogI2luY2x1ZGUgIkpTRWxlbWVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNFcnJvckhhbmRs
ZXIuY3BwIgorI2luY2x1ZGUgIkpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwIgogI2luY2x1ZGUgIkpT
RXZlbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5jcHAiCiAjaW5jbHVk
ZSAiSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJFdmVudENvbnN0cnVjdG9ycy5oIgorCisjaW5jbHVkZSAiQmVmb3JlTG9hZEV2
ZW50LmgiCisjaW5jbHVkZSAiQ29tcG9zaXRpb25FdmVudC5oIgorI2luY2x1ZGUgIkN1c3RvbUV2
ZW50LmgiCisjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgorI2luY2x1ZGUgIkhhc2hDaGFuZ2VFdmVu
dC5oIgorI2luY2x1ZGUgIkpTQmVmb3JlTG9hZEV2ZW50LmgiCisjaW5jbHVkZSAiSlNDb21wb3Np
dGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiSlNDdXN0b21FdmVudC5oIgorI2luY2x1ZGUgIkpTRE9N
V2luZG93LmgiCisjaW5jbHVkZSAiSlNFcnJvckV2ZW50LmgiCisjaW5jbHVkZSAiSlNFdmVudC5o
IgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJKU0hhc2hDaGFuZ2VFdmVu
dC5oIgorI2luY2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZUV2
ZW50LmgiCisjaW5jbHVkZSAiSlNNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiSlNNdXRhdGlvbkV2
ZW50LmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVkZSAiSlNPdmVyZmxvd0V2ZW50Lmgi
CisjaW5jbHVkZSAiSlNQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiSlNQb3BTdGF0
ZUV2ZW50LmgiCisjaW5jbHVkZSAiSlNQcm9ncmVzc0V2ZW50LmgiCisjaW5jbHVkZSAiSlNUZXh0
RXZlbnQuaCIKKyNpbmNsdWRlICJKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAi
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJKU1doZWVsRXZlbnQuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5j
bHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgIlBvcFN0YXRlRXZlbnQuaCIKKyNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCisjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBbmltYXRpb25FdmVudC5oIgorI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5o
IgorI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisK
KyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjaW5jbHVkZSAiQ2xvc2VFdmVudC5oIgorI2luY2x1
ZGUgIkpTQ2xvc2VFdmVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgYm9vbCYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHZhbHVl
LnRvQm9vbGVhbihleGVjKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgaW50JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gdmFs
dWUudG9JbnQzMihleGVjKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIHJlc3VsdCkKK3sKKyAgICByZXN1bHQg
PSB2YWx1ZS50b1VJbnQzMihleGVjKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgc2hvcnQmIHJlc3VsdCkKK3sK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGNvcnJlY3QgY29u
dmVyc2lvbiBmb3IgdW5zaWduZWQgc2hvcnQKKyAgICAvLyBhY2NvcmRpbmcgdG8gV2ViSURMLgor
ICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS50b1VJbnQzMihl
eGVjKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGxvbmcgbG9uZyYgcmVzdWx0KQoreworICAgIC8vIEZJWE1F
OiBJcyB0aGlzIGNvbnZlcnNpb24gY29ycmVjdD8gSmF2YVNjcmlwdCBjYW4ndCBhY3R1YWxseSBy
ZXByZXNlbnQKKyAgICAvLyB0aGUgZnVsbCA2NC1iaXQgcmFuZ2Ugb2YgdW5zaWduZWQgbG9uZyBs
b25nLgorICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odmFsdWUu
dG9JbnRlZ2VyKGV4ZWMpKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0g
dmFsdWUudG9OdW1iZXIoZXhlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHJlc3Vs
dCA9IHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFNjcmlwdFZh
bHVlJiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiByZXN1bHQp
Cit7CisgICAgcmVzdWx0ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFs
dWUpOworfQorCitzdGF0aWMgdm9pZCBjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2
YWx1ZSwgUmVmUHRyPERPTVdpbmRvdz4mIHJlc3VsdCkKK3sKKyAgICByZXN1bHQgPSB0b0RPTVdp
bmRvdyh2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8RXZlbnRUYXJnZXQ+JiByZXN1bHQpCit7CisgICAgcmVzdWx0
ID0gdG9FdmVudFRhcmdldCh2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQgPSB0b05vZGUodmFsdWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0Pgor
c3RhdGljIGJvb2wgdHJ5R2V0UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogaW5p
dGlhbGl6ZXJPYmplY3QsIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgUmVzdWx0JiByZXN1bHQp
Cit7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAg
UHJvcGVydHlTbG90IHNsb3QoaW5pdGlhbGl6ZXJPYmplY3QpOworICAgIGlmIChpbml0aWFsaXpl
ck9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVy
KTsKKyAgICAgICAgCisgICAgICAgIGNvbnZlcnRWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0KTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBOb3QgYWxsIGNvbnZlcnNpb25zIHJlcXVpcmUg
dGhpcyBleGNlcHRpb24gY2hlY2suCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN0cnVjdG9yLCB0eXBlbmFtZSBFdmVudFR5cGUs
IHR5cGVuYW1lIEV2ZW50SW5pdFR5cGU+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0
SlNFdmVudFdpdGhJbml0aWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgKCpmaWxsZXIpKEV2
ZW50SW5pdFR5cGUmLCBFeGVjU3RhdGUqLCBKU09iamVjdCopKQoreworICAgIENvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUo
KSk7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25Db250ZXh0ID0ganND
b25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghZXhlY3V0aW9u
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSZWZlcmVu
Y2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBp
cyB1bmF2YWlsYWJsZSIpKTsKKworICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSB1c3RyaW5n
VG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKworICAgIEV2ZW50SW5pdFR5cGUgZXZlbnRJbml0OworCisgICAgSlNW
YWx1ZSBpbml0aWFsaXplclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgaWYgKCFpbml0
aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgLy8gR2l2ZW4gdGhl
IGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgorICAgICAgICBK
U09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KGV4
ZWMpOworCisgICAgICAgIC8vIEF0dGVtcHQgdG8gZmlsbCBpbiB0aGUgRXZlbnRJbml0LgorICAg
ICAgICBpZiAoIWZpbGxlcihldmVudEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQor
CisgICAgUmVmUHRyPEV2ZW50VHlwZT4gZXZlbnQgPSBFdmVudFR5cGU6OmNyZWF0ZShldmVudFR5
cGUsIGV2ZW50SW5pdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBldmVudC5nZXQoKSkpOworfQorCisjZGVmaW5l
IERJQ1RJT05BUllfU1RBUlQoRXZlbnQpIFwKKyAgICBzdGF0aWMgYm9vbCBmaWxsIyNFdmVudCMj
SW5pdChFdmVudCMjSW5pdCYgZXZlbnRJbml0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBp
bml0aWFsaXplck9iamVjdCkgXAorICAgIHsKKworI2RlZmluZSBESUNUSU9OQVJZX0VORChFdmVu
dCkgXAorICAgICAgICByZXR1cm4gdHJ1ZTsgXAorICAgIH0gXAorICAgIFwKKyAgICBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTIyNFdmVudCMjQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpT
IyNFdmVudChFeGVjU3RhdGUqIGV4ZWMpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6ZXI8SlMjI0V2ZW50IyNDb25zdHJ1Y3RvciwgRXZlbnQs
IEV2ZW50IyNJbml0PihleGVjLCBmaWxsIyNFdmVudCMjSW5pdCk7IFwKKyAgICB9CisKKyNkZWZp
bmUgRklMTF9QQVJFTlRfUFJPUEVSVElFUyhwYXJlbnQpIFwKKyAgICBpZiAoIWZpbGwjI3BhcmVu
dCMjSW5pdChldmVudEluaXQsIGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KSkgXAorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyNkZWZpbmUgRklMTF9QUk9QRVJUWShwcm9wZXJ0eU5hbWUpIFwKKyAg
ICBpZiAoIXRyeUdldFByb3BlcnR5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0LCAjcHJvcGVydHlO
YW1lLCBldmVudEluaXQucHJvcGVydHlOYW1lKSkgXAorICAgICAgICByZXR1cm4gZmFsc2U7CisK
K0lOU1RBTlRJQVRfRVZFTlRfSU5JVF9DT05TVFJVQ1RPUlMoRElDVElPTkFSWV9TVEFSVCwgRElD
VElPTkFSWV9FTkQsIEZJTExfUEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2Fk
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50
LmgJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3N0cnVjdCBCZWZvcmVMb2FkRXZlbnRJbml0IDogcHVibGljIEV2ZW50SW5pdCB7Cisg
ICAgQmVmb3JlTG9hZEV2ZW50SW5pdCgpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyB1cmw7
Cit9OworCiBjbGFzcyBCZWZvcmVMb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KQEAgLTQxLDYgKzQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCZWZvcmVMb2FkRXZlbnQodXJsKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QmVmb3JlTG9hZEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBC
ZWZvcmVMb2FkRXZlbnRJbml0JiBpbml0YWxpemVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBCZWZvcmVMb2FkRXZlbnQodHlwZSwgaW5pdGFsaXplcikpOworICAgIH0KKwog
ICAgIHZvaWQgaW5pdEJlZm9yZUxvYWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYgdXJsKQogICAgIHsK
ICAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkKQEAgLTU3LDcgKzcwLDE0IEBAIHByaXZhdGU6CiAg
ICAgQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgdXJsKQogICAgICAgICA6IEV2ZW50KGV2
ZW50TmFtZXMoKS5iZWZvcmVsb2FkRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICAgICAsIG1fdXJs
KHVybCkKLSAgICB7fQorICAgIHsKKyAgICB9CisKKyAgICBCZWZvcmVMb2FkRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBCZWZvcmVMb2FkRXZlbnRJbml0JiBpbml0YWxpemVy
KQorICAgICAgICA6IEV2ZW50KHR5cGUsIGluaXRhbGl6ZXIpCisgICAgICAgICwgbV91cmwoaW5p
dGFsaXplci51cmwpCisgICAgeworICAgIH0KIAogICAgIFN0cmluZyBtX3VybDsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsOCBAQCBtb2R1bGUgZXZlbnRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAg
ICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1
Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIEJlZm9yZUxvYWRF
dmVudCA6IEV2ZW50IHsKICAgICAgICAgdm9pZCBpbml0QmVmb3JlTG9hZEV2ZW50KGluIERPTVN0
cmluZyB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiBj
YW5CdWJibGUsIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmNwcAko
cmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorQ29tcG9zaXRpb25FdmVudEluaXQ6OkNvbXBvc2l0aW9uRXZlbnRJbml0KCkKK3sKK30K
KwogQ29tcG9zaXRpb25FdmVudDo6Q29tcG9zaXRpb25FdmVudCgpCiB7CiB9CkBAIC00MSw2ICs0
NSwxMiBAQCBDb21wb3NpdGlvbkV2ZW50OjpDb21wb3NpdGlvbkV2ZW50KGNvbnN0CiB7CiB9CiAK
K0NvbXBvc2l0aW9uRXZlbnQ6OkNvbXBvc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBjb25zdCBDb21wb3NpdGlvbkV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBVSUV2
ZW50KHR5cGUsIGluaXRpYWxpemVyKQorICAgICwgbV9kYXRhKGluaXRpYWxpemVyLmRhdGEpCit7
Cit9CisKIENvbXBvc2l0aW9uRXZlbnQ6On5Db21wb3NpdGlvbkV2ZW50KCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAkocmV2aXNpb24gOTEyNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNiArMzEsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgc3RydWN0IENvbXBv
c2l0aW9uRXZlbnRJbml0IDogcHVibGljIFVJRXZlbnRJbml0IHsKKyAgICAgICAgQ29tcG9zaXRp
b25FdmVudEluaXQoKTsKKworICAgICAgICBTdHJpbmcgZGF0YTsKKyAgICB9OworCiAgICAgY2xh
c3MgQ29tcG9zaXRpb25FdmVudCA6IHB1YmxpYyBVSUV2ZW50IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGNyZWF0ZSgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29tcG9zaXRpb25FdmVudCk7CiAg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21wb3NpdGlvbkV2ZW50PiBj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4g
dmlldywgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgICAgICB7CiAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDb21wb3NpdGlvbkV2ZW50KHR5cGUsIHZpZXcsIGRhdGEpKTsKICAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbXBvc2l0aW9uRXZlbnQ+IGNyZWF0ZShj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IENvbXBvc2l0aW9uRXZlbnRJbml0JiBpbml0
aWFsaXplcikKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29tcG9z
aXRpb25FdmVudCh0eXBlLCBpbml0aWFsaXplcikpOworICAgICAgICB9CisKICAgICAgICAgdmly
dHVhbCB+Q29tcG9zaXRpb25FdmVudCgpOwogICAgIAogICAgICAgICB2b2lkIGluaXRDb21wb3Np
dGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LCBjb25zdCBTdHJpbmcmIGRhdGEp
OwpAQCAtNTIsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgQ29tcG9zaXRpb25FdmVudCgpOwogICAgICAgICBDb21wb3NpdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0
IFN0cmluZyYgZGF0YSk7CisgICAgICAgIENvbXBvc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBDb21wb3NpdGlvbkV2ZW50SW5pdCYpOwogCiAgICAgICAgIFN0cmlu
ZyBtX2RhdGE7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVu
dC5pZGwJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9u
RXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBAIG1vZHVsZSBldmVudHMg
ewogICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CiAgICAgaW50ZXJmYWNlIFsKICAg
ICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAorICAgICAgICBDYW5CZUNvbnN0
cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbgogICAgIF0gQ29tcG9zaXRp
b25FdmVudCA6IFVJRXZlbnQgewogCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgZGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkocmV2aXNpb24gOTEy
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxNCArMjYsMjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXN0
b21FdmVudC5oIgogCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK0N1c3RvbUV2ZW50SW5pdDo6Q3VzdG9tRXZlbnRJbml0KCkKK3sKKyAgICAvLyBGSVhN
RTogZGV0YWlsIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBudWxsLCBpdCBpcyBub3QgY2xlYXIg
aWYgdGhhdCBpcworICAgIC8vIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIG9mIFNjcmlwdFZh
bHVlIG9yIG5vdC4KK30KKworCiBDdXN0b21FdmVudDo6Q3VzdG9tRXZlbnQoKQogewogfQogCitD
dXN0b21FdmVudDo6Q3VzdG9tRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBD
dXN0b21FdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogRXZlbnQodHlwZSwgaW5pdGlhbGl6
ZXIpCisgICAgLCBtX2RldGFpbChpbml0aWFsaXplci5kZXRhaWwpCit7Cit9CisKIEN1c3RvbUV2
ZW50Ojp+Q3VzdG9tRXZlbnQoKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3Rv
bUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmgJ
KHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxNSBAQAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBDdXN0b21FdmVudEluaXQgOiBwdWJs
aWMgRXZlbnRJbml0IHsKKyAgICBDdXN0b21FdmVudEluaXQoKTsKKyAgICAKKyAgICBTY3JpcHRW
YWx1ZSBkZXRhaWw7Cit9OworCiBjbGFzcyBDdXN0b21FdmVudCA6IHB1YmxpYyBFdmVudCB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q3VzdG9tRXZlbnQoKTsKQEAgLTQxLDYgKzQ2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21FdmVudCk7CiAgICAgfQog
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IEN1c3RvbUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEN1c3RvbUV2ZW50KHR5cGUsIGluaXRpYWxpemVy
KSk7CisgICAgfQorCiAgICAgdm9pZCBpbml0Q3VzdG9tRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBTY3JpcHRWYWx1ZSBkZXRh
aWwpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tRXZlbnQoKSBjb25zdDsKQEAgLTQ5LDYg
KzU5LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEN1c3RvbUV2ZW50KCk7CisgICAgQ3Vz
dG9tRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBDdXN0b21FdmVudEluaXQm
IGluaXRpYWxpemVyKTsKIAogICAgIFNjcmlwdFZhbHVlIG1fZGV0YWlsOwogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBA
IG1vZHVsZSBldmVudHMgewogICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6CiAgICAg
aW50ZXJmYWNlIFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAorICAg
ICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbgog
ICAgIF0gQ3VzdG9tRXZlbnQgOiBFdmVudCB7CiAKICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NT2JqZWN0IGRldGFpbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHJldmlz
aW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxMiArMzEsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1
ZGUgIkVycm9yRXZlbnQuaCIKLQogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitFcnJvckV2ZW50SW5pdDo6RXJyb3JFdmVudEluaXQoKQoreworfQorCiBF
cnJvckV2ZW50OjpFcnJvckV2ZW50KCkKKyAgICA6IG1fbGluZU51bWJlcigwKQogewogfQogCkBA
IC00OCw2ICs1MiwxNCBAQCBFcnJvckV2ZW50OjpFcnJvckV2ZW50KGNvbnN0IFN0cmluZyYgbWVz
CiB7CiB9CiAKK0Vycm9yRXZlbnQ6OkVycm9yRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBjb25zdCBFcnJvckV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBp
bml0aWFsaXplcikKKyAgICAsIG1fbWVzc2FnZShpbml0aWFsaXplci5tZXNzYWdlKQorICAgICwg
bV9maWxlTmFtZShpbml0aWFsaXplci5maWxlTmFtZSkKKyAgICAsIG1fbGluZU51bWJlcihpbml0
aWFsaXplci5saW5lbm8pCit7Cit9CisKIEVycm9yRXZlbnQ6On5FcnJvckV2ZW50KCkKIHsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBzdHJ1Y3QgRXJyb3JFdmVudEluaXQgOiBw
dWJsaWMgRXZlbnRJbml0IHsKKyAgICAgICAgRXJyb3JFdmVudEluaXQoKTsKKyAgICAgICAgCisg
ICAgICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICBTdHJpbmcgZmlsZU5hbWU7CisgICAgICAg
IHVuc2lnbmVkIGxpbmVubzsKKyAgICB9OworCiAgICAgY2xhc3MgRXJyb3JFdmVudCA6IHB1Ymxp
YyBFdmVudCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFcnJvckV2
ZW50PiBjcmVhdGUoKQpAQCAtNDYsNiArNTQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVycm9yRXZlbnQobWVzc2Fn
ZSwgZmlsZU5hbWUsIGxpbmVOdW1iZXIpKTsKICAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFcnJvckV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25z
dCBFcnJvckV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRXJyb3JFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOworICAgICAg
ICB9CiAgICAgICAgIHZpcnR1YWwgfkVycm9yRXZlbnQoKTsKIAogICAgICAgICB2b2lkIGluaXRF
cnJvckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKQEAgLTU5LDYgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHByaXZhdGU6ICAgIAogICAgICAgICBFcnJvckV2ZW50KCk7CiAgICAgICAgIEVy
cm9yRXZlbnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCB1
bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICAgICAgRXJyb3JFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGNvbnN0IEVycm9yRXZlbnRJbml0Jik7CiAKICAgICAgICAgU3RyaW5nIG1fbWVz
c2FnZTsKICAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRXJyb3JFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vycm9y
RXZlbnQuaWRsCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQCBtb2R1bGUgZXZlbnRzIHsK
ICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAogICAgICAgICBM
ZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQs
CisgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uLAogICAgICAgICBOb1N0YXRpY1RhYmxl
cwogICAgIF0gRXJyb3JFdmVudCA6IEV2ZW50IHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShy
ZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDE1ICsyMiwyMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRXZlbnQuaCIKKwogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCi0KICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0V2ZW50SW5pdDo6RXZlbnRJbml0KCkKKyAgICA6
IGJ1YmJsZXMoZmFsc2UpCisgICAgLCBjYW5jZWxhYmxlKGZhbHNlKQoreworfQorCisKIEV2ZW50
OjpFdmVudCgpCiAgICAgOiBtX2NhbkJ1YmJsZShmYWxzZSkKICAgICAsIG1fY2FuY2VsYWJsZShm
YWxzZSkKQEAgLTYwLDYgKzY3LDIxIEBAIEV2ZW50OjpFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHkKIHsKIH0KIAorRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBjb25zdCBFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogbV90eXBlKGV2ZW50VHlw
ZSkKKyAgICAsIG1fY2FuQnViYmxlKGluaXRpYWxpemVyLmJ1YmJsZXMpCisgICAgLCBtX2NhbmNl
bGFibGUoaW5pdGlhbGl6ZXIuY2FuY2VsYWJsZSkKKyAgICAsIG1fcHJvcGFnYXRpb25TdG9wcGVk
KGZhbHNlKQorICAgICwgbV9pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCisgICAg
LCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCisgICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNl
KQorICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCisgICAgLCBtX2V2ZW50UGhhc2UoMCkKKyAg
ICAsIG1fY3VycmVudFRhcmdldCgwKQorICAgICwgbV9jcmVhdGVUaW1lKGNvbnZlcnRTZWNvbmRz
VG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpCit7Cit9CisKIEV2ZW50Ojp+RXZlbnQoKQog
ewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBFdmVudERpc3Bh
dGNoZXI7CiAKKyAgICBzdHJ1Y3QgRXZlbnRJbml0IHsKKyAgICAgICAgRXZlbnRJbml0KCk7Cisg
ICAgICAgIAorICAgICAgICBib29sIGJ1YmJsZXM7CisgICAgICAgIGJvb2wgY2FuY2VsYWJsZTsK
KyAgICB9OworCiAgICAgY2xhc3MgRXZlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudD4gewog
ICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBQaGFzZVR5cGUgeyAKQEAgLTY5LDYgKzc2LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUpKTsKICAgICAgICAgfQor
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7Cisg
ICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5FdmVudCgpOwogCiAgICAgICAgIHZvaWQgaW5p
dEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2Fu
Y2VsYWJsZSk7CkBAIC0xNzYsNiArMTg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgRXZlbnQoKTsKICAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKKyAgICAgICAgRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBFdmVudEluaXQmKTsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKICAgICAgICAgYm9vbCBkaXNwYXRjaGVk
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2
aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTI0LDYgKzI0LDggQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgaW50ZXJmYWNl
IFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAogICAgICAgICBDdXN0
b21Ub0pTLAorICAgICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1
Y3RGdW5jdGlvbiwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMsCiAgICAgICAgIFBvbHltb3JwaGlj
CiAgICAgXSBFdmVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oCShy
ZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdHJ1Y3QgSGFzaENoYW5nZUV2ZW50SW5pdCA6IHB1YmxpYyBFdmVudEluaXQgeworICAgIEhh
c2hDaGFuZ2VFdmVudEluaXQoKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgb2xkVVJMOwor
ICAgIFN0cmluZyBuZXdVUkw7Cit9OworCiBjbGFzcyBIYXNoQ2hhbmdlRXZlbnQgOiBwdWJsaWMg
RXZlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0hhc2hDaGFuZ2VFdmVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTM1LDYgKzQ0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBIYXNoQ2hhbmdlRXZlbnQob2xkVVJMLCBuZXdVUkwpKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYXNoQ2hhbmdlRXZlbnQ+IGNyZWF0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEhhc2hDaGFuZ2VFdmVudEluaXQmIGluaXRpYWxp
emVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXNoQ2hhbmdlRXZlbnQo
dHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICB9CisKICAgICB2b2lkIGluaXRIYXNoQ2hhbmdlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIGNvbnN0IFN0cmluZyYgb2xkVVJMLCBjb25zdCBTdHJpbmcmIG5ld1VSTCkKICAg
ICB7CiAgICAgICAgIGlmIChkaXNwYXRjaGVkKCkpCkBAIC01NCw3ICs2OCwxNSBAQCBwcml2YXRl
OgogICAgICAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5oYXNoY2hhbmdlRXZlbnQsIGZhbHNlLCBm
YWxzZSkKICAgICAgICAgLCBtX29sZFVSTChvbGRVUkwpCiAgICAgICAgICwgbV9uZXdVUkwobmV3
VVJMKQotICAgIHt9CisgICAgeworICAgIH0KKworICAgIEhhc2hDaGFuZ2VFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEhhc2hDaGFuZ2VFdmVudEluaXQmIGluaXRpYWxpemVy
KQorICAgICAgICA6IEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKQorICAgICAgICAsIG1fb2xkVVJM
KGluaXRpYWxpemVyLm9sZFVSTCkKKyAgICAgICAgLCBtX25ld1VSTChpbml0aWFsaXplci5uZXdV
UkwpCisgICAgeworICAgIH0KIAogICAgIFN0cmluZyBtX29sZFVSTDsKICAgICBTdHJpbmcgbV9u
ZXdVUkw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50LmlkbAkocmV2aXNp
b24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsOSBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAvLyBJbnRy
b2R1Y2VkIGluIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvbXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1oYXNoY2hhbmdlCiAgICAgaW50ZXJmYWNl
IFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAotICAgICAgICBHZW5l
cmF0ZUNvbnN0cnVjdG9yCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCisgICAgICAgIENh
bkJlQ29uc3RydWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBI
YXNoQ2hhbmdlRXZlbnQgOiBFdmVudCB7CiAgICAgICAgIHZvaWQgaW5pdEhhc2hDaGFuZ2VFdmVu
dChpbiBET01TdHJpbmcgdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
biBib29sZWFuIGNhbkJ1YmJsZSwgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRF
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQu
Y3BwCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitLZXlib2FyZEV2ZW50SW5pdDo6S2V5Ym9hcmRFdmVudEluaXQoKQorICAgIDoga2V5
TG9jYXRpb24oS2V5Ym9hcmRFdmVudDo6RE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKKyAgICAs
IGFsdEdyYXBoS2V5KGZhbHNlKQoreworfQorCisKIHN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGVGb3JLZXlib2FyZEV2ZW50VHlwZShQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OlR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTc3LDYgKzg0LDE0IEBA
IEtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgQXRvbWkKIHsKIH0KIAorS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEtl
eWJvYXJkRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUo
dHlwZSwgaW5pdGlhbGl6ZXIpCisgICAgLCBtX2tleUlkZW50aWZpZXIoaW5pdGlhbGl6ZXIua2V5
SWRlbnRpZmllcikKKyAgICAsIG1fa2V5TG9jYXRpb24oaW5pdGlhbGl6ZXIua2V5TG9jYXRpb24p
CisgICAgLCBtX2FsdEdyYXBoS2V5KGluaXRpYWxpemVyLmFsdEdyYXBoS2V5KQoreworfQorCiBL
ZXlib2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsMTUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgdGV4dDsKICAgICB9OwogI2VuZGlmCi0gICAgCisK
KyAgICBzdHJ1Y3QgS2V5Ym9hcmRFdmVudEluaXQgOiBwdWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0
ZUluaXQgeworICAgICAgICBLZXlib2FyZEV2ZW50SW5pdCgpOworCisgICAgICAgIFN0cmluZyBr
ZXlJZGVudGlmaWVyOworICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbjsKKyAgICAgICAgYm9v
bCBhbHRHcmFwaEtleTsKKyAgICB9OworCiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MwogICAgIGNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7
CiAgICAgcHVibGljOgpAQCAtNjksNiArNzcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlib2FyZEV2ZW50KHR5cGUsIGNhbkJ1YmJs
ZSwgY2FuY2VsYWJsZSwgdmlldywga2V5SWRlbnRpZmllciwga2V5TG9jYXRpb24sCiAgICAgICAg
ICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYWx0R3JhcGhLZXkp
KTsKICAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50PiBj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBLZXlib2FyZEV2ZW50SW5pdCYg
aW5pdGlhbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgS2V5Ym9hcmRF
dmVudCh0eXBlLCBpbml0aWFsaXplcik7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5L
ZXlib2FyZEV2ZW50KCk7CiAgICAgCiAgICAgICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBB
YnN0cmFjdFZpZXcqLApAQCAtMTAxLDYgKzExNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyosCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCB1bnNpZ25lZCBrZXlMb2NhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0
S2V5LCBib29sIG1ldGFLZXksIGJvb2wgYWx0R3JhcGhLZXkpOworICAgICAgICBLZXlib2FyZEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgS2V5Ym9hcmRFdmVudEluaXQmKTsK
IAogICAgICAgICBPd25QdHI8UGxhdGZvcm1LZXlib2FyZEV2ZW50PiBtX2tleUV2ZW50OwogICAg
ICAgICBTdHJpbmcgbV9rZXlJZGVudGlmaWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2Fy
ZEV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9h
cmRFdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAgbW9kdWxlIGV2ZW50
cyB7CiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMzoKICAgICBpbnRlcmZhY2UgWwog
ICAgICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMsCisgICAgICAgIENhbkJlQ29u
c3RydWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBLZXlib2Fy
ZEV2ZW50IDogVUlFdmVudCB7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSB8
fCAhTEFOR1VBR0VfSkFWQVNDUklQVApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VF
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5j
cHAJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorTWVzc2FnZUV2ZW50SW5pdDo6TWVzc2FnZUV2ZW50SW5pdCgpCit7Cit9CisKIE1lc3Nh
Z2VFdmVudDo6TWVzc2FnZUV2ZW50KCkKICAgICA6IG1fZGF0YShTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZSgpKQogewpAQCAtNDgsNiArNTIsMTUgQEAgTWVzc2FnZUV2ZW50OjpNZXNzYWdl
RXZlbnQoUGFzc1JlZlB0cjxTZQogewogfQogCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IE1lc3NhZ2VFdmVudEluaXQmIGluaXRpYWxp
emVyKQorICAgIDogRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpCisgICAgLCBtX2RhdGEoaW5pdGlh
bGl6ZXIuZGF0YSkKKyAgICAsIG1fb3JpZ2luKGluaXRpYWxpemVyLm9yaWdpbikKKyAgICAsIG1f
bGFzdEV2ZW50SWQoaW5pdGlhbGl6ZXIubGFzdEV2ZW50SWQpCisgICAgLCBtX3NvdXJjZShpbml0
aWFsaXplci5zb3VyY2UpCit7Cit9CisKIE1lc3NhZ2VFdmVudDo6fk1lc3NhZ2VFdmVudCgpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiA5MTI3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTYgKzM3LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERPTVdpbmRvdzsK
IAorICAgIHN0cnVjdCBNZXNzYWdlRXZlbnRJbml0IDogcHVibGljIEV2ZW50SW5pdCB7CisgICAg
ICAgIE1lc3NhZ2VFdmVudEluaXQoKTsKKworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhOworICAgICAgICBTdHJpbmcgb3JpZ2luOworICAgICAgICBTdHJpbmcgbGFz
dEV2ZW50SWQ7CisgICAgICAgIFJlZlB0cjxET01XaW5kb3c+IHNvdXJjZTsKKyAgICAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciB0aGUgbWVzc2FnZSBwb3J0IGFycmF5LgorICAgIH07CisK
ICAgICBjbGFzcyBNZXNzYWdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGUoKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudCk7CiAgICAgICAg
IH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZShQYXNz
T3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gZGF0YSA9IDAsIGNvbnN0IFN0cmluZyYgb3JpZ2luID0gIiIsIGNvbnN0IFN0cmlu
ZyYgbGFzdEV2ZW50SWQgPSAiIiwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSA9IDApCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2ZW50KGRh
dGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgcG9ydHMpKTsKICAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgY29uc3QgTWVzc2FnZUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWVzc2FnZUV2ZW50KHR5cGUsIGluaXRpYWxp
emVyKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VFdmVudCgpOwogCiAg
ICAgICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZl
bnRJZCwgRE9NV2luZG93KiBzb3VyY2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4pOwpA
QCAtNjcsNiArODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgTWVzc2FnZUV2ZW50KCk7CiAgICAgICAgIE1lc3NhZ2VFdmVudChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UsIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRBcnJheT4pOworICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBNZXNzYWdlRXZlbnRJbml0Jik7CiAKICAgICAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9kYXRhOwogICAgICAgICBTdHJpbmcgbV9vcmlnaW47Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsOSBAQCBtb2R1bGUgZXZlbnRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExl
Z2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKLSAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAg
ICAgICAgTm9TdGF0aWNUYWJsZXMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAg
IEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBNZXNzYWdlRXZlbnQgOiBFdmVudCB7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ2FjaGVkQXR0cmlidXRlXSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgZGF0YTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAkocmV2aXNp
b24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorTW91c2VF
dmVudEluaXQ6Ok1vdXNlRXZlbnRJbml0KCkKKyAgICA6IGJ1dHRvbigwKSAKK3sKK30KKworCiBQ
YXNzUmVmUHRyPE1vdXNlRXZlbnQ+IE1vdXNlRXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZlbnQsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRl
ZFRhcmdldCkKIHsKICAgICBBU1NFUlQoZXZlbnQuZXZlbnRUeXBlKCkgPT0gTW91c2VFdmVudE1v
dmVkIHx8IGV2ZW50LmJ1dHRvbigpICE9IE5vQnV0dG9uKTsKQEAgLTYzLDYgKzY5LDE0IEBAIE1v
dXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW4KIHsKIH0KIAorTW91c2VFdmVu
dDo6TW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IE1vdXNlRXZlbnRJ
bml0JiBpbml0aWFsaXplcikKKyAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KHR5cGUsIGluaXRpYWxp
emVyKQorICAgICwgbV9idXR0b24oaW5pdGlhbGl6ZXIuYnV0dG9uKQorICAgICwgbV9idXR0b25E
b3duKGluaXRpYWxpemVyLmJ1dHRvbiAhPSAodW5zaWduZWQgc2hvcnQpLTEpCisgICAgLCBtX3Jl
bGF0ZWRUYXJnZXQoaW5pdGlhbGl6ZXIucmVsYXRlZFRhcmdldCkKK3sKK30KKwogTW91c2VFdmVu
dDo6fk1vdXNlRXZlbnQoKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCShyZXZp
c2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDggKzI5LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RXZlbnREaXNwYXRjaGVyOwotY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworICAgIGNsYXNzIEV2
ZW50RGlzcGF0Y2hlcjsKKyAgICBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CisKKyAgICBzdHJ1
Y3QgTW91c2VFdmVudEluaXQgOiBwdWJsaWMgTW91c2VSZWxhdGVkRXZlbnRJbml0IHsKKyAgICAg
ICAgTW91c2VFdmVudEluaXQoKTsKKworICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b247Cisg
ICAgICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldDsKKyAgICB9OwogCiAgICAg
Ly8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgogICAgIGNsYXNzIE1vdXNlRXZlbnQgOiBwdWJs
aWMgTW91c2VSZWxhdGVkRXZlbnQgewpAQCAtMzksNiArNDYsNyBAQCBjbGFzcyBQbGF0Zm9ybU1v
dXNlRXZlbnQ7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW91
c2VFdmVudCk7CiAgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb3VzZUV2
ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAgICAg
IGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFn
ZVksCiAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5
LCBib29sIG1ldGFLZXksIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKQEAgLTQ3LDYgKzU1LDEyIEBA
IGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTW91c2VFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCwg
c2NyZWVuWCwgc2NyZWVuWSwgcGFnZVgsIHBhZ2VZLAogICAgICAgICAgICAgICAgIGN0cmxLZXks
IGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwgcmVsYXRlZFRhcmdldCwgY2xpcGJv
YXJkLCBpc1NpbXVsYXRlZCkpOwogICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TW91c2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgTW91
c2VFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IE1vdXNlRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpOworICAgICAgICB9CisKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TW91c2VFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCk7CiAKICAg
ICAgICAgdmlydHVhbCB+TW91c2VFdmVudCgpOwpAQCAtNzksNiArOTMsNyBAQCBjbGFzcyBQbGF0
Zm9ybU1vdXNlRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVl
blgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXks
IHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEV2
ZW50VGFyZ2V0PiByZWxhdGVkVGFyZ2V0LCBQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJk
LCBib29sIGlzU2ltdWxhdGVkKTsKKyAgICAgICAgTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGNvbnN0IE1vdXNlRXZlbnRJbml0Jik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBNb3VzZUV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaWRsCShyZXZpc2lv
biA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsOCBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAvLyBJbnRyb2R1Y2Vk
IGluIERPTSBMZXZlbCAyOgogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRP
cHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3Vz
dG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIE1vdXNlRXZlbnQgOiBVSUV2ZW50IHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgc2NyZWVuWDsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgc2NyZWVuWTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAkocmV2aXNpb24gOTEyNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwxMiArMzIsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitNb3VzZVJlbGF0ZWRF
dmVudEluaXQ6Ok1vdXNlUmVsYXRlZEV2ZW50SW5pdCgpCisgICAgOiBzY3JlZW5YKDApIAorICAg
ICwgc2NyZWVuWSgwKSAKKyAgICAsIGNsaWVudFgoMCkgCisgICAgLCBjbGllbnRZKDApCit7Cit9
CisKKwogTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KCkKICAgICA6IG1faXNT
aW11bGF0ZWQoZmFsc2UpCiAgICAgLCBtX2hhc0NhY2hlZFJlbGF0aXZlUG9zaXRpb24oZmFsc2Up
CiB7CiB9CiAKK01vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgTW91c2VSZWxhdGVkRXZlbnRJbml0JiBpbml0aWFs
aXplcikKKyAgICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBpbml0aWFsaXplcikK
KyAgICAsIG1fc2NyZWVuTG9jYXRpb24oaW5pdGlhbGl6ZXIuc2NyZWVuWCwgaW5pdGlhbGl6ZXIu
c2NyZWVuWSkKKyAgICAsIG1faXNTaW11bGF0ZWQoZmFsc2UpCit7CisgICAgaW5pdENvb3JkaW5h
dGVzKEludFBvaW50KGluaXRpYWxpemVyLmNsaWVudFgsIGluaXRpYWxpemVyLmNsaWVudFkpKTsK
K30KKwogc3RhdGljIEludFNpemUgY29udGVudHNTY3JvbGxPZmZzZXQoQWJzdHJhY3RWaWV3KiBh
YnN0cmFjdFZpZXcpCiB7CiAgICAgaWYgKCFhYnN0cmFjdFZpZXcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
MTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgc3RydWN0IE1vdXNlUmVsYXRlZEV2
ZW50SW5pdCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlSW5pdCB7CisgICAgICAgIE1vdXNl
UmVsYXRlZEV2ZW50SW5pdCgpOworCisgICAgICAgIGludCBzY3JlZW5YOyAKKyAgICAgICAgaW50
IHNjcmVlblk7IAorICAgICAgICBpbnQgY2xpZW50WDsgCisgICAgICAgIGludCBjbGllbnRZOwor
ICAgIH07CisKICAgICAvLyBJbnRlcm5hbCBvbmx5OiBIZWxwZXIgY2xhc3MgZm9yIHdoYXQncyBj
b21tb24gYmV0d2VlbiBtb3VzZSBhbmQgd2hlZWwgZXZlbnRzLgogICAgIGNsYXNzIE1vdXNlUmVs
YXRlZEV2ZW50IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewogICAgIHB1YmxpYzoKQEAg
LTYxLDYgKzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBNb3VzZVJlbGF0ZWRF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNl
bGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGRldGFpbCwgY29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQ
b2ludCYgd2luZG93TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBpc1Np
bXVsYXRlZCA9IGZhbHNlKTsKKyAgICAgICAgTW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBjb25zdCBNb3VzZVJlbGF0ZWRFdmVudEluaXQmKTsKIAogICAgICAgICB2
b2lkIGluaXRDb29yZGluYXRlcygpOwogICAgICAgICB2b2lkIGluaXRDb29yZGluYXRlcyhjb25z
dCBJbnRQb2ludCYgY2xpZW50TG9jYXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011
dGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlv
bkV2ZW50LmNwcAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRp
b25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorTXV0YXRpb25FdmVudEluaXQ6Ok11dGF0aW9uRXZlbnRJbml0KCkKKyAg
ICA6IGF0dHJDaGFuZ2UoMCkKK3sKK30KKworCiBNdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50
KCkKICAgICA6IG1fYXR0ckNoYW5nZSgwKQogewpAQCAtNDIsNiArNDgsMTYgQEAgTXV0YXRpb25F
dmVudDo6TXV0YXRpb25FdmVudChjb25zdCBBdG9taQogewogfQogCitNdXRhdGlvbkV2ZW50OjpN
dXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgTXV0YXRpb25FdmVu
dEluaXQmIGluaXRpYWxpemVyKQorICAgIDogRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpCisgICAg
LCBtX3JlbGF0ZWROb2RlKGluaXRpYWxpemVyLnJlbGF0ZWROb2RlKQorICAgICwgbV9wcmV2VmFs
dWUoaW5pdGlhbGl6ZXIucHJldlZhbHVlKQorICAgICwgbV9uZXdWYWx1ZShpbml0aWFsaXplci5u
ZXdWYWx1ZSkKKyAgICAsIG1fYXR0ck5hbWUoaW5pdGlhbGl6ZXIuYXR0ck5hbWUpCisgICAgLCBt
X2F0dHJDaGFuZ2UoaW5pdGlhbGl6ZXIuYXR0ckNoYW5nZSkKK3sKK30KKwogTXV0YXRpb25FdmVu
dDo6fk11dGF0aW9uRXZlbnQoKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVu
dC5oCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorICAgIHN0cnVjdCBNdXRhdGlvbkV2ZW50SW5pdCA6IHB1YmxpYyBFdmVudEluaXQgewor
ICAgICAgICBNdXRhdGlvbkV2ZW50SW5pdCgpOworCisgICAgICAgIFJlZlB0cjxOb2RlPiByZWxh
dGVkTm9kZTsKKyAgICAgICAgU3RyaW5nIHByZXZWYWx1ZTsKKyAgICAgICAgU3RyaW5nIG5ld1Zh
bHVlOworICAgICAgICBTdHJpbmcgYXR0ck5hbWU7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0
dHJDaGFuZ2U7CisgICAgfTsKKwogICAgIGNsYXNzIE11dGF0aW9uRXZlbnQgOiBwdWJsaWMgRXZl
bnQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+TXV0YXRpb25FdmVudCgpOwpAQCAt
NTAsNiArNjAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNdXRhdGlvbkV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgZmFsc2UsIHJlbGF0ZWRO
b2RlLCBwcmV2VmFsdWUsIG5ld1ZhbHVlLCBhdHRyTmFtZSwgYXR0ckNoYW5nZSkpOwogICAgICAg
ICB9CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25FdmVudD4gY3JlYXRlKGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgTXV0YXRpb25FdmVudEluaXQmIGluaXRpYWxp
emVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11dGF0aW9u
RXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgaW5p
dE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgYXR0ck5hbWUsIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UpOwpAQCAtNjcsNiArODIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRy
PE5vZGU+IHJlbGF0ZWROb2RlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
cHJldlZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgYXR0ck5hbWUsIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UpOworICAg
ICAgICBNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgTXV0YXRp
b25FdmVudEluaXQmKTsKIAogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkTm9kZTsKICAg
ICAgICAgU3RyaW5nIG1fcHJldlZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL011dGF0
aW9uRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2
ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25F
dmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAgbW9kdWxlIGV2ZW50cyB7
CiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMsCisgICAgICAgIENhbkJlQ29uc3Ry
dWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBNdXRhdGlvbkV2
ZW50IDogRXZlbnQgewogCiAgICAgICAgIC8vIGF0dHJDaGFuZ2VUeXBlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vT3ZlcmZsb3dFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL092ZXJmbG93RXZlbnQuY3BwCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTQg
QEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAg
ICAgCisKK092ZXJmbG93RXZlbnRJbml0OjpPdmVyZmxvd0V2ZW50SW5pdCgpCisgICAgOiBvcmll
bnQoT3ZlcmZsb3dFdmVudDo6VkVSVElDQUwpCisgICAgLCBob3Jpem9udGFsT3ZlcmZsb3coZmFs
c2UpCisgICAgLCB2ZXJ0aWNhbE92ZXJmbG93KGZhbHNlKQoreworfQorCiBPdmVyZmxvd0V2ZW50
OjpPdmVyZmxvd0V2ZW50KCkKICAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5vdmVyZmxvd2NoYW5n
ZWRFdmVudCwgZmFsc2UsIGZhbHNlKQogICAgICwgbV9vcmllbnQoVkVSVElDQUwpCkBAIC01Myw2
ICs2MCwxNCBAQCBPdmVyZmxvd0V2ZW50OjpPdmVyZmxvd0V2ZW50KGJvb2wgaG9yaXpvCiAgICAg
ICAgIG1fb3JpZW50ID0gVkVSVElDQUw7CiB9CiAKK092ZXJmbG93RXZlbnQ6Ok92ZXJmbG93RXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBPdmVyZmxvd0V2ZW50SW5pdCYgaW5p
dGlhbGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fb3JpZW50
KGluaXRpYWxpemVyLm9yaWVudCkKKyAgICAsIG1faG9yaXpvbnRhbE92ZXJmbG93KGluaXRpYWxp
emVyLmhvcml6b250YWxPdmVyZmxvdykKKyAgICAsIG1fdmVydGljYWxPdmVyZmxvdyhpbml0aWFs
aXplci52ZXJ0aWNhbE92ZXJmbG93KQoreworfQorCiBib29sIE92ZXJmbG93RXZlbnQ6OmlzT3Zl
cmZsb3dFdmVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vT3ZlcmZsb3dFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9PdmVyZmxvd0V2ZW50LmgJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L092ZXJmbG93RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTUgQEAKICNpbmNs
dWRlICJFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKKyAgICBzdHJ1Y3Qg
T3ZlcmZsb3dFdmVudEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKKyAgICAgICAgT3ZlcmZsb3dF
dmVudEluaXQoKTsKKworICAgICAgICB1bnNpZ25lZCBzaG9ydCBvcmllbnQ7CisgICAgICAgIGJv
b2wgaG9yaXpvbnRhbE92ZXJmbG93OworICAgICAgICBib29sIHZlcnRpY2FsT3ZlcmZsb3c7Cisg
ICAgfTsKKwogICAgIGNsYXNzIE92ZXJmbG93RXZlbnQgOiBwdWJsaWMgRXZlbnQgewogICAgIHB1
YmxpYzoKICAgICAgICAgZW51bSBvcmllbnRUeXBlIHsKQEAgLTQyLDExICs1MCwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT3ZlcmZsb3dFdmVudCk7CiAgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxPdmVyZmxvd0V2ZW50PiBjcmVhdGUoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBi
b29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93Q2hhbmdlZCwgYm9v
bCB2ZXJ0aWNhbE92ZXJmbG93KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE92ZXJmbG93RXZlbnQoaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRh
bE92ZXJmbG93LCB2ZXJ0aWNhbE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdykpOwog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8T3ZlcmZsb3dFdmVudD4gY3Jl
YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgT3ZlcmZsb3dFdmVudEluaXQmIGlu
aXRpYWxpemVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE92
ZXJmbG93RXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZv
aWQgaW5pdE92ZXJmbG93RXZlbnQodW5zaWduZWQgc2hvcnQgb3JpZW50LCBib29sIGhvcml6b250
YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KTsKIAogICAgICAgICB1bnNpZ25lZCBz
aG9ydCBvcmllbnQoKSBjb25zdCB7IHJldHVybiBtX29yaWVudDsgfQpAQCAtNTgsNiArNzIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgT3ZlcmZsb3dFdmVu
dCgpOwogICAgICAgICBPdmVyZmxvd0V2ZW50KGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdl
ZCwgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvd0NoYW5nZWQs
IGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CisgICAgICAgIE92ZXJmbG93RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBjb25zdCBPdmVyZmxvd0V2ZW50SW5pdCYpOwogCiAgICAgICAgIHVu
c2lnbmVkIHNob3J0IG1fb3JpZW50OwogICAgICAgICBib29sIG1faG9yaXpvbnRhbE92ZXJmbG93
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3ZlcmZsb3dFdmVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogbW9kdWxlIGV2ZW50cyB7
CisKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVu
dHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1
bmN0aW9uCiAgICAgXSBPdmVyZmxvd0V2ZW50IDogRXZlbnQgewogICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBIT1JJWk9OVEFMID0gMDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
VkVSVElDQUwgICA9IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25F
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJh
bnNpdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTEgQEAKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFnZVRyYW5zaXRp
b25FdmVudEluaXQ6OlBhZ2VUcmFuc2l0aW9uRXZlbnRJbml0KCkKK3sKK30KKwogICAgICAgICAK
IFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OlBhZ2VUcmFuc2l0aW9uRXZlbnQoKQogICAgIDogbV9wZXJz
aXN0ZWQoZmFsc2UpCkBAIC00MSw2ICs0NiwxMiBAQCBQYWdlVHJhbnNpdGlvbkV2ZW50OjpQYWdl
VHJhbnNpdGlvbkV2ZW50CiB7CiB9CiAKK1BhZ2VUcmFuc2l0aW9uRXZlbnQ6OlBhZ2VUcmFuc2l0
aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQYWdlVHJhbnNpdGlvbkV2
ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAg
ICAsIG1fcGVyc2lzdGVkKGluaXRpYWxpemVyLnBlcnNpc3RlZCkKK3sKK30KKwogUGFnZVRyYW5z
aXRpb25FdmVudDo6flBhZ2VUcmFuc2l0aW9uRXZlbnQoKQogewogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDE3ICszMCwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBzdHJ1Y3QgUGFnZVRy
YW5zaXRpb25FdmVudEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKKyAgICAgICAgUGFnZVRyYW5z
aXRpb25FdmVudEluaXQoKTsKKworICAgICAgICBib29sIHBlcnNpc3RlZDsKKyAgICB9OworCiAg
ICAgY2xhc3MgUGFnZVRyYW5zaXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYWdlVHJhbnNpdGlvbkV2ZW50PiBjcmVhdGUo
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhZ2VUcmFuc2l0
aW9uRXZlbnQpOwogICAgICAgICB9CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFnZVRy
YW5zaXRpb25FdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBwZXJz
aXN0ZWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFnZVRy
YW5zaXRpb25FdmVudCh0eXBlLCBwZXJzaXN0ZWQpKTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhZ2VUcmFuc2l0aW9uRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IFBhZ2VUcmFuc2l0aW9uRXZlbnRJbml0JiBpbml0aWFsaXplcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYWdlVHJhbnNpdGlv
bkV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFs
IH5QYWdlVHJhbnNpdGlvbkV2ZW50KCk7CiAKICAgICAgICAgdm9pZCBpbml0UGFnZVRyYW5zaXRp
b25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIApAQCAtNTUsNiArNjcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFnZVRyYW5zaXRpb25FdmVu
dCgpOwogICAgICAgICBQYWdlVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBwZXJzaXN0ZWQpOworICAgICAgICBQYWdlVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgY29uc3QgUGFnZVRyYW5zaXRpb25FdmVudEluaXQmKTsKIAogICAg
ICAgICBib29sIG1fcGVyc2lzdGVkOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
UGFnZVRyYW5zaXRpb25FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1BhZ2VUcmFuc2l0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsOCBAQCBtb2R1bGUgZXZlbnRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2Fj
eURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAg
ICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIFBhZ2VUcmFuc2l0aW9uRXZlbnQg
OiBFdmVudCB7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gcGVyc2lzdGVk
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcAkocmV2aXNpb24gOTEyNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUG9wU3RhdGVFdmVu
dEluaXQ6OlBvcFN0YXRlRXZlbnRJbml0KCkKK3sKK30KKwogUG9wU3RhdGVFdmVudDo6UG9wU3Rh
dGVFdmVudCgpCiAgICAgOiBFdmVudChldmVudE5hbWVzKCkucG9wc3RhdGVFdmVudCwgZmFsc2Us
IHRydWUpCiB7CkBAIC00Miw2ICs0NiwxMiBAQCBQb3BTdGF0ZUV2ZW50OjpQb3BTdGF0ZUV2ZW50
KFBhc3NSZWZQdHI8CiB7CiB9CiAKK1BvcFN0YXRlRXZlbnQ6OlBvcFN0YXRlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQb3BTdGF0ZUV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIp
CisgICAgOiBFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1fc3RhdGVPYmplY3QoaW5p
dGlhbGl6ZXIuc3RhdGUpCit7Cit9CisKIFBvcFN0YXRlRXZlbnQ6On5Qb3BTdGF0ZUV2ZW50KCkK
IHsKIH0KQEAgLTU2LDYgKzY2LDExIEBAIFBhc3NSZWZQdHI8UG9wU3RhdGVFdmVudD4gUG9wU3Rh
dGVFdmVudDoKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcFN0YXRlRXZlbnQoc3RhdGVPYmpl
Y3QpKTsKIH0KIAorUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBQb3BTdGF0ZUV2ZW50OjpjcmVh
dGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQb3BTdGF0ZUV2ZW50SW5pdCYgaW5p
dGlhbGl6ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3BTdGF0ZUV2ZW50KHR5cGUs
IGluaXRpYWxpemVyKSk7Cit9CisKIHZvaWQgUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxh
YmxlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3QpCiB7CiAg
ICAgaWYgKGRpc3BhdGNoZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuaAko
cmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKK3N0cnVjdCBQb3BTdGF0ZUV2ZW50SW5pdCA6
IHB1YmxpYyBFdmVudEluaXQgeworICAgIFBvcFN0YXRlRXZlbnRJbml0KCk7CisKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzdGF0ZTsKK307CisKIGNsYXNzIFBvcFN0YXRlRXZl
bnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgflBvcFN0YXRlRXZlbnQo
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBjcmVhdGUoKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBjcmVhdGUoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb3BTdGF0ZUV2ZW50PiBj
cmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQb3BTdGF0ZUV2ZW50SW5pdCYg
aW5pdGlhbGl6ZXIpOworCisgICAgdmlydHVhbCB+UG9wU3RhdGVFdmVudCgpOworCiAgICAgdm9p
ZCBpbml0UG9wU3RhdGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7
CiAgICAgYm9vbCBpc1BvcFN0YXRlRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKQEAg
LTQ2LDcgKzU1LDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFBvcFN0YXRlRXZlbnQoKTsK
LSAgICBleHBsaWNpdCBQb3BTdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPik7CisgICAgUG9wU3RhdGVFdmVudChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4pOworICAgIFBvcFN0YXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBQ
b3BTdGF0ZUV2ZW50SW5pdCYpOworCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
bV9zdGF0ZU9iamVjdDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5p
ZGwJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIG1vZHVsZSBldmVudHMgewogI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVD
b25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24KICAgICBdIFBvcFN0
YXRlRXZlbnQgOiBFdmVudCB7CiAgICAgICAgIHZvaWQgaW5pdFBvcFN0YXRlRXZlbnQoaW4gRE9N
U3RyaW5nIHR5cGVBcmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xl
YW4gY2FuQnViYmxlQXJnLCAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5jcHAJ
KHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgCitQcm9ncmVzc0V2ZW50SW5pdDo6UHJvZ3Jlc3NFdmVudEluaXQoKQorICAgIDogbGVu
Z3RoQ29tcHV0YWJsZShmYWxzZSkKKyAgICAsIGxvYWRlZCgwKQorICAgICwgdG90YWwoMCkKK3sK
K30KKworCiBQcm9ncmVzc0V2ZW50OjpQcm9ncmVzc0V2ZW50KCkKICAgICA6IG1fbGVuZ3RoQ29t
cHV0YWJsZShmYWxzZSkKICAgICAsIG1fbG9hZGVkKDApCkBAIC00Miw3ICs1MCwxNSBAQCBQcm9n
cmVzc0V2ZW50OjpQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pCiAgICAgLCBtX3RvdGFsKHRvdGFs
KQogewogfQotICAgIAorCitQcm9ncmVzc0V2ZW50OjpQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgY29uc3QgUHJvZ3Jlc3NFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAg
IDogRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpCisgICAgLCBtX2xlbmd0aENvbXB1dGFibGUoaW5p
dGlhbGl6ZXIubGVuZ3RoQ29tcHV0YWJsZSkKKyAgICAsIG1fbG9hZGVkKGluaXRpYWxpemVyLmxv
YWRlZCkKKyAgICAsIG1fdG90YWwoaW5pdGlhbGl6ZXIudG90YWwpCit7Cit9CisKIHZvaWQgUHJv
Z3Jlc3NFdmVudDo6aW5pdFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJn
LCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLAogICAgIGJvb2wgbGVuZ3Ro
Q29tcHV0YWJsZUFyZywgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZEFyZywgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQXJnKQogeyAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9ncmVz
c0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQu
aAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSwxNSBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFByb2dyZXNzRXZlbnRJbml0IDogcHVibGlj
IEV2ZW50SW5pdCB7CisgICAgUHJvZ3Jlc3NFdmVudEluaXQoKTsKICAgICAKKyAgICBib29sIGxl
bmd0aENvbXB1dGFibGU7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZDsKKyAgICB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWw7Cit9OworCiBjbGFzcyBQcm9ncmVzc0V2ZW50IDogcHVibGlj
IEV2ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmVzc0V2ZW50PiBj
cmVhdGUoKQpAQCAtNDAsNiArNDgsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQcm9ncmVzc0V2ZW50KHR5cGUsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRl
ZCwgdG90YWwpKTsKICAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZ3Jlc3NFdmVudD4g
Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgUHJvZ3Jlc3NFdmVudEluaXQm
IGluaXRpYWxpemVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmVz
c0V2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CisgICAgfQogCiAgICAgdm9pZCBpbml0UHJvZ3Jl
c3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBi
b29sIGNhbmNlbGFibGVBcmcsCiAgICAgICAgIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZUFyZywgdW5z
aWduZWQgbG9uZyBsb25nIGxvYWRlZEFyZywgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQXJnKTsK
QEAgLTUxLDYgKzYzLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFByb2dyZXNzRXZlbnQo
KTsKICAgICBQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBsZW5n
dGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWwpOworICAgIFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBQcm9ncmVzc0V2ZW50SW5pdCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c1Byb2dyZXNzRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUHJvZ3Jlc3NFdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1Byb2dyZXNzRXZlbnQuaWRsCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qcm9ncmVzc0V2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsOCBAQCBtb2R1
bGUgZXZlbnRzIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRp
b25hbEFyZ3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9t
Q29uc3RydWN0RnVuY3Rpb24sCiAgICAgXSBQcm9ncmVzc0V2ZW50IDogRXZlbnQgewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsZW5ndGhDb21wdXRhYmxlOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9UZXh0RXZlbnQuY3BwCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMjAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitUZXh0RXZlbnRJbml0OjpUZXh0RXZlbnRJbml0KCkKK3sKK30K
KwogUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IFRleHRFdmVudDo6Y3JlYXRlKCkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCk7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dEV2ZW50PiBU
ZXh0RXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFRleHRFdmVu
dEluaXQmIGluaXRpYWxpemVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEV2ZW50
KHR5cGUsIGluaXRpYWxpemVyKSk7Cit9CisKIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBUZXh0RXZl
bnQ6OmNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBk
YXRhLCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQogewogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dEV2ZW50KHZpZXcsIGRhdGEsIGlucHV0VHlwZSkpOwpAQCAtNjQsNiArNzMsMTUg
QEAgVGV4dEV2ZW50OjpUZXh0RXZlbnQoKQogewogfQogCitUZXh0RXZlbnQ6OlRleHRFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFRleHRFdmVudEluaXQmIGluaXRpYWxpemVy
KQorICAgIDogVUlFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAsIG1faW5wdXRUeXBlKFRl
eHRFdmVudElucHV0S2V5Ym9hcmQpCisgICAgLCBtX2RhdGEoaW5pdGlhbGl6ZXIuZGF0YSkKKyAg
ICAsIG1fc2hvdWxkU21hcnRSZXBsYWNlKGZhbHNlKQorICAgICwgbV9zaG91bGRNYXRjaFN0eWxl
KGZhbHNlKQoreworfQorCiBUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0
Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhLCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRU
eXBlKQogICAgIDogVUlFdmVudChldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQsIHRydWUsIHRy
dWUsIHZpZXcsIDApCiAgICAgLCBtX2lucHV0VHlwZShpbnB1dFR5cGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RleHRFdmVudC5oCShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiAKKyAgICBzdHJ1Y3QgVGV4dEV2
ZW50SW5pdCA6IHB1YmxpYyBVSUV2ZW50SW5pdCB7CisgICAgICAgIFRleHRFdmVudEluaXQoKTsK
KworICAgICAgICBTdHJpbmcgZGF0YTsKKyAgICB9OworCiAgICAgY2xhc3MgVGV4dEV2ZW50IDog
cHVibGljIFVJRXZlbnQgewogICAgIHB1YmxpYzoKLQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0RXZlbnQ+IGNyZWF0ZSgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZl
bnQ+IGNyZWF0ZShQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYgZGF0YSwg
VGV4dEV2ZW50SW5wdXRUeXBlID0gVGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHRFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgY29uc3QgVGV4dEV2ZW50SW5pdCYpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
RXZlbnQ+IGNyZWF0ZUZvclBsYWluVGV4dFBhc3RlKFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2
aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEsIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlKTsKICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGVGb3JGcmFnbWVudFBhc3RlKFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGRhdGEsIGJvb2wgc2hvdWxkU21hcnRSZXBsYWNlLCBib29sIHNob3VsZE1hdGNoU3R5bGUpOwog
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0RXZlbnQ+IGNyZWF0ZUZvckRyb3AoUGFzc1Jl
ZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSk7CkBAIC02Myw3ICs2
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFRleHRF
dmVudCgpOwotCisgICAgICAgIFRleHRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IFRleHRFdmVudEluaXQmKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJh
Y3RWaWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhLCBUZXh0RXZlbnRJbnB1dFR5cGUgPSBUZXh0RXZl
bnRJbnB1dEtleWJvYXJkKTsKICAgICAgICAgVGV4dEV2ZW50KFBhc3NSZWZQdHI8QWJzdHJhY3RW
aWV3PiwgY29uc3QgU3RyaW5nJiBkYXRhLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LAog
ICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRTbWFydFJlcGxhY2UsIGJvb2wgc2hvdWxkTWF0
Y2hTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dEV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQCBtb2R1bGUgZXZlbnRzIHsKICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBM
ZXZlbCAzOgogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFy
Z3VtZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3Ry
dWN0RnVuY3Rpb24sCiAgICAgXSBUZXh0RXZlbnQgOiBVSUV2ZW50IHsKIAogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VUlFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3Bw
CShyZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitV
SUV2ZW50SW5pdDo6VUlFdmVudEluaXQoKQorICAgIDogZGV0YWlsKDApCit7Cit9CisKKwogVUlF
dmVudDo6VUlFdmVudCgpCiAgICAgOiBtX2RldGFpbCgwKQogewpAQCAtMzksNiArNDUsMTMgQEAg
VUlFdmVudDo6VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZQogewogfQogCitVSUV2ZW50
OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgVUlFdmVudEluaXQmIGlu
aXRhbGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBpbml0YWxpemVyKQorICAgICwgbV92aWV3KGlu
aXRhbGl6ZXIudmlldykKKyAgICAsIG1fZGV0YWlsKGluaXRhbGl6ZXIuZGV0YWlsKQoreworfQor
CiBVSUV2ZW50Ojp+VUlFdmVudCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVUlF
dmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmgJKHJldmlz
aW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTYgKzMxLDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHR5cGVkZWYg
RE9NV2luZG93IEFic3RyYWN0VmlldzsKIAorICAgIHN0cnVjdCBVSUV2ZW50SW5pdCA6IHB1Ymxp
YyBFdmVudEluaXQgeworICAgICAgICBVSUV2ZW50SW5pdCgpOworCisgICAgICAgIFJlZlB0cjxB
YnN0cmFjdFZpZXc+IHZpZXc7CisgICAgICAgIGludCBkZXRhaWw7CisgICAgfTsKKwogICAgIGNs
YXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VUlFdmVudD4gY3JlYXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBVSUV2ZW50KTsKICAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFVJRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3
LCBpbnQgZGV0YWlsKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwpKTsKICAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVJRXZlbnQ+IGNyZWF0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFVJRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVSUV2ZW50KHR5cGUsIGlu
aXRpYWxpemVyKSk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5VSUV2ZW50KCk7CiAK
ICAgICAgICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgaW50
IGRldGFpbCk7CkBAIC02NCw2ICs3OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIFVJRXZlbnQoKTsKICAgICAgICAgVUlFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8
QWJzdHJhY3RWaWV3PiwgaW50IGRldGFpbCk7CisgICAgICAgIFVJRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBjb25zdCBVSUV2ZW50SW5pdCYpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1VJRXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50Lmlk
bAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgLy8gSW50
cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBMZWdhY3lE
ZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAg
ICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBVSUV2ZW50IDogRXZlbnQgewogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NV2luZG93ICAgICAgICAgICAgdmlldzsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICAgICAgIGRldGFpbDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5jcHAJKHJldmlzaW9uIDkx
MjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMywxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CitVSUV2ZW50V2l0aEtleVN0YXRlSW5pdDo6VUlFdmVudFdpdGhLZXlTdGF0ZUluaXQoKQorICAg
IDogY3RybEtleShmYWxzZSkKKyAgICAsIGFsdEtleShmYWxzZSkgCisgICAgLCBzaGlmdEtleShm
YWxzZSkKKyAgICAsIG1ldGFLZXkoZmFsc2UpCit7Cit9CisKKwogVUlFdmVudFdpdGhLZXlTdGF0
ZSogZmluZEV2ZW50V2l0aEtleVN0YXRlKEV2ZW50KiBldmVudCkKIHsKICAgICBmb3IgKEV2ZW50
KiBlID0gZXZlbnQ7IGU7IGUgPSBlLT51bmRlcmx5aW5nRXZlbnQoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuaAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNywxNiBAQAogI2luY2x1ZGUgIlVJRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIAorCisgICAgc3RydWN0IFVJRXZlbnRXaXRoS2V5U3RhdGVJbml0IDogcHVibGljIFVJ
RXZlbnRJbml0IHsKKyAgICAgICAgVUlFdmVudFdpdGhLZXlTdGF0ZUluaXQoKTsKKworICAgICAg
ICBib29sIGN0cmxLZXk7IAorICAgICAgICBib29sIGFsdEtleTsKKyAgICAgICAgYm9vbCBzaGlm
dEtleTsgCisgICAgICAgIGJvb2wgbWV0YUtleTsKKyAgICB9OworCiAgICAgY2xhc3MgVUlFdmVu
dFdpdGhLZXlTdGF0ZSA6IHB1YmxpYyBVSUV2ZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIGJv
b2wgY3RybEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQpAQCAtNTQsNiArNjMsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBV
SUV2ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgVUlFdmVu
dFdpdGhLZXlTdGF0ZUluaXQmIGluaXRpYWxpemVyKQorICAgICAgICAgICAgOiBVSUV2ZW50KHR5
cGUsIGluaXRpYWxpemVyKQorICAgICAgICAgICAgLCBtX2N0cmxLZXkoaW5pdGlhbGl6ZXIuY3Ry
bEtleSkKKyAgICAgICAgICAgICwgbV9hbHRLZXkoaW5pdGlhbGl6ZXIuYWx0S2V5KQorICAgICAg
ICAgICAgLCBtX3NoaWZ0S2V5KGluaXRpYWxpemVyLnNoaWZ0S2V5KQorICAgICAgICAgICAgLCBt
X21ldGFLZXkoaW5pdGlhbGl6ZXIubWV0YUtleSkKKyAgICAgICAgeworICAgICAgICB9CisKICAg
ICAgICAgLy8gRXhwb3NlIHRoZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbS4KICAg
ICAgICAgYm9vbCBtX2N0cmxLZXkgOiAxOwogICAgICAgICBib29sIG1fYWx0S2V5IDogMTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAkocmV2aXNp
b24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK1dlYktpdEFuaW1hdGlvbkV2ZW50SW5pdDo6V2ViS2l0QW5pbWF0aW9uRXZlbnRJbml0KCkK
K3sKK30KKwogV2ViS2l0QW5pbWF0aW9uRXZlbnQ6OldlYktpdEFuaW1hdGlvbkV2ZW50KCkKICAg
ICA6IG1fZWxhcHNlZFRpbWUoMC4wKQogewpAQCAtNDIsNiArNDYsMTMgQEAgV2ViS2l0QW5pbWF0
aW9uRXZlbnQ6OldlYktpdEFuaW1hdGlvbkV2ZQogewogfQogCitXZWJLaXRBbmltYXRpb25FdmVu
dDo6V2ViS2l0QW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBX
ZWJLaXRBbmltYXRpb25FdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogRXZlbnQodHlwZSwg
aW5pdGlhbGl6ZXIpCisgICAgLCBtX2FuaW1hdGlvbk5hbWUoaW5pdGlhbGl6ZXIuYW5pbWF0aW9u
TmFtZSkKKyAgICAsIG1fZWxhcHNlZFRpbWUoaW5pdGlhbGl6ZXIuZWxhcHNlZFRpbWUpCit7Cit9
CisKIFdlYktpdEFuaW1hdGlvbkV2ZW50Ojp+V2ViS2l0QW5pbWF0aW9uRXZlbnQoKQogewogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgJKHJldmlzaW9u
IDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDE0IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgc3RydWN0IFdlYktpdEFuaW1hdGlvbkV2ZW50SW5pdCA6
IHB1YmxpYyBFdmVudEluaXQgeworICAgICAgICBXZWJLaXRBbmltYXRpb25FdmVudEluaXQoKTsK
ICAgICAgICAgCisgICAgICAgIFN0cmluZyBhbmltYXRpb25OYW1lOworICAgICAgICBkb3VibGUg
ZWxhcHNlZFRpbWU7CisgICAgfTsKKwogICAgIGNsYXNzIFdlYktpdEFuaW1hdGlvbkV2ZW50IDog
cHVibGljIEV2ZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YktpdEFuaW1hdGlvbkV2ZW50PiBjcmVhdGUoKQpAQCAtNDAsNiArNDcsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YktpdEFuaW1hdGlvbkV2ZW50KHR5cGUsIGFuaW1hdGlvbk5hbWUsIGVsYXBzZWRUaW1lKSk7CiAg
ICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViS2l0QW5pbWF0aW9uRXZlbnQ+
IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYktpdEFuaW1hdGlvbkV2
ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViS2l0QW5pbWF0aW9uRXZlbnQodHlwZSwgaW5pdGlhbGl6ZXIpKTsKKyAgICAg
ICAgfQogCiAgICAgICAgIHZpcnR1YWwgfldlYktpdEFuaW1hdGlvbkV2ZW50KCk7CiAgICAgICAg
IApAQCAtNTcsNiArNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgV2ViS2l0QW5pbWF0aW9uRXZlbnQoKTsKICAgICAgICAgV2ViS2l0QW5pbWF0aW9uRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUs
IGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgV2ViS2l0QW5pbWF0aW9uRXZlbnRJbml0Jik7CiAK
ICAgICAgICAgU3RyaW5nIG1fYW5pbWF0aW9uTmFtZTsKICAgICAgICAgZG91YmxlIG1fZWxhcHNl
ZFRpbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5p
ZGwJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlv
bkV2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQCBtb2R1bGUgZXZlbnRz
IHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3Vt
ZW50cywKKyAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgICAgQ3VzdG9tQ29uc3RydWN0
RnVuY3Rpb24KICAgICBdIFdlYktpdEFuaW1hdGlvbkV2ZW50IDogRXZlbnQgewogICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICAgIGFuaW1hdGlvbk5hbWU7CiAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgICAgICAgICAgICAgZWxhcHNlZFRpbWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAkocmV2aXNpb24g
OTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksMTIgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAgICAgCisKK1dlYktpdFRyYW5zaXRpb25FdmVu
dEluaXQ6OldlYktpdFRyYW5zaXRpb25FdmVudEluaXQoKQoreworfQorCisKIFdlYktpdFRyYW5z
aXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKICAgICA6IG1fcHJvcGVydHlOYW1l
KCkKICAgICAsIG1fZWxhcHNlZFRpbWUoMC4wKQpAQCAtNDMsNiArNDgsMTMgQEAgV2ViS2l0VHJh
bnNpdGlvbkV2ZW50OjpXZWJLaXRUcmFuc2l0aW9uRQogewogfQogCitXZWJLaXRUcmFuc2l0aW9u
RXZlbnQ6OldlYktpdFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IFdlYktpdFRyYW5zaXRpb25FdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgIDogRXZlbnQo
dHlwZSwgaW5pdGlhbGl6ZXIpCisgICAgLCBtX3Byb3BlcnR5TmFtZShpbml0aWFsaXplci5wcm9w
ZXJ0eU5hbWUpCisgICAgLCBtX2VsYXBzZWRUaW1lKGluaXRpYWxpemVyLmVsYXBzZWRUaW1lKQor
eworfQorCiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6On5XZWJLaXRUcmFuc2l0aW9uRXZlbnQoKQog
ewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaAko
cmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDE0IEBACiAjaW5jbHVkZSAiRXZlbnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgc3RydWN0IFdlYktpdFRyYW5zaXRpb25F
dmVudEluaXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKKyAgICAgICAgV2ViS2l0VHJhbnNpdGlvbkV2
ZW50SW5pdCgpOwogICAgICAgICAKKyAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKKyAgICAg
ICAgZG91YmxlIGVsYXBzZWRUaW1lOworICAgIH07CisKICAgICBjbGFzcyBXZWJLaXRUcmFuc2l0
aW9uRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViS2l0VHJhbnNpdGlvbkV2ZW50PiBjcmVhdGUoKQpAQCAtNDAsNiArNDcsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYktpdFRyYW5zaXRpb25FdmVudCh0eXBlLCBhbmltYXRpb25OYW1lLCBlbGFw
c2VkVGltZSkpOwogICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdFRy
YW5zaXRpb25FdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0VHJhbnNpdGlvbkV2ZW50KHR5cGUsIGluaXRp
YWxpemVyKSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIH5XZWJLaXRUcmFuc2l0aW9u
RXZlbnQoKTsKICAgICAgICAgCkBAIC01Nyw2ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBwcml2YXRlOgogICAgICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKTsKICAgICAgICAg
V2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgICAgIFdlYktpdFRy
YW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYktpdFRyYW5z
aXRpb25FdmVudEluaXQmKTsKIAogICAgICAgICBTdHJpbmcgbV9wcm9wZXJ0eU5hbWU7CiAgICAg
ICAgIGRvdWJsZSBtX2VsYXBzZWRUaW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1dlYktp
dFRyYW5zaXRpb25FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1dl
YktpdFRyYW5zaXRpb25FdmVudC5pZGwJKHJldmlzaW9uIDkxMjcxKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDggQEAgbW9kdWxlIGV2ZW50cyB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBMZWdh
Y3lEZWZhdWx0T3B0aW9uYWxBcmd1bWVudHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisg
ICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uCiAgICAgXSBXZWJLaXRUcmFuc2l0aW9uRXZl
bnQgOiBFdmVudCB7CiAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAg
cHJvcGVydHlOYW1lOwogICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlICAgICAgICAgICAg
IGVsYXBzZWRUaW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAkocmV2aXNpb24g
OTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorV2hlZWxFdmVu
dEluaXQ6OldoZWVsRXZlbnRJbml0KCkKK3sKK30KKwogV2hlZWxFdmVudDo6V2hlZWxFdmVudCgp
CiAgICAgOiBtX2dyYW51bGFyaXR5KFBpeGVsKQogewpAQCAtNDksNiArNTMsMTIgQEAgV2hlZWxF
dmVudDo6V2hlZWxFdmVudChjb25zdCBGbG9hdFBvaW50JgogewogfQogCitXaGVlbEV2ZW50OjpX
aGVlbEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBXaGVlbEV2ZW50
SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBNb3VzZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGlu
aXRpYWxpemVyKQorICAgICwgbV9ncmFudWxhcml0eShQaXhlbCkKK3sKK30KKwogdm9pZCBXaGVl
bEV2ZW50Ojppbml0V2hlZWxFdmVudChpbnQgcmF3RGVsdGFYLCBpbnQgcmF3RGVsdGFZLCBQYXNz
UmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVs
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCShy
ZXZpc2lvbiA5MTI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAg
IHN0cnVjdCBXaGVlbEV2ZW50SW5pdCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudEluaXQgewor
ICAgICAgICBXaGVlbEV2ZW50SW5pdCgpOworICAgIH07CisKICAgICAvLyBleHRlbnNpb246IG1v
dXNlIHdoZWVsIGV2ZW50CiAgICAgY2xhc3MgV2hlZWxFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0
ZWRFdmVudCB7CiAgICAgcHVibGljOgpAQCAtNDcsNiArNTEsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgICAgIHNjcmVlbkxvY2F0aW9uLCBwYWdlTG9jYXRpb24sIGN0cmxL
ZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXkpKTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgY29uc3QgV2hlZWxFdmVudEluaXQmIGluaXRpYWxpemVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IFdoZWVsRXZlbnQoZXZlbnRUeXBlLCBpbml0aWFsaXplcik7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGluaXRXaGVlbEV2ZW50KGludCByYXdEZWx0YVgs
IGludCByYXdEZWx0YVksIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBwYWdlWCwgaW50IHBh
Z2VZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRL
ZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSk7CkBAIC03MSw2ICs4MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICBHcmFudWxhcml0eSBncmFudWxhcml0
eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFBvaW50JiBzY3JlZW5Mb2NhdGlvbiwgY29uc3QgSW50UG9pbnQmIHBhZ2VMb2NhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5
LCBib29sIG1ldGFLZXkpOworICAgICAgICBXaGVlbEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBjb25zdCBXaGVlbEV2ZW50SW5pdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1doZWVsRXZlbnQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVs
RXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50Lmlk
bAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgLy8g
QmFzZWQgb2ZmIG9mIHByb3Bvc2VkIElETCBpbnRlcmZhY2UgZm9yIFdoZWVsRXZlbnQ6CiAgICAg
aW50ZXJmYWNlIFsKICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAorICAg
ICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbgog
ICAgIF0gV2hlZWxFdmVudCA6IFVJRXZlbnQgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
bG9uZyAgICBzY3JlZW5YOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyAgICBzY3Jl
ZW5ZOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEV2ZW50LmNwcAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorV2ViR0xDb250ZXh0RXZlbnRJbml0OjpXZWJHTENv
bnRleHRFdmVudEluaXQoKQoreworfQorCisKIFdlYkdMQ29udGV4dEV2ZW50OjpXZWJHTENvbnRl
eHRFdmVudCgpCiB7CiB9CkBAIC0zOCw2ICs0MywxMiBAQCBXZWJHTENvbnRleHRFdmVudDo6V2Vi
R0xDb250ZXh0RXZlbnQoY29uCiB7CiB9CiAKK1dlYkdMQ29udGV4dEV2ZW50OjpXZWJHTENvbnRl
eHRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkdMQ29udGV4dEV2ZW50
SW5pdCYgaW5pdGlhbGl6ZXIpCisgICAgOiBFdmVudCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAs
IG1fc3RhdHVzTWVzc2FnZShpbml0aWFsaXplci5zdGF0dXNNZXNzYWdlKQoreworfQorCiBXZWJH
TENvbnRleHRFdmVudDo6fldlYkdMQ29udGV4dEV2ZW50KCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0RXZlbnQuaAkocmV2aXNpb24gOTEy
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdHJ1Y3QgV2ViR0xDb250ZXh0RXZlbnRJbml0IDogcHVibGljIEV2ZW50SW5pdCB7CisgICAg
V2ViR0xDb250ZXh0RXZlbnRJbml0KCk7CisKKyAgICBTdHJpbmcgc3RhdHVzTWVzc2FnZTsKK307
CisKIGNsYXNzIFdlYkdMQ29udGV4dEV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gY3JlYXRlKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xDb250ZXh0RXZlbnQpOwogICAgIH0KKwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEV2ZW50PiBjcmVhdGUoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBT
dHJpbmcmIHN0YXR1c01lc3NhZ2UpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkdMQ29udGV4dEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgc3RhdHVzTWVz
c2FnZSkpOwogICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEV2ZW50
PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJHTENvbnRleHRFdmVu
dEluaXQmIGluaXRpYWxpemVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJHTENvbnRleHRFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOworICAgIH0KKwogICAgIHZpcnR1
YWwgfldlYkdMQ29udGV4dEV2ZW50KCk7CiAKICAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0
cmluZyYgc3RhdHVzTWVzc2FnZSk7CkBAIC00OSw2ICs2Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgV2ViR0xDb250ZXh0RXZlbnQoKTsKICAgICBXZWJHTENvbnRleHRFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0
IFN0cmluZyYgc3RhdHVzTWVzc2FnZSk7CisgICAgV2ViR0xDb250ZXh0RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJHTENvbnRleHRFdmVudEluaXQmKTsKIAogICAgIFN0
cmluZyBtX3N0YXR1c01lc3NhZ2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0RXZlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dEV2ZW50LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDggQEAgbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCiAgICAg
ICAgIENvbmRpdGlvbmFsPVdFQkdMLAogICAgICAgICBMZWdhY3lEZWZhdWx0T3B0aW9uYWxBcmd1
bWVudHMsCisgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICAgIEN1c3RvbUNvbnN0cnVj
dEZ1bmN0aW9uCiAgICAgXSBXZWJHTENvbnRleHRFdmVudCA6IEV2ZW50IHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdGF0dXNNZXNzYWdlOwogICAgICAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkIGluaXRFdmVudChpbiBET01TdHJpbmcgZXZlbnRUeXBlQXJnLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMzMSwxMCAr
MzMxLDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9
VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaG1vdmU7
CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1
bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaGVuZDsKICAgICAgICAgYXR0cmlidXRlIFtDb25k
aXRpb25hbD1UT1VDSF9FVkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRv
dWNoY2FuY2VsOwotCi0gICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9REVWSUNFX09SSUVO
VEFUSU9OLEVuYWJsZWRBdFJ1bnRpbWVdIERldmljZU1vdGlvbkV2ZW50Q29uc3RydWN0b3IgRGV2
aWNlTW90aW9uRXZlbnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9REVWSUNFX09S
SUVOVEFUSU9OLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50TGlzdGVuZXIgb25kZXZpY2Vtb3Rpb247
Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9REVWSUNFX09SSUVOVEFUSU9OLEVuYWJs
ZWRBdFJ1bnRpbWVdIERldmljZU9yaWVudGF0aW9uRXZlbnRDb25zdHJ1Y3RvciBEZXZpY2VPcmll
bnRhdGlvbkV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPURFVklDRV9PUklF
TlRBVElPTixFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9uZGV2aWNlb3JpZW50YXRp
b247CiAKICAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCkBAIC01MTMsMjkgKzUxMCwz
NyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIs
Q29uZGl0aW9uYWw9V0VCX0FVRElPLEVuYWJsZWRBdFJ1bnRpbWVdIEF1ZGlvQ29udGV4dENvbnN0
cnVjdG9yIHdlYmtpdEF1ZGlvQ29udGV4dDsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCiAg
ICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9V0VCX0FVRElPXSBBdWRpb1Bhbm5lck5vZGVD
b25zdHJ1Y3RvciB3ZWJraXRBdWRpb1Bhbm5lck5vZGU7IC8vIE5lZWRlZCBmb3IgcGFubmluZyBt
b2RlbCBjb25zdGFudHMKIAotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRDb25zdHJ1Y3RvciBFdmVu
dDsKLSAgICAgICAgYXR0cmlidXRlIEJlZm9yZUxvYWRFdmVudENvbnN0cnVjdG9yIEJlZm9yZUxv
YWRFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIEhhc2hDaGFuZ2VFdmVudENvbnN0cnVjdG9yIEhh
c2hDaGFuZ2VFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIEtleWJvYXJkRXZlbnRDb25zdHJ1Y3Rv
ciBLZXlib2FyZEV2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgTW91c2VFdmVudENvbnN0cnVjdG9y
IE1vdXNlRXZlbnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3Ig
TXV0YXRpb25FdmVudDsKLSAgICAgICAgYXR0cmlidXRlIE92ZXJmbG93RXZlbnRDb25zdHJ1Y3Rv
ciBPdmVyZmxvd0V2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgUGFnZVRyYW5zaXRpb25FdmVudENv
bnN0cnVjdG9yIFBhZ2VUcmFuc2l0aW9uRXZlbnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBQcm9ncmVz
c0V2ZW50Q29uc3RydWN0b3IgUHJvZ3Jlc3NFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIFRleHRF
dmVudENvbnN0cnVjdG9yIFRleHRFdmVudDsKLSAgICAgICAgYXR0cmlidXRlIFVJRXZlbnRDb25z
dHJ1Y3RvciBVSUV2ZW50OwotICAgICAgICBhdHRyaWJ1dGUgV2ViS2l0QW5pbWF0aW9uRXZlbnRD
b25zdHJ1Y3RvciBXZWJLaXRBbmltYXRpb25FdmVudDsKLSAgICAgICAgYXR0cmlidXRlIFdlYktp
dFRyYW5zaXRpb25FdmVudENvbnN0cnVjdG9yIFdlYktpdFRyYW5zaXRpb25FdmVudDsKLSAgICAg
ICAgYXR0cmlidXRlIFdoZWVsRXZlbnRDb25zdHJ1Y3RvciBXaGVlbEV2ZW50OwotICAgICAgICBh
dHRyaWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50OworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRDb25zdHJ1Y3RvciBFdmVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBv
cGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgQ3VzdG9tRXZlbnRDb25zdHJ1Y3RvciBDdXN0b21F
dmVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUg
QmVmb3JlTG9hZEV2ZW50Q29uc3RydWN0b3IgQmVmb3JlTG9hZEV2ZW50OyAvLyBVc2FibGUgd2l0
aCB0aGUgbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBVSUV2ZW50Q29uc3RydWN0b3Ig
VUlFdmVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1
dGUgUHJvZ3Jlc3NFdmVudENvbnN0cnVjdG9yIFByb2dyZXNzRXZlbnQ7IC8vIFVzYWJsZSB3aXRo
IHRoZSBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIE1vdXNlRXZlbnRDb25zdHJ1Y3Rv
ciBNb3VzZUV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisgICAgICAgIGF0
dHJpYnV0ZSBLZXlib2FyZEV2ZW50Q29uc3RydWN0b3IgS2V5Ym9hcmRFdmVudDsgLy8gVXNhYmxl
IHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgV2hlZWxFdmVudENvbnN0
cnVjdG9yIFdoZWVsRXZlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAg
ICAgYXR0cmlidXRlIEhhc2hDaGFuZ2VFdmVudENvbnN0cnVjdG9yIEhhc2hDaGFuZ2VFdmVudDsg
Ly8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgTWVzc2Fn
ZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9w
ZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBUZXh0RXZlbnRDb25zdHJ1Y3RvciBUZXh0RXZlbnQ7
IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFdlYktp
dEFuaW1hdGlvbkV2ZW50Q29uc3RydWN0b3IgV2ViS2l0QW5pbWF0aW9uRXZlbnQ7IC8vIFVzYWJs
ZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFdlYktpdFRyYW5zaXRp
b25FdmVudENvbnN0cnVjdG9yIFdlYktpdFRyYW5zaXRpb25FdmVudDsgLy8gVXNhYmxlIHdpdGgg
dGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgRXJyb3JFdmVudENvbnN0cnVjdG9y
IEVycm9yRXZlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0
cmlidXRlIENvbXBvc2l0aW9uRXZlbnRDb25zdHJ1Y3RvciBDb21wb3NpdGlvbkV2ZW50OyAvLyBV
c2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBQYWdlVHJhbnNp
dGlvbkV2ZW50Q29uc3RydWN0b3IgUGFnZVRyYW5zaXRpb25FdmVudDsgLy8gVXNhYmxlIHdpdGgg
dGhlIG5ldyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgUG9wU3RhdGVFdmVudENvbnN0cnVj
dG9yIFBvcFN0YXRlRXZlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAg
ICAgYXR0cmlidXRlIE92ZXJmbG93RXZlbnRDb25zdHJ1Y3RvciBPdmVyZmxvd0V2ZW50OyAvLyBV
c2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBNdXRhdGlvbkV2
ZW50Q29uc3RydWN0b3IgTXV0YXRpb25FdmVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVy
YXRvcgorCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTXSBUb3Vj
aEV2ZW50Q29uc3RydWN0b3IgVG91Y2hFdmVudDsKKyAgICAgICAgYXR0cmlidXRlIFtDb25kaXRp
b25hbD1ERVZJQ0VfT1JJRU5UQVRJT04sRW5hYmxlZEF0UnVudGltZV0gRGV2aWNlTW90aW9uRXZl
bnRDb25zdHJ1Y3RvciBEZXZpY2VNb3Rpb25FdmVudDsKKyAgICAgICAgYXR0cmlidXRlIFtDb25k
aXRpb25hbD1ERVZJQ0VfT1JJRU5UQVRJT04sRW5hYmxlZEF0UnVudGltZV0gRGV2aWNlT3JpZW50
YXRpb25FdmVudENvbnN0cnVjdG9yIERldmljZU9yaWVudGF0aW9uRXZlbnQ7CisKICAgICAgICAg
YXR0cmlidXRlIEV2ZW50RXhjZXB0aW9uQ29uc3RydWN0b3IgRXZlbnRFeGNlcHRpb247CiAKICAg
ICAgICAgYXR0cmlidXRlIFdlYktpdENTU0tleWZyYW1lUnVsZUNvbnN0cnVjdG9yIFdlYktpdENT
U0tleWZyYW1lUnVsZTsKICAgICAgICAgYXR0cmlidXRlIFdlYktpdENTU0tleWZyYW1lc1J1bGVD
b25zdHJ1Y3RvciBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOwogCiAgICAgICAgIGF0dHJpYnV0ZSBb
SlNDQ3VzdG9tR2V0dGVyXSBXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3RvciBXZWJLaXRDU1NNYXRy
aXg7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKLQotICAgICAgICBhdHRyaWJ1dGUg
W0pTQ0N1c3RvbUdldHRlcl0gV2ViS2l0UG9pbnRDb25zdHJ1Y3RvciBXZWJLaXRQb2ludDsgLy8g
VXNhYmxlIHdpdGggbmV3IHRoZSBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3Rv
bUdldHRlcl0gV2ViS2l0UG9pbnRDb25zdHJ1Y3RvciBXZWJLaXRQb2ludDsgLy8gVXNhYmxlIHdp
dGggdGhlIG5ldyBvcGVyYXRvcgogCiAgICAgICAgIGF0dHJpYnV0ZSBDbGlwYm9hcmRDb25zdHJ1
Y3RvciBDbGlwYm9hcmQ7CiAKQEAgLTU0OCw3ICs1NTMsNyBAQCBtb2R1bGUgd2luZG93IHsKICAg
ICAgICAgYXR0cmlidXRlIFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0b3IgUmFuZ2VFeGNlcHRpb247
CiAKICNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21H
ZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7IC8vIFVzYWJsZSB3aXRo
IG5ldyB0aGUgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIEV2
ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcg
b3BlcmF0b3IKICNlbmRpZgogCiAgICAgICAgIC8vIE1vemlsbGEgaGFzIGEgc2VwYXJhdGUgWE1M
RG9jdW1lbnQgb2JqZWN0IGZvciBYTUwgZG9jdW1lbnRzLiAKQEAgLTU3OSw3ICs1ODQsNyBAQCBt
b2R1bGUgd2luZG93IHsKIAogI2lmIGRlZmluZWQoRU5BQkxFX1dFQl9TT0NLRVRTKSAmJiBFTkFC
TEVfV0VCX1NPQ0tFVFMKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsRW5hYmxl
ZEF0UnVudGltZV0gV2ViU29ja2V0Q29uc3RydWN0b3IgV2ViU29ja2V0OyAvLyBVc2FibGUgd2l0
aCB0aGUgbmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBDbG9zZUV2ZW50Q29uc3RydWN0
b3IgQ2xvc2VFdmVudDsKKyAgICAgICAgYXR0cmlidXRlIENsb3NlRXZlbnRDb25zdHJ1Y3RvciBD
bG9zZUV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCiAjZW5kaWYKIAogICAg
ICAgICBhdHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwpAQCAtNzc4LDggKzc4
Myw2IEBAIG1vZHVsZSB3aW5kb3cgewogCiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9
REFUQUJBU0VdIFNRTEV4Y2VwdGlvbkNvbnN0cnVjdG9yIFNRTEV4Y2VwdGlvbjsKIAotICAgICAg
ICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVRPVUNIX0VWRU5UU10gVG91Y2hFdmVudENvbnN0cnVj
dG9yIFRvdWNoRXZlbnQ7Ci0KICAgICAgICAgYXR0cmlidXRlIERPTUZvcm1EYXRhQ29uc3RydWN0
b3IgRm9ybURhdGE7CiAKICAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1CTE9CfEZJTEVf
U1lTVEVNXSBGaWxlRXJyb3JDb25zdHJ1Y3RvciBGaWxlRXJyb3I7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2
LDM0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IENsb3NlRXZlbnRJbml0IDog
cHVibGljIEV2ZW50SW5pdCB7CisgICAgQ2xvc2VFdmVudEluaXQoKQorICAgICAgICA6IHdhc0Ns
ZWFuKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHdhc0NsZWFuOworfTsKKwogY2xh
c3MgQ2xvc2VFdmVudCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBib29s
IGlzQ2xvc2VFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbG9zZUV2ZW50PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbG9zZUV2ZW50KTsKKyAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbG9zZUV2
ZW50PiBjcmVhdGUoYm9vbCB3YXNDbGVhbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xvc2VFdmVudCh3YXNDbGVhbikpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsb3NlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IENs
b3NlRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0aWFsaXplcikpOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBpc0Nsb3NlRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2b2lk
IGluaXRDbG9zZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUs
IGJvb2wgY2FuY2VsYWJsZSwgYm9vbCB3YXNDbGVhbikKICAgICB7CiAgICAgICAgIGlmIChkaXNw
YXRjaGVkKCkpCkBAIC01OCwxMCArNzcsMjIgQEAgcHVibGljOgogICAgIGJvb2wgd2FzQ2xlYW4o
KSBjb25zdCB7IHJldHVybiBtX3dhc0NsZWFuOyB9CiAKIHByaXZhdGU6CisgICAgQ2xvc2VFdmVu
dCgpCisgICAgICAgIDogbV93YXNDbGVhbihmYWxzZSkKKyAgICB7CisgICAgfQorCiAgICAgQ2xv
c2VFdmVudChib29sIHdhc0NsZWFuKQogICAgICAgICA6IEV2ZW50KGV2ZW50TmFtZXMoKS5jbG9z
ZUV2ZW50LCBmYWxzZSwgZmFsc2UpCiAgICAgICAgICwgbV93YXNDbGVhbih3YXNDbGVhbikKLSAg
ICB7IH0KKyAgICB7CisgICAgfQorCisgICAgQ2xvc2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGNvbnN0IENsb3NlRXZlbnRJbml0JiBpbml0aWFsaXplcikKKyAgICAgICAgOiBFdmVu
dCh0eXBlLCBpbml0aWFsaXplcikKKyAgICAgICAgLCBtX3dhc0NsZWFuKGluaXRpYWxpemVyLndh
c0NsZWFuKQorICAgIHsKKyAgICB9CiAKICAgICBib29sIG1fd2FzQ2xlYW47CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9DbG9zZUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL0Nsb3NlRXZlbnQuaWRsCShyZXZpc2lvbiA5MTI3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvQ2xvc2VFdmVudC5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDkgKzMyLDEyIEBAIG1vZHVsZSBldmVudHMgewogCiAgICAgaW50ZXJmYWNlIFsK
ICAgICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAorICAgICAgICBDYW5CZUNv
bnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbgogICAgIF0gQ2xvc2VF
dmVudCA6IEV2ZW50IHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3YXNDbGVhbjsK
LSAgICB2b2lkIGluaXRDbG9zZUV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLCBpbiBib29sZWFu
IGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxlQXJnLCBpbiBib29sZWFuIHdhc0Ns
ZWFuQXJnKTsKLX07CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHdhc0NsZWFu
OworCisgICAgICAgIHZvaWQgaW5pdENsb3NlRXZlbnQoaW4gRE9NU3RyaW5nIHR5cGVBcmcsIGlu
IGJvb2xlYW4gY2FuQnViYmxlQXJnLCBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsIGluIGJvb2xl
YW4gd2FzQ2xlYW5BcmcpOworICAgIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gOTEyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4MywxMCBAQCBt
b2R1bGUgdGhyZWFkcyB7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFH
RV9DUFAKICAgICAgICAgLy8gQ29uc3RydWN0b3JzCi0gICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdl
RXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudENv
bnN0cnVjdG9yIEV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisgICAgICAg
IGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7IC8vIFVzYWJs
ZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIEVycm9yRXZlbnRDb25z
dHJ1Y3RvciBFcnJvckV2ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisKICAg
ICAgICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3RydWN0b3IgV29ya2VyTG9jYXRpb247
CiAKICNpZiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcKQEAgLTkyLDcgKzk1LDcgQEAgbW9kdWxl
IHRocmVhZHMgewogI2lmIEVOQUJMRV9FVkVOVFNPVVJDRQogICAgICAgICBhdHRyaWJ1dGUgW0pT
Q0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciBFdmVudFNvdXJjZTsKICNlbmRp
ZgotICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0
ZXJdIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7IC8vIFVzYWJsZSB3
aXRoIHRoZSBuZXcgb3BlcmF0b3IKICNpZiBkZWZpbmVkKEVOQUJMRV9XRUJfU09DS0VUUykgJiYg
RU5BQkxFX1dFQl9TT0NLRVRTCiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLEVu
YWJsZWRBdFJ1bnRpbWVdIFdlYlNvY2tldENvbnN0cnVjdG9yIFdlYlNvY2tldDsgLy8gVXNhYmxl
IHdpdGggdGhlIG5ldyBvcGVyYXRvcgogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105451</attachid>
            <date>2011-08-28 16:30:27 -0700</date>
            <delta_ts>2011-08-28 16:41:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63878-20110828163026.patch</filename>
            <type>text/plain</type>
            <size>29416</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDgtMjggIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY29uc3RydWN0
b3Igc3ludGF4IGZvciBFdmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGJhc2ljIHN1cHBvcnQgZm9yIEV2ZW50IGNvbnN0cnVjdG9ycywgc3Rh
cnRpbmcgd2l0aCBqdXN0IHN1cHBvcnRpbmcKKyAgICAgICAgdGhlIGNvbnN0cnVjdG9yIGZvciB0
aGUgYmFzZSBFdmVudCBjbGFzcyBhbmQganVzdCBKU0Mgc3VwcG9ydC4gIFRoaXMgbGF5cworICAg
ICAgICB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBvdGhlciBldmVudHMgYXMgd2VsbC4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9ldmVudC1jb25zdHJ1Y3RvcnMuaHRtbAorCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBVc2VKU0MuY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5P
bmUuY3BwOgorICAgICAgICBBZGQgZmlsZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmlj
L0V2ZW50Q29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICBBZGQgYmluZGluZyBhZ25vc3Rp
YyBoZWFkZXIgdGhhdCBkZWZpbmVzIHRoZSBFdmVudCBpbml0aWFsaXplcnMKKyAgICAgICAgdXNp
bmcgYSBtYWNybyBiYXNlZCBEU0wuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q29u
c3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3RydWN0SlNFdmVudFdpdGhJbml0aWFsaXplcik6CisgICAgICAgIEFkZCBKU0MgaW1wbGVtZW50
YXRpb24gb2YgRXZlbnQgaW5pdGlhbGl6ZXIgRFNMLgorCisgICAgICAgICogZG9tL0V2ZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SW5pdDo6RXZlbnRJbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50OjpFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgQWRkIEV2ZW50IGluaXRpYWxpemVyIGlu
dGVyZmFjZSBmb3IgYmFzZSBFdmVudC4KKworICAgICAgICAqIGRvbS9FdmVudC5pZGw6CisgICAg
ICAgIE1hcmsgRXZlbnQgYXMgaGF2aW5nIGEgY3VzdG9tIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLgor
CiAyMDExLTA4LTI3ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtblRleHQoKSBjb3VsZCBjb25zdHJ1Y3QgV1RGOjpT
dHJpbmcgcmVzdWx0IG1vcmUgZWZmaWNpZW50bHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDkzOTUwKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNjQ1LDYgKzY0NSw3IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlC
YXNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJp
dHlCYXNlLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3Vy
aXR5LmggXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvRXZlbnRDb25zdHJ1Y3Rv
cnMuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9HZW5lcmljQmluZGluZy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaCBcCkBAIC03MTgsNiArNzE5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VudHJ5Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFbnRyeVN5bmNDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudENvbnN0cnVjdG9ycy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291
cmNlQ3VzdG9tLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCShyZXZpc2lvbiA5Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0V2ZW50Q29u
c3RydWN0b3JzLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCiAgICAgYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3Vy
Y2VDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5Mzk1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTczMCw2ICsxNzMw
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eUJhc2UuaCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvZ2VuZXJpYy9FdmVudENvbnN0cnVjdG9ycy5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy9nZW5lcmljL0dlbmVyaWNCaW5kaW5nLmgnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oJywKQEAgLTE4MTgs
NiArMTgxOSw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNFbnRyeVN5bmNDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNFdmVu
dExpc3RlbmVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsNyBAQCB2OCB7CiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGlu
Z3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmNwcCBcCisgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAgXAogICAgICAgICBiaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVu
dFNvdXJjZUN1c3RvbS5jcHAgXApAQCAtMTIzNSw2ICsxMjM2LDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggXAogICAgIGJpbmRpbmdzL1NjcmlwdENv
bnRyb2xsZXJCYXNlLmggXAogICAgIGJpbmRpbmdzL2dlbmVyaWMvQWN0aXZlRE9NQ2FsbGJhY2su
aCBcCisgICAgYmluZGluZ3MvZ2VuZXJpYy9FdmVudENvbnN0cnVjdG9ycy5oIFwKICAgICBiaW5k
aW5ncy9nZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAogCiB2OCB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTM5
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTgzOTcsNiArNTgzOTcsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4K
IAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGdlbmVyaWNcRXZlbnRD
b25zdHJ1Y3RvcnMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGdlbmVyaWNcR2VuZXJpY0JpbmRpbmcuaCIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KQEAgLTYxMDA5LDYgKzYxMDEzLDU4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0V2ZW50Q29u
c3RydWN0b3JzLmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+
CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgor
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
CU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
CS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxX
aW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRv
b2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9k
dWN0aW9ufFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJ
CQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZlbnRDdXN0b20uY3BwIgogCQkJCQk+CiAJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTM5NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUyNDMsNiArNTI0Myw4IEBACiAJCUJDRTFDNDQwMEQ5ODMwRjQwMDNCMDJGMiAvKiBKU0xvY2F0
aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRTFDNDNGMEQ5ODMwRjQwMDNCMDJGMiAvKiBKU0xvY2F0aW9uQ3VzdG9tLmNwcCAqLzsg
fTsKIAkJQkNFM0JFQzIwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTNCRUMwMEQyMjJCMUQw
MDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDRTNCRUMzMEQyMjJCMUQwMDdF
MDZFNCAvKiBUYWdOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFM0JFQzEwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmggKi87
IH07CisJCUJDRTQzODk3MTQwQjAwNTEwMDVFNDM3RSAvKiBFdmVudENvbnN0cnVjdG9ycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNDM4OTYxNDBC
MDA1MTAwNUU0MzdFIC8qIEV2ZW50Q29uc3RydWN0b3JzLmggKi87IH07CisJCUJDRTQzODlBMTQw
QjAwNzMwMDVFNDM3RSAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQzODk5MTQwQjAwNzMwMDVFNDM3RSAv
KiBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsKIAkJQkNFNDQxMzMxMkY3NDhFMjAwOUI4
NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTQ0MTMxMTJGNzQ4RTIwMDlCODRCOCAvKiBSZW5kZXJDb21i
aW5lVGV4dC5jcHAgKi87IH07CiAJCUJDRTQ0MTM0MTJGNzQ4RTIwMDlCODRCOCAvKiBSZW5kZXJD
b21iaW5lVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFNDQxMzIxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggKi87IH07
CiAJCUJDRTQ0MTM2MTJGNzQ5MEIwMDlCODRCOCAvKiBGb250V2lkdGhWYXJpYW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0NDEzNTEyRjc0OTBC
MDA5Qjg0QjggLyogRm9udFdpZHRoVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTk2MCw2ICsxMTk2Miw4IEBACiAJCUJDRTFDNDNG
MEQ5ODMwRjQwMDNCMDJGMiAvKiBKU0xvY2F0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTG9jYXRpb25DdXN0b20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0UzQkVDMDBEMjIyQjFEMDA3RTA2RTQgLyogVGFnTm9kZUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGFnTm9kZUxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0UzQkVDMTBEMjIyQjFEMDA3RTA2RTQg
LyogVGFnTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFnTm9k
ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFNDM4OTYxNDBCMDA1MTAw
NUU0MzdFIC8qIEV2ZW50Q29uc3RydWN0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEV2ZW50Q29uc3RydWN0b3JzLmg7IHBhdGggPSBnZW5lcmljL0V2ZW50Q29uc3RydWN0
b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRTQzODk5MTQwQjAwNzMwMDVF
NDM3RSAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0U0NDEzMTEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQ29tYmluZVRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0U0NDEzMjEyRjc0OEUyMDA5
Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyQ29tYmluZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNFNDQxMzUxMkY3NDkwQjAwOUI4NEI4IC8qIEZvbnRXaWR0aFZhcmlhbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFdpZHRoVmFyaWFudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTg0NjMsNiArMTg0NjcsNyBAQAogCQkJCUE2MjJBOEY1MTIyQzQ0
QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHkuaCAqLywKIAkJCQlBNjIyQThGNjEyMkM0NEE2
MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi8sCiAJCQkJQTYyMkE4RjcxMjJD
NDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuaCAqLywKKwkJCQlCQ0U0Mzg5NjE0
MEIwMDUxMDA1RTQzN0UgLyogRXZlbnRDb25zdHJ1Y3RvcnMuaCAqLywKIAkJCQlBNjIyQThGOTEy
MkM0NEE2MDBBNzg1QjMgLyogR2VuZXJpY0JpbmRpbmcuaCAqLywKIAkJCSk7CiAJCQluYW1lID0g
Z2VuZXJpYzsKQEAgLTE4NTI5LDYgKzE4NTM0LDcgQEAKIAkJCQk2NUUwRTk0MzExMzNDODlGMDBC
NENCMTAgLyogSlNET01XcmFwcGVyLmggKi8sCiAJCQkJRjNENDYxNDYxMTYxRDUzMjAwQ0EwRDA5
IC8qIEpTRXJyb3JIYW5kbGVyLmNwcCAqLywKIAkJCQlGM0Q0NjE0NzExNjFENTMyMDBDQTBEMDkg
LyogSlNFcnJvckhhbmRsZXIuaCAqLywKKwkJCQlCQ0U0Mzg5OTE0MEIwMDczMDA1RTQzN0UgLyog
SlNFdmVudENvbnN0cnVjdG9ycy5jcHAgKi8sCiAJCQkJQkM2MDkwMUUwRTkxQjhFQzAwMEM2OEI1
IC8qIEpTRXZlbnRUYXJnZXQuY3BwICovLAogCQkJCUJDNjA5MDFEMEU5MUI4RUMwMDBDNjhCNSAv
KiBKU0V2ZW50VGFyZ2V0LmggKi8sCiAJCQkJMzMxNEFDRTkxMDg5MjA4NjAwMEYwRTU2IC8qIEpT
RXhjZXB0aW9uQmFzZS5jcHAgKi8sCkBAIC0yMzQwOSw2ICsyMzQxNSw3IEBACiAJCQkJREY5QUZE
NzIxM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAwRjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9s
bGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBBM0E3MzExNDA1QTM5ODAwRkI4
RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFNDM4
OTcxNDBCMDA1MTAwNUU0MzdFIC8qIEV2ZW50Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTI2MjE0LDYgKzI2MjIxLDcgQEAKIAkJCQlGRDIzQTEyNTEzRjVGQTU5MDBGNjcwMDEgLyog
SlNNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEx
NDE0QjUxM0EwRjA1MDAwMTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlERjlBRkQ3MzEzRkMzMUQ4MDAxNUZFQjcgLyogTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUJDRTQzODlBMTQwQjAw
NzMwMDVFNDM3RSAvKiBKU0V2ZW50Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9FdmVudENvbnN0cnVjdG9ycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvRXZlbnRDb25zdHJ1
Y3RvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMv
RXZlbnRDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRXZlbnRDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBFdmVudENvbnN0cnVj
dG9yc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBJTlNUQU5USUFURV9JTklU
SUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9SX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05B
UllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisgICAgXAor
ICAgIERJQ1RJT05BUllfU1RBUlQoRXZlbnQpIFwKKyAgICAgICAgRklMTF9QUk9QRVJUWShidWJi
bGVzKSBcCisgICAgICAgIEZJTExfUFJPUEVSVFkoY2FuY2VsYWJsZSkgXAorICAgIERJQ1RJT05B
UllfRU5EKEV2ZW50KQorCisKKyNkZWZpbmUgSU5TVEFOVElBVEVfQUxMX0VWRU5UX0lOSVRJQUxJ
WklOR19DT05TVFJVQ1RPUlMoRElDVElPTkFSWV9TVEFSVCwgRElDVElPTkFSWV9FTkQsIEZJTExf
UEFSRU5UX1BST1BFUlRJRVMsIEZJTExfUFJPUEVSVFkpIFwKKyAgICBJTlNUQU5USUFURV9JTklU
SUFMSVpJTkdfQ09OU1RSVUNUT1JfRk9SX0VWRU5UKERJQ1RJT05BUllfU1RBUlQsIERJQ1RJT05B
UllfRU5ELCBGSUxMX1BBUkVOVF9QUk9QRVJUSUVTLCBGSUxMX1BST1BFUlRZKSBcCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV2ZW50Q29uc3RydWN0b3JzX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNw
cAkocmV2aXNpb24gOTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRp
bmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVk
ZSAiSlNEb2N1bWVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNFbGVtZW50Q3VzdG9tLmNwcCIK
ICNpbmNsdWRlICJKU0Vycm9ySGFuZGxlci5jcHAiCisjaW5jbHVkZSAiSlNFdmVudENvbnN0cnVj
dG9ycy5jcHAiCiAjaW5jbHVkZSAiSlNFdmVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmNwcCIKICNpbmNsdWRlICJKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDb25zdHJ1Y3RvcnMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudENv
bnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50Q29uc3RydWN0b3JzLmgiCisK
KyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKKyNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIHZvaWQgY29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IHZhbHVlLnRvQm9vbGVhbihleGVj
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdD4KK3N0YXRpYyBib29sIHRyeUdldFBy
b3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0LCBjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFJlc3VsdCYgcmVzdWx0KQoreworICAgIElkZW50aWZpZXIg
aWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGlu
aXRpYWxpemVyT2JqZWN0KTsKKyAgICBpZiAoaW5pdGlhbGl6ZXJPYmplY3QtPmdldFByb3BlcnR5
U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkgeworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisgICAgICAgIAorICAgICAg
ICBjb252ZXJ0VmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogTm90IGFsbCBjb252ZXJzaW9ucyByZXF1aXJlIHRoaXMgZXhjZXB0aW9uIGNoZWNr
LgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb25zdHJ1Y3RvciwgdHlwZW5hbWUgRXZlbnRUeXBlLCB0eXBlbmFtZSBFdmVudEluaXRU
eXBlPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTRXZlbnRXaXRoSW5pdGlhbGl6
ZXIoRXhlY1N0YXRlKiBleGVjLCBib29sICgqZmlsbGVyKShFdmVudEluaXRUeXBlJiwgRXhlY1N0
YXRlKiwgSlNPYmplY3QqKSkKK3sKKyAgICBDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0
YXRpY19jYXN0PENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworCisgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogZXhlY3V0aW9uQ29udGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkNvbnN0
cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSk7CisK
KyAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gdXN0cmluZ1RvQXRvbWljU3RyaW5nKGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAg
ICBFdmVudEluaXRUeXBlIGV2ZW50SW5pdDsKKworICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7CisgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdp
bGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KKyAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVy
T2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAvLyBB
dHRlbXB0IHRvIGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KKyAgICAgICAgaWYgKCFmaWxsZXIoZXZl
bnRJbml0LCBleGVjLCBpbml0aWFsaXplck9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIFJlZlB0cjxFdmVudFR5
cGU+IGV2ZW50ID0gRXZlbnRUeXBlOjpjcmVhdGUoZXZlbnRUeXBlLCBldmVudEluaXQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgZXZlbnQuZ2V0KCkpKTsKK30KKworI2RlZmluZSBESUNUSU9OQVJZX1NUQVJUKEV2
ZW50KSBcCisgICAgc3RhdGljIGJvb2wgZmlsbCMjRXZlbnQjI0luaXQoRXZlbnQjI0luaXQmIGV2
ZW50SW5pdCwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QpIFwK
KyAgICB7CisKKyNkZWZpbmUgRElDVElPTkFSWV9FTkQoRXZlbnQpIFwKKyAgICAgICAgcmV0dXJu
IHRydWU7IFwKKyAgICB9IFwKKyAgICBcCisgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKUyMjRXZlbnQjI0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKUyMjRXZlbnQoRXhlY1N0YXRlKiBl
eGVjKSBcCisgICAgeyBcCisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RKU0V2ZW50V2l0aEluaXRp
YWxpemVyPEpTIyNFdmVudCMjQ29uc3RydWN0b3IsIEV2ZW50LCBFdmVudCMjSW5pdD4oZXhlYywg
ZmlsbCMjRXZlbnQjI0luaXQpOyBcCisgICAgfQorCisjZGVmaW5lIEZJTExfUEFSRU5UX1BST1BF
UlRJRVMocGFyZW50KSBcCisgICAgaWYgKCFmaWxsIyNwYXJlbnQjI0luaXQoZXZlbnRJbml0LCBl
eGVjLCBpbml0aWFsaXplck9iamVjdCkpIFwKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjZGVm
aW5lIEZJTExfUFJPUEVSVFkocHJvcGVydHlOYW1lKSBcCisgICAgaWYgKCF0cnlHZXRQcm9wZXJ0
eShleGVjLCBpbml0aWFsaXplck9iamVjdCwgI3Byb3BlcnR5TmFtZSwgZXZlbnRJbml0LnByb3Bl
cnR5TmFtZSkpIFwKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCitJTlNUQU5USUFURV9BTExfRVZF
TlRfSU5JVElBTElaSU5HX0NPTlNUUlVDVE9SUyhESUNUSU9OQVJZX1NUQVJULCBESUNUSU9OQVJZ
X0VORCwgRklMTF9QQVJFTlRfUFJPUEVSVElFUywgRklMTF9QUk9QRVJUWSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiA5Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDE1ICsy
MiwyMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKwogI2lu
Y2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0KICNp
bmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK0V2ZW50SW5pdDo6RXZlbnRJbml0KCkKKyAgICA6IGJ1YmJsZXMoZmFsc2UpCisg
ICAgLCBjYW5jZWxhYmxlKGZhbHNlKQoreworfQorCisKIEV2ZW50OjpFdmVudCgpCiAgICAgOiBt
X2NhbkJ1YmJsZShmYWxzZSkKICAgICAsIG1fY2FuY2VsYWJsZShmYWxzZSkKQEAgLTYwLDYgKzY3
LDIxIEBAIEV2ZW50OjpFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHkKIHsKIH0KIAor
RXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBFdmVudElu
aXQmIGluaXRpYWxpemVyKQorICAgIDogbV90eXBlKGV2ZW50VHlwZSkKKyAgICAsIG1fY2FuQnVi
YmxlKGluaXRpYWxpemVyLmJ1YmJsZXMpCisgICAgLCBtX2NhbmNlbGFibGUoaW5pdGlhbGl6ZXIu
Y2FuY2VsYWJsZSkKKyAgICAsIG1fcHJvcGFnYXRpb25TdG9wcGVkKGZhbHNlKQorICAgICwgbV9p
bW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCisgICAgLCBtX2RlZmF1bHRQcmV2ZW50
ZWQoZmFsc2UpCisgICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNlKQorICAgICwgbV9jYW5jZWxC
dWJibGUoZmFsc2UpCisgICAgLCBtX2V2ZW50UGhhc2UoMCkKKyAgICAsIG1fY3VycmVudFRhcmdl
dCgwKQorICAgICwgbV9jcmVhdGVUaW1lKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3Vy
cmVudFRpbWUoKSkpCit7Cit9CisKIEV2ZW50Ojp+RXZlbnQoKQogewogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50LmgJKHJldmlzaW9uIDkzOTUwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBFdmVudFRhcmdldDsKICAgICBjbGFzcyBFdmVudERpc3BhdGNoZXI7CiAKKyAgICBzdHJ1
Y3QgRXZlbnRJbml0IHsKKyAgICAgICAgRXZlbnRJbml0KCk7CisgICAgICAgIAorICAgICAgICBi
b29sIGJ1YmJsZXM7CisgICAgICAgIGJvb2wgY2FuY2VsYWJsZTsKKyAgICB9OworCiAgICAgY2xh
c3MgRXZlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudD4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgZW51bSBQaGFzZVR5cGUgeyAKQEAgLTY5LDYgKzc2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudCh0eXBl
LCBjYW5CdWJibGUsIGNhbmNlbGFibGUpKTsKICAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBF
dmVudEluaXQmIGluaXRpYWxpemVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEV2ZW50KHR5cGUsIGluaXRpYWxpemVyKSk7CisgICAgICAgIH0KKwogICAgICAg
ICB2aXJ0dWFsIH5FdmVudCgpOwogCiAgICAgICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSk7CkBAIC0xNzYs
NiArMTg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAg
RXZlbnQoKTsKICAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNh
bkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKKyAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBFdmVudEluaXQmKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRUYXJnZXQoKTsKICAgICAgICAgYm9vbCBkaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gOTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNh
bXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzLDYg
KzIzLDggQEAgbW9kdWxlIGV2ZW50cyB7CiAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MjoKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDdXN0b21Ub0pTLAorICAgICAgICBDYW5CZUNv
bnN0cnVjdGVkLAorICAgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbiwKICAgICAgICAgTm9T
dGF0aWNUYWJsZXMsCiAgICAgICAgIFBvbHltb3JwaGljCiAgICAgXSBFdmVudCB7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5Mzk1MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTA4LTI4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbnN0cnVjdG9yIHN5bnRheCBmb3IgRXZl
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBi
YXNpYyB0ZXN0IGZvciBFdmVudCBjb25zdHJ1Y3RvcnMuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50
cy9ldmVudC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy9ldmVudC1jb25zdHJ1Y3RvcnMuaHRtbDogQWRkZWQuCisKIDIwMTEtMDgtMjcgIFJv
YmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIERvbid0IHJlbHkgb24g
aGFyZGNvZGVkIHBvc2l0aW9uIGluIGFic29sdXRlLWFwcGVuZGVkLXRvLWlubGluZS5odG1sCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9ldmVudC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWNvbnN0cnVj
dG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9ldmVudC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ0IEBACitUaGlzIHRlc3RzIHRoZSBjb25zdHJ1Y3RvcnMgZm9yIGFsbCB0aGUgZXZlbnQgRE9N
IGNsYXNzZXMgdGhhdCBoYXZlIHRoZW0uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScpKS5idWJibGVzIGlzIGZhbHNlCitQQVNTIChu
ZXcgRXZlbnQoJ2V2ZW50VHlwZScpKS5jYW5jZWxhYmxlIGlzIGZhbHNlCitQQVNTIChuZXcgRXZl
bnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSkuYnVi
YmxlcyBpcyB0cnVlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1
ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSkuY2FuY2VsYWJsZSBpcyB0cnVlCitQQVNTIChuZXcgRXZl
bnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogZmFsc2UgfSkpLmJ1
YmJsZXMgaXMgdHJ1ZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB7IGJ1YmJsZXM6IHRy
dWUsIGNhbmNlbGFibGU6IGZhbHNlIH0pKS5jYW5jZWxhYmxlIGlzIGZhbHNlCitQQVNTIChuZXcg
RXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdW5kZWZpbmVk
IH0pKS5idWJibGVzIGlzIHRydWUKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJi
bGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB1bmRlZmluZWQgfSkpLmNhbmNlbGFibGUgaXMgZmFsc2UK
K1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxl
OiAwIH0pKS5idWJibGVzIGlzIHRydWUKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBi
dWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiAwIH0pKS5jYW5jZWxhYmxlIGlzIGZhbHNlCitQQVNT
IChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSB9KSkuYnViYmxlcyBpcyB0
cnVlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSB9KSkuY2Fu
Y2VsYWJsZSBpcyBmYWxzZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB7IH0pKS5idWJi
bGVzIGlzIGZhbHNlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgfSkpLmNhbmNlbGFi
bGUgaXMgZmFsc2UKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgbnVsbCkpLmJ1YmJsZXMg
aXMgZmFsc2UKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgbnVsbCkpLmNhbmNlbGFibGUg
aXMgZmFsc2UKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgdW5kZWZpbmVkKSkuYnViYmxl
cyBpcyBmYWxzZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB1bmRlZmluZWQpKS5jYW5j
ZWxhYmxlIGlzIGZhbHNlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIDApKS5idWJibGVz
IGlzIGZhbHNlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIDApKS5jYW5jZWxhYmxlIGlz
IGZhbHNlCitQQVNTIChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHdpbmRvdykpLmJ1YmJsZXMgaXMg
ZmFsc2UKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgd2luZG93KSkuY2FuY2VsYWJsZSBp
cyBmYWxzZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB3aW5kb3cpKS5idWJibGVzIGlz
IHRydWUKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgd2luZG93KSkuY2FuY2VsYWJsZSBp
cyBmYWxzZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCBkb2N1bWVudCkpLmJ1YmJsZXMg
aXMgdHJ1ZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCBkb2N1bWVudCkpLmNhbmNlbGFi
bGUgaXMgZmFsc2UKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgY29uc3RydWN0aWJsZSkp
LmJ1YmJsZXMgaXMgdHJ1ZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCBjb25zdHJ1Y3Rp
YmxlKSkuY2FuY2VsYWJsZSBpcyBmYWxzZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB7
IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIG90aGVyOiB0cnVlIH0pKS5idWJibGVz
IGlzIHRydWUKK1BBU1MgKG5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVzOiB0cnVlLCBj
YW5jZWxhYmxlOiB0cnVlLCBvdGhlcjogdHJ1ZSB9KSkuY2FuY2VsYWJsZSBpcyB0cnVlCitQQVNT
IChuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgZ2V0IGNhbmNlbGFibGUo
KSB7IHJldHVybiB0cnVlOyB9IH0pKS5idWJibGVzIGlzIHRydWUKK1BBU1MgKG5ldyBFdmVudCgn
ZXZlbnRUeXBlJywgeyBidWJibGVzOiB0cnVlLCBnZXQgY2FuY2VsYWJsZSgpIHsgcmV0dXJuIHRy
dWU7IH0gfSkpLmNhbmNlbGFibGUgaXMgdHJ1ZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUn
LCB7IGJ1YmJsZXM6IHRydWUsIGdldCBjYW5jZWxhYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0gfSkp
LmJ1YmJsZXMgaXMgdHJ1ZQorUEFTUyAobmV3IEV2ZW50KCdldmVudFR5cGUnLCB7IGJ1YmJsZXM6
IHRydWUsIGdldCBjYW5jZWxhYmxlKCkgeyByZXR1cm4gZmFsc2U7IH0gfSkpLmNhbmNlbGFibGUg
aXMgZmFsc2UKK1BBU1MgbmV3IEV2ZW50KCdldmVudFR5cGUnLCB7IGJ1YmJsZXM6IHRydWUsIGdl
dCBjYW5jZWxhYmxlKCkgeyB0aHJvdyAnQ3VzdG9tIEVycm9yJzsgfSB9KSB0aHJldyBleGNlcHRp
b24gQ3VzdG9tIEVycm9yLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWNvbnN0cnVj
dG9ycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2V2ZW50LWNv
bnN0cnVjdG9ycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
ZXZlbnQtY29uc3RydWN0b3JzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dD4KKworZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhlIGNvbnN0cnVjdG9ycyBmb3IgYWxsIHRo
ZSBldmVudCBET00gY2xhc3NlcyB0aGF0IGhhdmUgdGhlbS4iKTsKKworZnVuY3Rpb24gdGVzdCh0
b0V2YWwsIGJ1YmJsZXNFeHBlY3RlZCwgY2FuY2VsYWJsZUV4cGVjdGVkKQoreworICAgIGlmIChi
dWJibGVzRXhwZWN0ZWQpIHsKKyAgICAgICAgc2hvdWxkQmUoIigiICsgdG9FdmFsICsgIikuYnVi
YmxlcyIsICJ0cnVlIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkQmUoIigiICsgdG9F
dmFsICsgIikuYnViYmxlcyIsICJmYWxzZSIpOworICAgIH0KKworICAgIGlmIChjYW5jZWxhYmxl
RXhwZWN0ZWQpIHsKKyAgICAgICAgc2hvdWxkQmUoIigiICsgdG9FdmFsICsgIikuY2FuY2VsYWJs
ZSIsICJ0cnVlIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2hvdWxkQmUoIigiICsgdG9FdmFs
ICsgIikuY2FuY2VsYWJsZSIsICJmYWxzZSIpOworICAgIH0KK30KKworLy8gTm8gaW5pdGlhbGl6
ZXIgcGFzc2VkLgordGVzdCgibmV3IEV2ZW50KCdldmVudFR5cGUnKSIsIGZhbHNlLCBmYWxzZSk7
CisKKy8vIEJvdGggdHJ1ZS4KK3Rlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVz
OiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pIiwgdHJ1ZSwgdHJ1ZSk7CisKKy8vIE9uZSB0cnVl
LCBvbmUgZmFsc2UuCit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1
ZSwgY2FuY2VsYWJsZTogZmFsc2UgfSkiLCB0cnVlLCBmYWxzZSk7CisKKy8vIE9uZSBleHBsaWNp
dGx5IHVuZGVmaW5lZC4KK3Rlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVzOiB0
cnVlLCBjYW5jZWxhYmxlOiB1bmRlZmluZWQgfSkiLCB0cnVlLCBmYWxzZSk7CisKKy8vIE9uZSBh
IG51bWVyaWMgdmFsdWUuCit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczog
dHJ1ZSwgY2FuY2VsYWJsZTogMCB9KSIsIHRydWUsIGZhbHNlKTsKKworLy8gT25lIG1pc3Npbmcu
Cit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSB9KSIsIHRydWUs
IGZhbHNlKTsKKworLy8gRW1wdHkgaW5pdGFsaXplci4KK3Rlc3QoIm5ldyBFdmVudCgnZXZlbnRU
eXBlJywgeyB9KSIsIGZhbHNlLCBmYWxzZSk7CisKKy8vIG51bGwgaW5pdGlhbGl6ZXIuCit0ZXN0
KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIG51bGwpIiwgZmFsc2UsIGZhbHNlKTsKKworLy8gRXhw
bGljaXRseSB1bmRlZmluZWQgaW5pdGlhbGl6ZXIuCit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlw
ZScsIHVuZGVmaW5lZCkiLCBmYWxzZSwgZmFsc2UpOworCisvLyBBIG51bWJlciBhcyB0aGUgaW5p
dGlhbGl6ZXIuCisvLyBGSVhNRTogU2hvdWxkIHRoaXMgdGhyb3c/Cit0ZXN0KCJuZXcgRXZlbnQo
J2V2ZW50VHlwZScsIDApIiwgZmFsc2UsIGZhbHNlKTsKKworLy8gVGhlIHdpbmRvdyBhcyB0aGUg
aW5pdGlhbGl6ZXIuCit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHdpbmRvdykiLCBmYWxz
ZSwgZmFsc2UpOworCisvLyBUaGUgd2luZG93IGFzIHRoZSBpbml0aWFsaXplciwgYnV0IHdpdGgg
YnViYmxlcyBkZWZpbmVkIHRvIHRydWUuCit2YXIgYnViYmxlcyA9IHRydWU7Cit0ZXN0KCJuZXcg
RXZlbnQoJ2V2ZW50VHlwZScsIHdpbmRvdykiLCB0cnVlLCBmYWxzZSk7CisKKy8vIE9uZSB2YWx1
ZSBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgYSBob3N0IG9iamVjdC4KK0RvY3Vt
ZW50LnByb3RvdHlwZS5idWJibGVzID0gdHJ1ZTsKK3Rlc3QoIm5ldyBFdmVudCgnZXZlbnRUeXBl
JywgZG9jdW1lbnQpIiwgdHJ1ZSwgZmFsc2UpOworCisvLyBPbmUgdmFsdWUgZGVmaW5lZCBvbiB0
aGUgcHJvdG90eXBlIGNoYWluIG9mIGEgdmFuaWxsYSBvYmplY3QuCit2YXIgQ29uc3RydWN0aWJs
ZSA9IGZ1bmN0aW9uKCkgeyB9CitDb25zdHJ1Y3RpYmxlLnByb3RvdHlwZS5idWJibGVzID0gdHJ1
ZTsKK3ZhciBjb25zdHJ1Y3RpYmxlID0gbmV3IENvbnN0cnVjdGlibGU7Cit0ZXN0KCJuZXcgRXZl
bnQoJ2V2ZW50VHlwZScsIGNvbnN0cnVjdGlibGUpIiwgdHJ1ZSwgZmFsc2UpOworCisvLyBBZGRp
dGlvbmFsIHByb3BlcnRpZXMgb24gdGhlIGluaXRpYWxpemVyCit0ZXN0KCJuZXcgRXZlbnQoJ2V2
ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgb3RoZXI6IHRydWUg
fSkiLCB0cnVlLCB0cnVlKTsKKworLy8gT25lIGdldHRlciByZXR1cm5pbmcgdHJ1ZS4KK3Rlc3Qo
Im5ldyBFdmVudCgnZXZlbnRUeXBlJywgeyBidWJibGVzOiB0cnVlLCBnZXQgY2FuY2VsYWJsZSgp
IHsgcmV0dXJuIHRydWU7IH0gfSkiLCB0cnVlLCB0cnVlKTsKKworLy8gT25lIGdldHRlciByZXR1
cm5pbmcgZmFsc2UuCit0ZXN0KCJuZXcgRXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1
ZSwgZ2V0IGNhbmNlbGFibGUoKSB7IHJldHVybiBmYWxzZTsgfSB9KSIsIHRydWUsIGZhbHNlKTsK
KworLy8gT25lIGdldHRlciB0aHJvd3MgYW4gZXhlY2VwdGlvbi4KK3Nob3VsZFRocm93KCJuZXcg
RXZlbnQoJ2V2ZW50VHlwZScsIHsgYnViYmxlczogdHJ1ZSwgZ2V0IGNhbmNlbGFibGUoKSB7IHRo
cm93ICdDdXN0b20gRXJyb3InOyB9IH0pIikKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCg==
</data>
<flag name="review"
          id="101612"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>