<?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>183593</bug_id>
          
          <creation_ts>2018-03-13 06:39:07 -0700</creation_ts>
          <short_desc>[Nicosia] Add Cairo-specific GraphicsContext operation recorder</short_desc>
          <delta_ts>2018-11-03 09:06:05 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1406099</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-13 06:39:07 -0700</bug_when>
    <thetext>[Nicosia] Add Cairo-specific GraphicsContext operation recorder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406103</commentid>
    <comment_count>1</comment_count>
      <attachid>335691</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-13 06:57:04 -0700</bug_when>
    <thetext>Created attachment 335691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406104</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-13 06:58:09 -0700</bug_when>
    <thetext>Attachment 335691 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:50:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:69:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1406636</commentid>
    <comment_count>3</comment_count>
      <attachid>335691</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-03-15 01:18:31 -0700</bug_when>
    <thetext>Comment on attachment 335691
Patch

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

&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:41
&gt; +PlatformContextCairo&amp; getContext(PaintingOperationReplay&amp; operationReplay)

I would rename this to platformContext() we don&apos;t use get in WebKit unless using an out parameter for the return value.

&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:366
&gt; +    UNUSED_PARAM(color);

Why don&apos;t you omit the name instead?

&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:510
&gt; +    UNUSED_PARAM(fontSmoothing);

Same here.

&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:622
&gt; +            Cairo::drawLine(getContext(replayer), arg&lt;0&gt;(), arg&lt;1&gt;(), arg&lt;2&gt;(), arg&lt;3&gt;(),
&gt; +                arg&lt;4&gt;(), arg&lt;5&gt;());

This could be one line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406969</commentid>
    <comment_count>4</comment_count>
      <attachid>335691</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-16 06:48:39 -0700</bug_when>
    <thetext>Comment on attachment 335691
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:41
&gt;&gt; +PlatformContextCairo&amp; getContext(PaintingOperationReplay&amp; operationReplay)
&gt; 
&gt; I would rename this to platformContext() we don&apos;t use get in WebKit unless using an out parameter for the return value.

Somehow this clashes with GraphicsContext::platformContext(). I&apos;ll use contextForReplay() instead.

&gt;&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:366
&gt;&gt; +    UNUSED_PARAM(color);
&gt; 
&gt; Why don&apos;t you omit the name instead?

Because that then drops information about the purpose of that parameter, and it&apos;s more valuable to me to see what parameters are not being used for the given operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406970</commentid>
    <comment_count>5</comment_count>
      <attachid>335933</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-16 06:49:37 -0700</bug_when>
    <thetext>Created attachment 335933
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406971</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-16 06:51:43 -0700</bug_when>
    <thetext>Attachment 335933 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:50:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:69:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 5 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>1407033</commentid>
    <comment_count>7</comment_count>
      <attachid>335933</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-16 10:14:15 -0700</bug_when>
    <thetext>Comment on attachment 335933
Patch for landing

Clearing flags on attachment: 335933

Committed r229672: &lt;https://trac.webkit.org/changeset/229672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407034</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-16 10:14:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407035</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-16 10:15:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/38548942&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474790</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-11-03 09:06:05 -0700</bug_when>
    <thetext>Could this share code with Source/WebCore/platform/graphics/displaylists ?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335691</attachid>
            <date>2018-03-13 06:57:04 -0700</date>
            <delta_ts>2018-03-16 06:49:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183593-20180313145702.patch</filename>
            <type>text/plain</type>
            <size>50274</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ4NWM0ZDZmYjJhZDJi
MjFhZmZlN2YwYTA3NTQzZWM4YmExOTJkMy4uMzQ0NzcyNzllZDA1YTg4YjkxYWI3MmZkYWZiZTll
NmEzMjliYTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE4LTAzLTEzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbTmljb3NpYV0gQWRk
IENhaXJvLXNwZWNpZmljIEdyYXBoaWNzQ29udGV4dCBvcGVyYXRpb24gcmVjb3JkZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzU5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyLCBHcmFwaGljc0NvbnRleHRJbXBsIGltcGxlbWVudGF0aW9u
CisgICAgICAgIHRoYXQgcmVjb3JkcyBhbGwgR3JhcGhpY3NDb250ZXh0IG9wZXJhdGlvbnMgZm9y
IGRlZmVycmVkIHJlcGxheSBvbiBhCisgICAgICAgIGRpZmZlcmVudCB0aHJlYWQuIFJlY29yZGlu
ZyBoZXJlIG1vc3RseSBjb25zaXN0cyBvZiBzdG9yaW5nIGFsbCB0aGUKKyAgICAgICAgQ2Fpcm8g
cmVzb3VyY2VzIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyLCB3aGljaCBpcyBlYXNlZCBieSB0aGUg
YXRvbWljCisgICAgICAgIHJlZmVyZW5jZSBjb3VudGluZyB1c2VkIGluIENhaXJvLgorCisgICAg
ICAgIE5pY29zaWE6OlBhaW50aW5nT3BlcmF0aW9uIGRlcml2YXRpdmVzIGFyZSB1c2VkIGZvciBv
cGVyYXRpb25zIG9yIHN0YXRlCisgICAgICAgIHVwZGF0ZXMgdGhhdCByZXF1aXJlIHJlY29yZGlu
Zy4gSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgYXJlIGFwcGVuZGVkCisgICAgICAgIHRvIGEg
VmVjdG9yPD4gb2JqZWN0IHRoYXQgaXMgdGhlbiBwdXNoZWQgaW50byBhIHRocmVhZCBwb29sIGlu
CisgICAgICAgIE5pY29zaWE6OlBhaW50aW5nRW5naW5lVGhyZWFkZWQgLCByZXBsYXlpbmcgYWxs
IHRoZSBvcGVyYXRpb25zIGFnYWluc3QKKyAgICAgICAgdGhlIENhaXJvIGNvbnRleHQgZXN0YWJs
aXNoZWQgZnJvbSBhbiBhc3NvY2lhdGVkIHRhcmdldCBOaWNvc2lhOjpCdWZmZXIuCisKKyAgICAg
ICAgVGhpcyBHcmFwaGljc0NvbnRleHRJbXBsIGltcGxlbWVudGF0aW9uIGlzIG5vdyB1c2VkIGlu
IHRoZQorICAgICAgICBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUmVjb3JkaW5nIGNvbnN0cnVj
dG9yIHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGltcGxlbWVudGF0
aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZWNvcmRpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKE5pY29zaWE6OmdldENvbnRleHQpOgorICAgICAgICAoTmljb3NpYTo6T3BlcmF0aW9uRGF0
YTo6YXJnIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OmNyZWF0ZUNvbW1hbmQpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcik6CisgICAgICAgIChOaWNvc2lhOjptX2NvbW1hbmRMaXN0KToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXApOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2gpOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4pOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKToKKyAg
ICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0VsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1BhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpz
YXZlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZSk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTSk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXApOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lh
OjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoTmljb3Np
YTo6UGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKToKKwog
MjAxOC0wMy0xMiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEltbWVkaWF0ZWx5IGZvcndhcmQgY29va2llIGFj
Y2VzcyBhdCB1c2VyIGludGVyYWN0aW9uIHdoZW4gdGhlcmUncyBhbiBvcGVuZXIgZG9jdW1lbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDRkMTNk
MzBjZGE0MjZjMjkwMjJkOGVkNmZmMDgyMmFlZDE5ZWZhYjcuLjVhNGU5NTdhOWZlYTc5NzRhYmRi
OTdkM2I4ODI4MzNjZTJhMDM2ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQpAQCAtNTYsNiArNTYsNyBAQCBpZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBI
SUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0Vu
Z2luZUJhc2ljLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQ
YWludGluZ0VuZ2luZVRocmVhZGVkLmNwcAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJv
LmNwcAogICAgICkKIGVsc2UgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYxNzY0Y2QyZDk3MTgwZGI0
MDc4Y2NhYjRjNDkxZDQyZWJjZWY1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuY3BwCkBAIC0wLDAgKzEsMTA3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIKKworI2luY2x1ZGUgIkNh
aXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKKyNpbmNsdWRl
ICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25SZXBsYXlDYWlyby5oIgorI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIE5p
Y29zaWEgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1BsYXRmb3JtQ29udGV4dENhaXJv
JiBnZXRDb250ZXh0KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBvcGVyYXRpb25SZXBsYXkpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5Q2Fpcm8mPihv
cGVyYXRpb25SZXBsYXkpLnBsYXRmb3JtQ29udGV4dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KK3N0cnVjdCBPcGVyYXRpb25EYXRhIHsKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVf
dCBJPgorICAgIGF1dG8gYXJnKCkgY29uc3QgLT4gc3RkOjp0dXBsZV9lbGVtZW50X3Q8SSwgY29u
c3Qgc3RkOjp0dXBsZTxBcmdzLi4uPj4mCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
ST4oYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBzdGQ6OnR1cGxlPEFyZ3MuLi4+IGFyZ3VtZW50
czsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IE9wZXJhdGlvbkRhdGE8PiB7IH07CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CithdXRvIGNyZWF0ZUNvbW1hbmQoQXJn
cyYmLi4uIGFyZ3VtZW50cykgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3Bl
cmF0aW9uRGF0YTxzdGQ6OmRlY2F5X3Q8QXJncz4uLi4+LCBUPjo6dmFsdWUsIHN0ZDo6dW5pcXVl
X3B0cjxQYWludGluZ09wZXJhdGlvbj4+Cit7CisgICAgYXV0byBjb21tYW5kID0gc3RkOjptYWtl
X3VuaXF1ZTxUPigpOworICAgIGNvbW1hbmQtPmFyZ3VtZW50cyA9IHN0ZDo6bWFrZV90dXBsZShz
dGQ6OmZvcndhcmQ8QXJncz4oYXJndW1lbnRzKS4uLik7CisgICAgcmV0dXJuIGNvbW1hbmQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CithdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YWx1ZSwgc3Rk
Ojp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPj4KK3sKKyAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxUPigpOworfQorCitDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBj
b21tYW5kTGlzdCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCwgRmxvYXRSZWN0
IHsgfSwgQWZmaW5lVHJhbnNmb3JtIHsgfSkKKyAgICAsIG1fY29tbWFuZExpc3QoY29tbWFuZExp
c3QpCit7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6Omlu
ZmluaXRlUmVjdCgpIH0pOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit7CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkgeworICAgICAgICBzdHJ1Y3Qg
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhnZXRDb250ZXh0KHJlcGxheWVy
KSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VUaGlja25l
c3NDaGFuZ2U+KHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgIH0KKworICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkgeworICAgICAgICBz
dHJ1Y3QgU3Ryb2tlU3R5bGVDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxTdHJva2VTdHlsZT4geworICAgICAgICAgICAgdmlydHVhbCB+U3Ryb2tlU3R5bGVD
aGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShnZXRDb250ZXh0KHJlcGxheWVy
KSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJTdHJva2VTdHlsZUNoYW5nZTw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdl
PihzdGF0ZS5zdHJva2VTdHlsZSkpOworICAgIH0KKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0
IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKKyAgICAgICAgICAgIHZp
cnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsKKworICAgICAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
PihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAgfQorCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5n
ZSkgeworICAgICAgICBzdHJ1Y3QgU2hvdWxkQW50aWFsaWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Ym9vbD4geworICAgICAgICAgICAgdmlydHVhbCB+
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFz
KGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0NoYW5nZTw+
XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7Cisg
ICAgfQorfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKK3sK
K30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKK3sKKyAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPExpbmVDYXA+IHsKKyAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6c2V0
TGluZUNhcChnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8PlxuIjsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgc3RydWN0IFNldExpbmVEYXNo
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9h
dD4geworICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKworICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goZ2V0Q29udGV4dChy
ZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU2V0TGluZURhc2g8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNoT2Zmc2V0KSk7
Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCit7CisgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgdmlydHVhbCB+U2V0TGlu
ZUpvaW4oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fp
cm86OnNldExpbmVKb2luKGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUpvaW48PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lSm9pbj4obGlu
ZUpvaW4pKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit7CisgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2aXJ0dWFs
IH5TZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TWl0ZXJMaW1p
dDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNl
dE1pdGVyTGltaXQ+KG1pdGVyTGltaXQpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgc3RydWN0IEZpbGxS
ZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBD
YWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwg
fkZpbGxSZWN0KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENhaXJvOjpmaWxsUmVjdChnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigp
LCBhcmc8Mj4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmls
bFJlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+
KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHN0cnVjdCBGaWxsUmVj
dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29s
b3IsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxsUmVjdCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFJl
Y3QoZ2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxSZWN0PD5cbiI7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkp
KTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKK3sKKyAgICBzdHJ1Y3QgRmlsbFJlY3Qg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIFJlZlB0
cjxjYWlyb19wYXR0ZXJuX3Q+PiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZh
dWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29u
dGV4dCA9IGdldENvbnRleHQocmVwbGF5ZXIpOworICAgICAgICAgICAgQ2Fpcm86OnNhdmUocGxh
dGZvcm1Db250ZXh0KTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRl
eHQsIGFyZzwwPigpLCBhcmc8MT4oKS5nZXQoKSk7CisgICAgICAgICAgICBDYWlybzo6cmVzdG9y
ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkZpbGxSZWN0PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGFkb3B0UmVmKGdyYWRpZW50LmNyZWF0ZVBsYXRmb3Jt
R3JhZGllbnQoMS4wKSkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAg
c3RydWN0IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
RmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlLCBDb21wb3NpdGVPcGVyYXRvcj4geworICAgICAgICB2aXJ0dWFsIH5GaWxsUmVj
dCgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBw
bGF0Zm9ybUNvbnRleHQgPSBnZXRDb250ZXh0KHJlcGxheWVyKTsKKworICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4o
KSwgYXJnPDM+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4
dCwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CisgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzw1PigpLCBCbGVu
ZE1vZGVOb3JtYWwpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZp
bGxSZWN0PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0
PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKK30KKwordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
K3sKKyAgICBzdHJ1Y3QgRmlsbFJvdW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxs
Um91bmRlZFJlY3QoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gZ2V0Q29udGV4dChyZXBsYXllcik7CisKKyAgICAg
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4
dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKKworICAgICAgICAgICAgYXV0byYgcmVjdCA9IGFyZzww
PigpOworICAgICAgICAgICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCisgICAgICAgICAgICAgICAg
Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGFyZzwxPigpLCBh
cmc8ND4oKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ2Fpcm86OmZpbGxS
ZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CisK
KyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dCwgYXJnPDI+KCksIEJsZW5kTW9kZU5vcm1hbCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJvdW5kZWRSZWN0PD5cbiI7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9y
LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzdHJ1Y3QgRmls
bFJlY3RXaXRoUm91bmRlZEhvbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxGbG9hdFJlY3QsIEZsb2F0Um91bmRlZFJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewor
ICAgICAgICB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpID0gZGVmYXVsdDsKKwor
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoZ2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgeyB9LCBhcmc8
Mj4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBVTlVTRURfUEFS
QU0oY29sb3IpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpKSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgc3RydWN0IEZpbGxQYXRoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Us
IENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxsUGF0aCgpID0gZGVm
YXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgo
Z2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxQYXRoPD5cbiI7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKK30KKwordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0
YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OworCisgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAgIHBhdGgu
YWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgoZ2V0Q29u
dGV4dChyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Cisg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworfQorCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCit7CisgICAgc3RydWN0IFN0cm9rZVJlY3QgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIGZsb2F0LCBDYWlybzo6U3Ryb2tlU291
cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmlydHVhbCB+U3Ryb2tlUmVjdCgp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6c3Ry
b2tlUmVjdChnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4o
KSwgYXJnPDM+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0
cm9rZVJlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tl
UmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJv
a2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VQ
YXRoKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJv
OjpzdHJva2VQYXRoKGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFy
ZzwyPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQ
YXRoPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+
KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgc3RydWN0IFN0cm9rZUVsbGlwc2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpTdHJv
a2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VF
bGxpcHNlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBh
dGggcGF0aDsKKyAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6c3Ryb2tlUGF0aChnZXRDb250ZXh0KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+
KCksIGFyZzwyPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJT
dHJva2VFbGxpcHNlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgQ2xlYXJSZWN0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAg
ICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8
MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xlYXJSZWN0
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xl
YXJSZWN0PihyZWN0KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCit7CisgICAgc3RydWN0IERyYXdHbHlw
aHMgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNv
dXJjZSwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50
LCBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhf
dD4sIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3I+
IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVsdDsKKworICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0dseXBocyhnZXRDb250ZXh0KHJlcGxh
eWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksCisgICAgICAgICAg
ICAgICAgYXJnPDQ+KCkuZ2V0KCksIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4
PigpLCBhcmc8OT4oKSwgYXJnPDEwPigpLCBhcmc8MTE+KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7CisgICAgaWYgKCFmb250LnBsYXRm
b3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB4T2Zmc2V0ID0g
cG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBnbHlwaHMobnVtR2x5cGhzKTsK
KyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tICsgbnVtR2x5cGhzIDw9IGdseXBoQnVmZmVyLnNp
emUoKSk7CisgICAgICAgIGF1dG8qIGdseXBoc0RhdGEgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSk7CisgICAgICAgIGF1dG8qIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7
CisKKyAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAgICBnbHlwaHNbaV0gPSB7
IGdseXBoc0RhdGFbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQg
Kz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3R2x5cGhzPihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKKyAg
ICAgICAgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2Nh
bGVkRm9udCgpKSwKKyAgICAgICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUo
Z2x5cGhzKSwgeE9mZnNldCwgc3RhdGUudGV4dERyYXdpbmdNb2RlLAorICAgICAgICBzdGF0ZS5z
dHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IpKTsK
K30KKworSW1hZ2VEcmF3UmVzdWx0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEltcGw6OmRyYXdJbWFnZUltcGwoZ3Jh
cGhpY3NDb250ZXh0KCksIGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7Cit9CisKK0ltYWdlRHJhd1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEltcGw6OmRyYXdU
aWxlZEltYWdlSW1wbChncmFwaGljc0NvbnRleHQoKSwgaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Cit9CisKK0ltYWdl
RHJhd1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6
ZHJhd1RpbGVkSW1hZ2VJbXBsKGdyYXBoaWNzQ29udGV4dCgpLCBpbWFnZSwgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRp
b25zKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Uo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBzdHJ1Y3QgRHJhd05hdGl2ZUltYWdl
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSwgZmxvYXQsIENhaXJv
OjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmRyYXdOYXRp
dmVJbWFnZShnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBh
cmc8Mj4oKSwKKyAgICAgICAgICAgICAgICBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpLCBh
cmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUlt
YWdlPihSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihpbWFnZS5nZXQoKSksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgc3Ry
dWN0IERyYXdQYXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBB
ZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+
IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGdldENvbnRleHQocmVw
bGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJuPD5cbiI7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBp
bWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQorICAgICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3UGF0dGVybj4oV1RGTW92ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZS5zaXpl
KCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb21wb3Np
dGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
Cit7CisgICAgc3RydWN0IERyYXdSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ29sb3IsIFN0cm9rZVN0eWxlLCBDb2xvcj4gewor
ICAgICAgICB2aXJ0dWFsIH5EcmF3UmVjdCgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICBDYWlybzo6ZHJhd1JlY3QoZ2V0Q29udGV4dChyZXBsYXllciksIGFy
ZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1JlY3Q8PlxuIjsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVz
cywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Ip
KTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3sKKyAgICBzdHJ1Y3Qg
RHJhd0xpbmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBv
aW50LCBGbG9hdFBvaW50LCBTdHJva2VTdHlsZSwgQ29sb3IsIGZsb2F0LCBib29sPiB7CisgICAg
ICAgIHZpcnR1YWwgfkRyYXdMaW5lKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZShnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksCisgICAgICAgICAgICAgICAgYXJnPDQ+
KCksIGFyZzw1PigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJE
cmF3TGluZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKK30KKwordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit7CisgICAgc3RydWN0IERy
YXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxG
bG9hdFBvaW50LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yLCBmbG9hdD4geworICAgICAg
ICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGdldENvbnRleHQocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3
TGluZXNGb3JUZXh0PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVU5VU0VEX1BBUkFN
KHN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRleHQ+KHBvaW50
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZs
b2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxl
KQoreworICAgIHN0cnVjdCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIEdyYXBoaWNzQ29u
dGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICBDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihnZXRDb250ZXh0KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjw+XG4iOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXI+KG9yaWdpbiwgd2lkdGgsIHN0eWxlKSk7Cit9CisKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIHN0cnVjdCBEcmF3RWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPEZsb2F0UmVjdCwgQ29sb3IsIFN0cm9rZVN0eWxlLCBDb2xvciwgZmxvYXQ+IHsKKyAg
ICAgICAgdmlydHVhbCB+RHJhd0VsbGlwc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKGdldENvbnRleHQocmVwbGF5ZXIp
LCBhcmc8MD4oKSwKKyAgICAgICAgICAgICAgICBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigp
LCBhcmc8ND4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJh
d0VsbGlwc2U8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0Vs
bGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKK30KKwordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJikKK3sKK30KKwordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzdHJ1Y3QgRHJh
d0ZvY3VzUmluZyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgs
IGZsb2F0LCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nKCkgPSBkZWZh
dWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3Rm9jdXNS
aW5nKGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3Rm9jdXNSaW5nPD5c
biI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocGF0aCwgd2lkdGgsIGNvbG9yKSk7
Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmluZyBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFZlY3RvcjxGbG9hdFJlY3Q+LCBmbG9hdCwgQ29s
b3I+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0ZvY3VzUmluZygpID0gZGVmYXVsdDsKKworICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhnZXRDb250
ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0ZvY3VzUmluZzw+XG4iOworICAgICAg
ICB9CisgICAgfTsKKworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKK30KKwordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFs
IH5TYXZlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENh
aXJvOjpzYXZlKGdldENvbnRleHQocmVwbGF5ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7CisKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1f
c3RhdGVTdGFjay5sYXN0KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJl
c3RvcmUoKQoreworICAgIHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7
CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OnJlc3RvcmUoZ2V0Q29u
dGV4dChyZXBsYXllcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IlJlc3RvcmU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxSZXN0b3JlPigpKTsKKworICAgIEFTU0VSVCghbV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSk7
CisgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBpZiAobV9zdGF0ZVN0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9zdGF0ZVN0YWNrLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgc3Ry
dWN0IFRyYW5zbGF0ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZs
b2F0LCBmbG9hdD4geworICAgICAgICB2aXJ0dWFsIH5UcmFuc2xhdGUoKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OnRyYW5zbGF0ZShnZXRDb250
ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJUcmFuc2xhdGU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxUcmFuc2xhdGU+KHgsIHkpKTsKKworICAgIHsKKyAg
ICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOworICAgICAgICBzdGF0ZS5j
dG0udHJhbnNsYXRlKHgsIHkpOworCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OworICAgICAg
ICB0LnRyYW5zbGF0ZSgteCwgLXkpOworICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0
YXRlLmN0bUludmVyc2U7CisgICAgfQorfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBzdHJ1Y3QgUm90YXRlIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgdmly
dHVhbCB+Um90YXRlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENhaXJvOjpyb3RhdGUoZ2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJSb3RhdGU8PlxuIjsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+KGFuZ2xlSW5SYWRp
YW5zKSk7CisKKyAgICB7CisgICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3Qo
KTsKKyAgICAgICAgc3RhdGUuY3RtLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7CisKKyAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHQ7CisgICAgICAgIHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAg
ICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOworICAgIH0KK30K
Kwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCit7CisgICAgc3RydWN0IFNjYWxlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRTaXplPiB7CisgICAgICAgIHZpcnR1YWwgflNjYWxlKCkgPSBkZWZhdWx0
OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpzY2FsZShnZXRDb250
ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIlNjYWxlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2NhbGU+KHNpemUpKTsKKworICAgIHsKKyAgICAgICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOworICAgICAgICBzdGF0ZS5jdG0uc2NhbGUoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKKyAgICAg
ICAgdC5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKKyAgICB9Cit9CisKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQoreworICAgIHN0cnVjdCBDb25jYXRDVE0gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKKyAgICAgICAgdmlydHVh
bCB+Q29uY2F0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENhaXJvOjpjb25jYXRDVE0oZ2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb25jYXRDVE08PlxuIjsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OworICAgIGlmICghaW52ZXJzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q29uY2F0Q1RNPih0cmFuc2Zvcm0pKTsKKworICAgIGF1dG8mIHN0YXRlID0gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBzdGF0ZS5jdG0gKj0gdHJhbnNmb3JtOworICAgIHN0YXRl
LmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCkgKiBzdGF0ZS5jdG1JbnZlcnNlOworfQorCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3sKKyAgICBzdHJ1Y3QgU2V0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7CisgICAgICAgIHZpcnR1YWwgflNl
dENUTSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENUTShnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldENUTTw+XG4iOworICAgICAgICB9
CisgICAgfTsKKworICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAg
aWYgKCFpbnZlcnNlKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTZXRDVE0+KHRyYW5zZm9ybSkpOworCisgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2su
bGFzdCgpOworICAgIHN0YXRlLmN0bSA9IHRyYW5zZm9ybTsKKyAgICBzdGF0ZS5jdG1JbnZlcnNl
ID0gaW52ZXJzZS52YWx1ZSgpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorewor
ICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsKK30KKwordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7Cisg
ICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2aXJ0dWFsIH5CZWdpblRyYW5zcGFy
ZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGdldENvbnRleHQocmVwbGF5ZXIpLCBhcmc8
MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFu
c3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpKTsKK30KKwordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgc3Ry
dWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBk
ZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcihnZXRDb250ZXh0KHJlcGxheWVyKSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiRW5kVHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXll
cj4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChn
ZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0KSk7CisKKyAgICB7CisgICAgICAgIGF1dG8mIHN0
YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRl
cnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3QocmVjdCkpOworICAgIH0KK30KKwordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBz
dHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZs
b2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OworCisgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGdldENvbnRleHQocmVw
bGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiQ2xpcE91dDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPENsaXBPdXQ+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgc3RydWN0IENsaXBPdXQgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoPiB7CisgICAgICAgIHZpcnR1
YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgQ2Fpcm86OmNsaXBPdXQoZ2V0Q29udGV4dChyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOwor
fQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7CisgICAgICAg
IHZpcnR1YWwgfkNsaXBQYXRoKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENhaXJvOjpjbGlwUGF0aChnZXRDb250ZXh0KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlw
UGF0aDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENsaXBQYXRoPihwYXRoLCBjbGlwUnVsZSkpOworCisgICAgeworICAgICAgICBhdXRvJiBzdGF0
ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7CisgICAgfQor
fQorCitJbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQoreworICAg
IGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykpOworfQor
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpCit7Cit9CisKK0Zsb2F0UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5k
KQoreworICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JiOWFmOWRkMjE0NWFjODY0NGYw
ZGRkOTA3ZTA5NmMzZTE1NDA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24u
aCIKKworbmFtZXNwYWNlIE5pY29zaWEgeworCitjbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVy
IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworcHVibGljOgor
ICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFp
bnRpbmdPcGVyYXRpb25zJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldExp
bmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE1pdGVyTGlt
aXQoZmxvYXQpIG92ZXJyaWRlOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6Qmxl
bmRNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlciYsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRT
bW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OkltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoV2ViQ29yZTo6SW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShXZWJDb3JlOjpJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworICAgIFdlYkNvcmU6OkltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShXZWJDb3Jl
OjpJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OkltYWdlOjpUaWxlUnVs
ZSwgV2ViQ29yZTo6SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IFdlYkNv
cmU6Ok5hdGl2ZUltYWdlUHRyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSwgV2ViQ29yZTo6SW1hZ2VPcmllbnRh
dGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpJbWFnZSYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2Vi
Q29yZTo6QmxlbmRNb2RlID0gV2ViQ29yZTo6QmxlbmRNb2RlTm9ybWFsKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Bh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92
ZXJyaWRlOworCisgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN0b3JlKCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1
bGUpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRl
OworCisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKKwor
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgYXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlv
bj4mJik7CisgICAgUGFpbnRpbmdPcGVyYXRpb25zJiBtX2NvbW1hbmRMaXN0OworCisgICAgc3Ry
dWN0IFN0YXRlIHsKKyAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKKyAgICAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bUludmVyc2U7CisgICAgICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBjbGlwQm91bmRzOworICAgIH07CisgICAgVmVjdG9yPFN0YXRlLCAzMj4gbV9z
dGF0ZVN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRp
bmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDcxNjE1YmI1
YmFkMmJiNzIwNDk5NzViNTFjYWI2ZWFmNDEwM2U2MzYuLjBjOGE2NzBlM2EwYTM2MzA3ZTNmMjk5
ZWNkYTAyNTUyZmQ3NzRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQ
YWludGluZ0NvbnRleHRDYWlyby5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKICNp
bmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCisjaW5jbHVkZSAiTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25SZXBsYXlDYWly
by5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKQEAgLTEwNCwxMCArMTA1LDkgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6
Rm9yUGFpbnRpbmc6OnJlcGxheShjb25zdCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIFBh
aW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyhQYWludGluZ09w
ZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9ucykKIHsKICAgICBtX2dyYXBoaWNzQ29udGV4dCA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigKLSAgICAgICAgWyZw
YWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpCisgICAgICAgIFsm
cGFpbnRpbmdPcGVyYXRpb25zXShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiByZXR1cm4gYSBHcmFwaGljc0NvbnRleHRJ
bXBsIHdpdGggcmVjb3JkaW5nIGNhcGFiaWxpdGllcy4KLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsKICAgICAgICAgfSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335933</attachid>
            <date>2018-03-16 06:49:37 -0700</date>
            <delta_ts>2018-03-16 06:49:37 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-183593-20180316144936.patch</filename>
            <type>text/plain</type>
            <size>50447</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIxMTgyYTE1NWVhZmY1
MmExNGRkZjY0ZGFlZmUyN2M5ZjhlOThlMS4uMTRjMDc3OTRmZDM2MTMyYTYzMzBmZGE5NjlhYTYz
YzZkMmY2YmYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE4LTAzLTE2ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbTmljb3NpYV0gQWRk
IENhaXJvLXNwZWNpZmljIEdyYXBoaWNzQ29udGV4dCBvcGVyYXRpb24gcmVjb3JkZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzU5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAgIEFkZCBOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyLCBHcmFwaGljc0NvbnRleHRJbXBsIGltcGxlbWVu
dGF0aW9uCisgICAgICAgIHRoYXQgcmVjb3JkcyBhbGwgR3JhcGhpY3NDb250ZXh0IG9wZXJhdGlv
bnMgZm9yIGRlZmVycmVkIHJlcGxheSBvbiBhCisgICAgICAgIGRpZmZlcmVudCB0aHJlYWQuIFJl
Y29yZGluZyBoZXJlIG1vc3RseSBjb25zaXN0cyBvZiBzdG9yaW5nIGFsbCB0aGUKKyAgICAgICAg
Q2Fpcm8gcmVzb3VyY2VzIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyLCB3aGljaCBpcyBlYXNlZCBi
eSB0aGUgYXRvbWljCisgICAgICAgIHJlZmVyZW5jZSBjb3VudGluZyB1c2VkIGluIENhaXJvLgor
CisgICAgICAgIE5pY29zaWE6OlBhaW50aW5nT3BlcmF0aW9uIGRlcml2YXRpdmVzIGFyZSB1c2Vk
IGZvciBvcGVyYXRpb25zIG9yIHN0YXRlCisgICAgICAgIHVwZGF0ZXMgdGhhdCByZXF1aXJlIHJl
Y29yZGluZy4gSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgYXJlIGFwcGVuZGVkCisgICAgICAg
IHRvIGEgVmVjdG9yPD4gb2JqZWN0IHRoYXQgaXMgdGhlbiBwdXNoZWQgaW50byBhIHRocmVhZCBw
b29sIGluCisgICAgICAgIE5pY29zaWE6OlBhaW50aW5nRW5naW5lVGhyZWFkZWQgLCByZXBsYXlp
bmcgYWxsIHRoZSBvcGVyYXRpb25zIGFnYWluc3QKKyAgICAgICAgdGhlIENhaXJvIGNvbnRleHQg
ZXN0YWJsaXNoZWQgZnJvbSBhbiBhc3NvY2lhdGVkIHRhcmdldCBOaWNvc2lhOjpCdWZmZXIuCisK
KyAgICAgICAgVGhpcyBHcmFwaGljc0NvbnRleHRJbXBsIGltcGxlbWVudGF0aW9uIGlzIG5vdyB1
c2VkIGluIHRoZQorICAgICAgICBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUmVjb3JkaW5nIGNv
bnN0cnVjdG9yIHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGltcGxl
bWVudGF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZWNvcmRpbmcuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKE5pY29zaWE6OmdldENvbnRleHQpOgorICAgICAgICAoTmljb3NpYTo6T3BlcmF0
aW9uRGF0YTo6YXJnIGNvbnN0IGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OmNyZWF0ZUNvbW1h
bmQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcik6CisgICAgICAgIChOaWNvc2lhOjptX2NvbW1hbmRMaXN0KToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXApOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2gpOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4pOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAg
IChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBh
dGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlw
c2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVj
dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRo
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlw
c2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdl
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0
dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVj
dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpzYXZlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJl
c3RvcmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6dHJhbnNs
YXRlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZSk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZSk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTSk6CisgICAgICAgIChOaWNvc2lh
OjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXApOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm91bmRUb0RldmljZVBp
eGVscyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAo
Tmljb3NpYTo6UGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5n
KToKKwogMjAxOC0wMy0xNiAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIFdoZW4gdXNpbmcgRUdMLCByZXF1ZXN0IGFuIE9wZW5HTCBjb3JlIHByb2Zp
bGUgd2hlbiBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4
dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIu
Y21ha2UKaW5kZXggNGQxM2QzMGNkYTQyNmMyOTAyMmQ4ZWQ2ZmYwODIyYWVkMTllZmFiNy4uNWE0
ZTk1N2E5ZmVhNzk3NGFiZGI5N2QzYjg4MjgzM2NlMmEwMzZmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC01Niw2ICs1Niw3IEBAIGlmIChVU0Vf
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Tmljb3NpYVBhaW50aW5nRW5naW5lQmFzaWMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lVGhyZWFkZWQuY3BwCiAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFp
bnRpbmdDb250ZXh0Q2Fpcm8uY3BwCiAgICAgKQogZWxzZSAoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWJjM2RmMmE1NDM0ZDkxNzM4YjZmZTIzMmYzMjRkNDg0Zjk2NzZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTAsMCArMSwxMDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
IgorCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgorI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgi
CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgorCituYW1lc3BhY2UgTmljb3NpYSB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUGxh
dGZvcm1Db250ZXh0Q2Fpcm8mIGNvbnRleHRGb3JSZXBsYXkoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIG9wZXJhdGlvblJlcGxheSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFpbnRpbmdP
cGVyYXRpb25SZXBsYXlDYWlybyY+KG9wZXJhdGlvblJlcGxheSkucGxhdGZvcm1Db250ZXh0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorc3RydWN0IE9wZXJhdGlvbkRhdGEgewor
ICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IEk+CisgICAgYXV0byBhcmcoKSBjb25zdCAtPiBzdGQ6
OnR1cGxlX2VsZW1lbnRfdDxJLCBjb25zdCBzdGQ6OnR1cGxlPEFyZ3MuLi4+PiYKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OmdldDxJPihhcmd1bWVudHMpOworICAgIH0KKworICAgIHN0ZDo6
dHVwbGU8QXJncy4uLj4gYXJndW1lbnRzOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgT3BlcmF0
aW9uRGF0YTw+IHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4K
K2F1dG8gY3JlYXRlQ29tbWFuZChBcmdzJiYuLi4gYXJndW1lbnRzKSAtPiBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPHN0ZDo6ZGVjYXlfdDxBcmdzPi4uLj4s
IFQ+Ojp2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPj4KK3sKKyAgICBh
dXRvIGNvbW1hbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPFQ+KCk7CisgICAgY29tbWFuZC0+YXJndW1l
bnRzID0gc3RkOjptYWtlX3R1cGxlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmd1bWVudHMpLi4uKTsK
KyAgICByZXR1cm4gY29tbWFuZDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2F1dG8gY3Jl
YXRlQ29tbWFuZCgpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE9wZXJhdGlv
bkRhdGE8PiwgVD46OnZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+Pgor
eworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFQ+KCk7Cit9CisKK0NhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBQYWludGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0
SW1wbChjb250ZXh0LCBGbG9hdFJlY3QgeyB9LCBBZmZpbmVUcmFuc2Zvcm0geyB9KQorICAgICwg
bV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK3sKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsg
eyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkgfSk7Cit9CisKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3sK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSB7CisgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVh
bCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVRoaWNrbmVz
c0NoYW5nZTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKSk7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKSB7CisgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxlPiB7CisgICAg
ICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsKKworICAgICAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0
eWxlQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxlKSk7
CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSkgeworICAgICAgICBzdHJ1Y3QgQ29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZT4geworICAgICAgICAgICAgdmlydHVhbCB+Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb21wb3NpdGVPcGVyYXRp
b25DaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSB7CisgICAgICAgIHN0
cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxib29sPiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TaG91bGRBbnRpYWxpYXND
aGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2hvdWxkQW50aWFsaWFzQ2hhbmdlPD5cbiI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hv
dWxkQW50aWFsaWFzQ2hhbmdlPihzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICB9Cit9CisK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQoreworfQorCit2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorewor
ICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8TGluZUNhcD4geworICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0
OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOworICAgICAgICB9CisgICAgfTsK
KworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXApKTsKK30KKwor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBzdHJ1Y3QgU2V0TGluZURhc2ggZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxEYXNoQXJyYXksIGZsb2F0PiB7
CisgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNoKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4iOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVEYXNoPihkYXNoZXMsIGRhc2hPZmZzZXQp
KTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKK3sKKyAgICBzdHJ1Y3QgU2V0TGluZUpvaW4gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lSm9pbj4geworICAgICAgICB2aXJ0dWFsIH5TZXRM
aW5lSm9pbigpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBD
YWlybzo6c2V0TGluZUpvaW4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lSm9pbjw+XG4i
OworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVK
b2luPihsaW5lSm9pbikpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldE1p
dGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3sKKyAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAg
IHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBs
YXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTZXRNaXRlckxpbWl0PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCkpOworfQorCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBzdHJ1Y3QgRmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAg
ICAgICAgdmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJGaWxsUmVjdDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7
CisgICAgc3RydWN0IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZp
cnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjpmaWxsUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQoreworICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0UmVjdCwgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4+IHsKKyAgICAgICAg
dmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJlcGxheShyZXBsYXll
cik7CisgICAgICAgICAgICBDYWlybzo6c2F2ZShwbGF0Zm9ybUNvbnRleHQpOworICAgICAgICAg
ICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwxPigpLmdl
dCgpKTsKKyAgICAgICAgICAgIENhaXJvOjpyZXN0b3JlKHBsYXRmb3JtQ29udGV4dCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwg
YWRvcHRSZWYoZ3JhZGllbnQuY3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKSkpOworfQorCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBzdHJ1Y3QgRmlsbFJlY3QgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUsIENvbXBvc2l0ZU9wZXJh
dG9yPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZhdWx0OworCisgICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpOworCisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAg
ICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCBhcmc8MD4oKSwgYXJnPDE+
KCksIGFyZzw0PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDU+KCksIEJsZW5kTW9kZU5vcm1hbCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcikpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIHN0cnVjdCBGaWxs
Um91bmRlZFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFJvdW5kZWRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpID0gZGVm
YXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiBwbGF0Zm9ybUNv
bnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKKworICAgICAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4oKSwg
YXJnPDM+KCkpOworCisgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7CisgICAgICAg
ICAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKKyAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgYXJnPDE+KCksIGFyZzw0PigpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1D
b250ZXh0LCByZWN0LnJlY3QoKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKKworICAgICAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8
Mj4oKSwgQmxlbmRNb2RlTm9ybWFsKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJGaWxsUm91bmRlZFJlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKK30K
Kwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHN0cnVjdCBGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVj
dCwgRmxvYXRSb3VuZGVkUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1
YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCB7IH0sIGFyZzwyPigpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIFVOVVNFRF9QQVJBTShjb2xv
cik7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBzdHJ1Y3QgRmlsbFBhdGggZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxQYXRoKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFBhdGg8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworfQorCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3Rh
dGU+IHsKKyAgICAgICAgdmlydHVhbCB+RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgcGF0aC5h
ZGRFbGxpcHNlKGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsRWxsaXBzZTw+XG4iOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZp
bGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKK3ZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKK3sKKyAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQsIENhaXJvOjpTdHJv
a2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VS
ZWN0KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJv
OjpzdHJva2VSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+
KCksIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiU3Ryb2tlUmVjdDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIHN0cnVjdCBT
dHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwg
Q2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1
YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzww
PigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgU3Ry
b2tlRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAg
IHZpcnR1YWwgflN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFy
ZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBwYXRoLCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZUVsbGlwc2U8PlxuIjsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKK30KKwordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0KCkgPSBkZWZhdWx0
OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGVhclJlY3QoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKK30KKwordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZykKK3sKKyAgICBzdHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBD
YWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90
PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZs
YWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5
cGhzKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJv
OjpkcmF3R2x5cGhzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+
KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCisgICAgICAgICAgICAgICAg
YXJnPDU+KCksIGFyZzw2PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+
KCksIGFyZzwxMT4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
RHJhd0dseXBoczw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIFVOVVNFRF9QQVJBTShm
b250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9y
PGNhaXJvX2dseXBoX3Q+IGdseXBocyhudW1HbHlwaHMpOworICAgIHsKKyAgICAgICAgQVNTRVJU
KGZyb20gKyBudW1HbHlwaHMgPD0gZ2x5cGhCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgYXV0byog
Z2x5cGhzRGF0YSA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICAgICAgYXV0byogYWR2
YW5jZXMgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKTsKKworICAgICAgICBhdXRvIHlPZmZz
ZXQgPSBwb2ludC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKKyAgICAgICAgICAgIGdseXBoc1tpXSA9IHsgZ2x5cGhzRGF0YVtpXSwgeE9mZnNl
dCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAorICAgICAgICBSZWZQdHI8Y2Fpcm9fc2Nh
bGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAorICAgICAgICBm
b250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgV1RGTW92ZShnbHlwaHMpLCB4T2Zmc2V0LCBzdGF0
ZS50ZXh0RHJhd2luZ01vZGUsCisgICAgICAgIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcikpOworfQorCitJbWFnZURyYXdSZXN1bHQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0SW1wbDo6ZHJhd0ltYWdlSW1wbChncmFwaGljc0NvbnRleHQoKSwgaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworSW1hZ2VE
cmF3UmVzdWx0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1hZ2VJbXBsKGdyYXBoaWNz
Q29udGV4dCgpLCBpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworSW1hZ2VEcmF3UmVzdWx0IENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQor
eworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRJbXBsOjpkcmF3VGlsZWRJbWFnZUltcGwoZ3Jh
cGhpY3NDb250ZXh0KCksIGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0
b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQoreworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0LCBG
bG9hdFJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24s
IEludGVycG9sYXRpb25RdWFsaXR5LCBmbG9hdCwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAg
ICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZHJhd05hdGl2ZUltYWdlKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4o
KSwgYXJnPDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8Plxu
IjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihpbWFn
ZS5nZXQoKSksIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
LCBvcmllbnRhdGlvbiwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxw
aGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCit7CisgICAgc3RydWN0IERyYXdQYXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEludFNpemUs
IEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4o
KSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmRy
YXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJn
PDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSwg
YXJnPDc+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQ
YXR0ZXJuPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVU5VU0VEX1BBUkFNKHNwYWNp
bmcpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0dGVybj4oV1RGTW92
ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit7CisgICAgc3RydWN0IERyYXdSZWN0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwg
Q29sb3IsIFN0cm9rZVN0eWxlLCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5EcmF3UmVjdCgp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZHJh
d1JlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJn
PDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiRHJhd1JlY3Q8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKK30KKwordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKK3sKKyAgICBzdHJ1Y3QgRHJhd0xpbmUgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBGbG9hdFBvaW50LCBTdHJv
a2VTdHlsZSwgQ29sb3IsIGZsb2F0LCBib29sPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5l
KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpk
cmF3TGluZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmU8PlxuIjsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VT
dHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzKQoreworICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29s
LCBDb2xvciwgZmxvYXQ+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0xp
bmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigp
LCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4dDw+XG4iOworICAgICAg
ICB9CisgICAgfTsKKworICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
VW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwor
fQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBzdHJ1Y3QgRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UG9pbnQsIGZsb2F0LCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihvcmln
aW4sIHdpZHRoLCBzdHlsZSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgRHJhd0VsbGlw
c2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENv
bG9yLCBTdHJva2VTdHlsZSwgQ29sb3IsIGZsb2F0PiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdF
bGxpcHNlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENh
aXJvOjpkcmF3RWxsaXBzZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3RWxsaXBzZTw+XG4iOworICAgICAgICB9CisgICAg
fTsKKworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cykpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBh
dGgmKQoreworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9yPiB7CisgICAgICAgIHZpcnR1
YWwgfkRyYXdGb2N1c1JpbmcoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkRyYXdGb2N1c1Jpbmc8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
Rm9jdXNSaW5nPihwYXRoLCB3aWR0aCwgY29sb3IpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIHN0
cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8VmVjdG9yPEZsb2F0UmVjdD4sIGZsb2F0LCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5E
cmF3Rm9jdXNSaW5nKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJEcmF3Rm9jdXNSaW5nPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3Vz
UmluZz4ocmVjdHMsIHdpZHRoLCBjb2xvcikpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNhdmUoKQoreworICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7
CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OnNhdmUoY29udGV4dEZv
clJlcGxheShyZXBsYXllcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIlNhdmU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTYXZlPigpKTsKKworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxh
c3QoKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7Cisg
ICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6cmVzdG9yZShjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9y
ZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJl
c3RvcmU+KCkpOworCisgICAgQVNTRVJUKCFtX3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKKyAgICBt
X3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIGlmIChtX3N0YXRlU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICBtX3N0YXRlU3RhY2suY2xlYXIoKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBzdHJ1Y3QgVHJh
bnNsYXRlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQsIGZs
b2F0PiB7CisgICAgICAgIHZpcnR1YWwgflRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKKworICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6dHJhbnNsYXRlKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIlRyYW5zbGF0ZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFRyYW5zbGF0ZT4oeCwgeSkpOworCisgICAgeworICAg
ICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgICAgIHN0YXRlLmN0
bS50cmFuc2xhdGUoeCwgeSk7CisKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7CisgICAgICAg
IHQudHJhbnNsYXRlKC14LCAteSk7CisgICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3Rh
dGUuY3RtSW52ZXJzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIHN0cnVjdCBSb3RhdGUgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2aXJ0
dWFsIH5Sb3RhdGUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgQ2Fpcm86OnJvdGF0ZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJvdGF0ZT4oYW5nbGVJ
blJhZGlhbnMpKTsKKworICAgIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2su
bGFzdCgpOworICAgICAgICBzdGF0ZS5jdG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKworICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKKyAgICAgICAgdC5yb3RhdGUoYW5nbGVJblJhZGlhbnMp
OworICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7CisgICAg
fQorfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzdHJ1Y3QgU2NhbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxGbG9hdFNpemU+IHsKKyAgICAgICAgdmlydHVhbCB+U2NhbGUoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OnNjYWxlKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2NhbGU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTY2FsZT4oc2l6ZSkpOworCisgICAgeworICAgICAgICBh
dXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgICAgIHN0YXRlLmN0bS5zY2Fs
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSB0OworICAgICAgICB0LnNjYWxlKDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgp
KTsKKyAgICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOworICAg
IH0KK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgc3RydWN0IENvbmNhdENUTSBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAg
ICAgICB2aXJ0dWFsIH5Db25jYXRDVE0oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OmNvbmNhdENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNv
bmNhdENUTTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8gaW52ZXJzZSA9IHRy
YW5zZm9ybS5pbnZlcnNlKCk7CisgICAgaWYgKCFpbnZlcnNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb25jYXRDVE0+KHRyYW5zZm9ybSkpOworCisgICAg
YXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIHN0YXRlLmN0bSAqPSB0cmFu
c2Zvcm07CisgICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKSAqIHN0YXRlLmN0
bUludmVyc2U7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIHN0cnVjdCBTZXRDVE0gZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKKyAg
ICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
U2V0Q1RNPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBpbnZlcnNlID0gdHJh
bnNmb3JtLmludmVyc2UoKTsKKyAgICBpZiAoIWludmVyc2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4odHJhbnNmb3JtKSk7CisKKyAgICBhdXRv
JiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgc3RhdGUuY3RtID0gdHJhbnNmb3Jt
OworICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCk7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGUpCit7CisgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3Rt
OworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAg
IHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4ob3BhY2l0eSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBzdHJ1Y3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVh
bCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJF
bmRUcmFuc3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsKK30KKwordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBz
dHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
Q2xpcDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENsaXA+KHJlY3QpKTsKKworICAgIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3Rh
Y2subGFzdCgpOworICAgICAgICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0u
bWFwUmVjdChyZWN0KSk7CisgICAgfQorfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBDbGlwT3V0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAg
ICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFy
ZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xp
cE91dD4ocmVjdCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcE91
dCgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6
Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBPdXQ8PlxuIjsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihwYXRoKSk7Cit9CisK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCit7CisgICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKKyAgICAgICAgdmly
dHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSwgYXJnPDE+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNs
aXBQYXRoPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcFBhdGg+KHBhdGgsIGNsaXBSdWxlKSk7CisKKyAgICB7CisgICAgICAgIGF1dG8mIHN0
YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRl
cnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpKTsKKyAgICB9
Cit9CisKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpCit7Cisg
ICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkKK3sKK30KKworRmxvYXRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5k
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPiYmIGNvbW1h
bmQpCit7CisgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmI5YWY5ZGQyMTQ1YWM4NjQ0
ZjBkZGQ5MDdlMDk2YzNlMTU0MDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlv
bi5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbCB7CitwdWJsaWM6
CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBQ
YWludGluZ09wZXJhdGlvbnMmKTsKKworcHJpdmF0ZToKKyAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOworCisgICAg
dm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpC
bGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJs
ZW5kTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyJiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShXZWJDb3JlOjpJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZElt
YWdlKFdlYkNvcmU6OkltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgV2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKFdlYkNv
cmU6OkltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6SW1hZ2U6OlRpbGVS
dWxlLCBXZWJDb3JlOjpJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgV2Vi
Q29yZTo6TmF0aXZlSW1hZ2VQdHImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlLCBXZWJDb3JlOjpJbWFnZU9yaWVu
dGF0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6OkltYWdlJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBX
ZWJDb3JlOjpCbGVuZE1vZGUgPSBXZWJDb3JlOjpCbGVuZE1vZGVOb3JtYWwpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwg
Ym9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQsIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3RvcmUo
KSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7
CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIG92ZXJyaWRlOworICAgIHZv
aWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CisgICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Cisg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5k
UnVsZSkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwor
CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92
ZXJyaWRlOworCisgICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0
aW9uPiYmKTsKKyAgICBQYWludGluZ09wZXJhdGlvbnMmIG1fY29tbWFuZExpc3Q7CisKKyAgICBz
dHJ1Y3QgU3RhdGUgeworICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtOworICAg
ICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtSW52ZXJzZTsKKyAgICAgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IGNsaXBCb3VuZHM7CisgICAgfTsKKyAgICBWZWN0b3I8U3RhdGUsIDMyPiBt
X3N0YXRlU3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWlu
dGluZ0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAKaW5kZXggNzE2MTVi
YjViYWQyYmI3MjA0OTk3NWI1MWNhYjZlYWY0MTAzZTYzNi4uMGM4YTY3MGUzYTBhMzYzMDdlM2Yy
OTllY2RhMDI1NTJmZDc3NGVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YVBhaW50aW5nQ29udGV4dENhaXJvLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgog
I2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNh
aXJvLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgpAQCAtMTA0LDEwICsxMDUsOSBAQCB2b2lkIFBhaW50aW5nQ29udGV4dENhaXJv
OjpGb3JQYWludGluZzo6cmVwbGF5KGNvbnN0IFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbgog
UGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5n
T3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVyYXRpb25zKQogewogICAgIG1fZ3JhcGhpY3NDb250ZXh0
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KAotICAgICAgICBb
JnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JikKKyAgICAgICAg
WyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgLy8gRklYTUU6IHJldHVybiBhIEdyYXBoaWNzQ29udGV4
dEltcGwgd2l0aCByZWNvcmRpbmcgY2FwYWJpbGl0aWVzLgotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDYWlyb09wZXJhdGlv
blJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJhdGlvbnMpOwogICAgICAgICB9KTsKIH0K
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>