<?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>96323</bug_id>
          
          <creation_ts>2012-09-10 14:54:47 -0700</creation_ts>
          <short_desc>AX: Refactor most AccessibilityRenderObject code into AccessibilityNodeObject</short_desc>
          <delta_ts>2012-09-12 15:22:00 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>96547</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Dominic Mazzoni">dmazzoni</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>716553</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-10 14:54:47 -0700</bug_when>
    <thetext>Whenever possible, methods in AccessibilityRenderObject should be implemented in AccessibilityNodeObject instead, so they work for elements in canvas fallback content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716784</commentid>
    <comment_count>1</comment_count>
      <attachid>163267</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-10 19:36:13 -0700</bug_when>
    <thetext>Created attachment 163267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717261</commentid>
    <comment_count>2</comment_count>
      <attachid>163267</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-09-11 09:26:57 -0700</bug_when>
    <thetext>Comment on attachment 163267
Patch

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

looks good overall.

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:268
&gt; +        return selectElement-&gt;multiple() ? ListBoxRole : PopUpButtonRole;

this change worries me. why do we need to change to a ListBoxRole when it has been a ListRole?

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:319
&gt; +        return false;

what&apos;s the scenario for this one? it&apos;s a node object, but there&apos;s no node and there&apos;s no render object. would this be the case where a node object has been deleted and this hasn&apos;t been cleaned up yet?

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:326
&gt; +    case CheckBoxRole:

we should probably also have ToggleButton in this switch

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:494
&gt; +    return role == MenuRole

i think we should do a switch statement here instead.

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:542
&gt; +    return static_cast&lt;Element*&gt;(node)-&gt;isEnabledFormControl();

use toElement()

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:641
&gt; +    if (n &amp;&amp; (n-&gt;isElementNode() &amp;&amp; static_cast&lt;Element*&gt;(n)-&gt;isFormControlElement()))

use toElement()

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:688
&gt; +    return m_ariaRole == ProgressIndicatorRole

we should probably do a switch statement here

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:757
&gt; +    return ((node-&gt;isElementNode() &amp;&amp; static_cast&lt;Element*&gt;(node)-&gt;isFormControlElement())

use toElement()

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:806
&gt; +                        return object;

this line is too far indented

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:843
&gt; +        if (node-&gt;hasTagName(inputTag)) {

bad indentation

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:893
&gt; +    for (Element* element = static_cast&lt;Element*&gt;(node); element; element = element-&gt;parentElement()) {

use toElement()

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1004
&gt; +    return ariaLabeledBy;

bad indentation

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1016
&gt; +    while (sibling) {

seems like this should be a for loop

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1040
&gt; +        return axObjectCache()-&gt;getOrCreate(menu);

when you pass in a nil element to getOrCreate, i believe it just returns 0, so in that sense we don&apos;t need to check for NULL here

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1158
&gt; +    while (parent) {

looks like this should be a for loop

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1187
&gt; +    AccessibilityRole role = roleValue();

we should probably only check roleValue() after we determine that node() is not nil

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1192
&gt; +    Node* node = this-&gt;node();

it looks like this check is identical to the one 3 lines above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718040</commentid>
    <comment_count>3</comment_count>
      <attachid>163267</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-12 01:23:39 -0700</bug_when>
    <thetext>Comment on attachment 163267
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:268
&gt;&gt; +        return selectElement-&gt;multiple() ? ListBoxRole : PopUpButtonRole;
&gt; 
&gt; this change worries me. why do we need to change to a ListBoxRole when it has been a ListRole?

This was my mistake in the previous patch. ListBoxRole is correct for a &lt;select multiple&gt;. I didn&apos;t catch this before because on Mac, both a dynamic list (like &lt;select multiple) and a static list (like a &lt;ul&gt;) map to NSAccessibilityListRole - so it was still working correctly on Mac, but not elsewhere.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:319
&gt;&gt; +        return false;
&gt; 
&gt; what&apos;s the scenario for this one? it&apos;s a node object, but there&apos;s no node and there&apos;s no render object. would this be the case where a node object has been deleted and this hasn&apos;t been cleaned up yet?

The logic is slightly different:

* If it&apos;s a node object, and there&apos;s no node, then we should just return. This only happens if it&apos;s detached.
* If it&apos;s a render object, then it might legitimately have no node (e.g. a web area, scroll area, or css-generated text) - so we shouldn&apos;t even check for a node. 

I added a comment.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:326
&gt;&gt; +    case CheckBoxRole:
&gt; 
&gt; we should probably also have ToggleButton in this switch

Done

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:494
&gt;&gt; +    return role == MenuRole
&gt; 
&gt; i think we should do a switch statement here instead.

Done.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:542
&gt;&gt; +    return static_cast&lt;Element*&gt;(node)-&gt;isEnabledFormControl();
&gt; 
&gt; use toElement()

Changed throughout.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:688
&gt;&gt; +    return m_ariaRole == ProgressIndicatorRole
&gt; 
&gt; we should probably do a switch statement here

Done

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:806
&gt;&gt; +                        return object;
&gt; 
&gt; this line is too far indented

Fixed.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:843
&gt;&gt; +        if (node-&gt;hasTagName(inputTag)) {
&gt; 
&gt; bad indentation

Fixed.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1004
&gt;&gt; +    return ariaLabeledBy;
&gt; 
&gt; bad indentation

Fixed

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1016
&gt;&gt; +    while (sibling) {
&gt; 
&gt; seems like this should be a for loop

Good idea, done.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1040
&gt;&gt; +        return axObjectCache()-&gt;getOrCreate(menu);
&gt; 
&gt; when you pass in a nil element to getOrCreate, i believe it just returns 0, so in that sense we don&apos;t need to check for NULL here

Done.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1158
&gt;&gt; +    while (parent) {
&gt; 
&gt; looks like this should be a for loop

Done

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1187
&gt;&gt; +    AccessibilityRole role = roleValue();
&gt; 
&gt; we should probably only check roleValue() after we determine that node() is not nil

Got rid of the variable role anyway - wasn&apos;t needed.

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:1192
&gt;&gt; +    Node* node = this-&gt;node();
&gt; 
&gt; it looks like this check is identical to the one 3 lines above

Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718041</commentid>
    <comment_count>4</comment_count>
      <attachid>163541</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-12 01:24:00 -0700</bug_when>
    <thetext>Created attachment 163541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718359</commentid>
    <comment_count>5</comment_count>
      <attachid>163629</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-12 07:59:34 -0700</bug_when>
    <thetext>Created attachment 163629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718386</commentid>
    <comment_count>6</comment_count>
      <attachid>163629</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-09-12 08:29:17 -0700</bug_when>
    <thetext>Comment on attachment 163629
Patch

thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718415</commentid>
    <comment_count>7</comment_count>
      <attachid>163629</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 08:49:31 -0700</bug_when>
    <thetext>Comment on attachment 163629
Patch

Clearing flags on attachment: 163629

Committed r128318: &lt;http://trac.webkit.org/changeset/128318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718416</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 08:49:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718587</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-12 12:19:52 -0700</bug_when>
    <thetext>This broke two content_unittests in chrome mac:


DumpAccessibilityTreeTest.AccessibilityToggleButton: 
Testing: /Volumes/data/b/build/slave/Mac10_6_Tests/build/src/content/test/data/accessibility/togglebutton.html
../../content/browser/accessibility/dump_accessibility_tree_browsertest.cc:186: Failure
Value of: is_different
  Actual: true
Expected: false
* Line Expected
- ---- --------
     1 AXWebArea subrole=(null) title=&apos;&apos; value=&apos;&apos;
     2     AXButton subrole=(null) title=&apos;Regular button&apos; value=&apos;&apos;
     3     AXButton subrole=(null) title=&apos;&apos; value=&apos;&apos;
*    4         AXStaticText subrole=(null) title=&apos;&apos; value=&apos;Toggle button&apos;
     5 &lt;-- End-of-file --&gt;

Actual
------
AXWebArea subrole=(null) title=&apos;&apos; value=&apos;&apos;
    AXButton subrole=(null) title=&apos;Regular button&apos; value=&apos;&apos;
    AXButton subrole=(null) title=&apos;&apos; value=&apos;&apos;




DumpAccessibilityTreeTest.AccessibilityCanvas: 
Testing: /Volumes/data/b/build/slave/Mac10_6_Tests/build/src/content/test/data/accessibility/canvas.html
../../content/browser/accessibility/dump_accessibility_tree_browsertest.cc:186: Failure
Value of: is_different
  Actual: true
Expected: false
* Line Expected
- ---- --------
     1 AXWebArea subrole=(null) title=&apos;&apos; value=&apos;&apos;
     2     AXGroup subrole=(null) title=&apos;&apos; value=&apos;&apos;
     3         AXImage subrole=(null) title=&apos;&apos; value=&apos;&apos;
     4             AXStaticText subrole=(null) title=&apos;&apos; value=&apos;&apos;
     5         AXGroup subrole=(null) title=&apos;&apos; value=&apos;&apos;
*    6             AXLink subrole=(null) title=&apos;&apos; value=&apos;&apos;
     7                 AXStaticText subrole=(null) title=&apos;&apos; value=&apos;&apos;
     8 &lt;-- End-of-file --&gt;

Actual
------
AXWebArea subrole=(null) title=&apos;&apos; value=&apos;&apos;
    AXGroup subrole=(null) title=&apos;&apos; value=&apos;&apos;
        AXImage subrole=(null) title=&apos;&apos; value=&apos;&apos;
            AXStaticText subrole=(null) title=&apos;&apos; value=&apos;&apos;
        AXGroup subrole=(null) title=&apos;&apos; value=&apos;&apos;
            AXLink subrole=(null) title=&apos;Interactive fallback&apos; value=&apos;&apos;
                AXStaticText subrole=(null) title=&apos;&apos; value=&apos;&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718777</commentid>
    <comment_count>10</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-09-12 15:05:20 -0700</bug_when>
    <thetext>Re-landing this change here: https://bugs.webkit.org/show_bug.cgi?id=96565</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163267</attachid>
            <date>2012-09-10 19:36:13 -0700</date>
            <delta_ts>2012-09-12 01:23:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96323-20120910193614.patch</filename>
            <type>text/plain</type>
            <size>103935</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxMi0wOS0xMCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogUmVmYWN0b3Ig
bW9zdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IGNvZGUgaW50byBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTYzMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGlzIGxhcmdlLCBidXQgaXQncyBhdCBsZWFzdCA3NSUgY3V0LWFuZC1wYXN0ZS4K
KworICAgICAgICBBbGwgaXQgZG9lcyBpcyBtb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGxh
cmdlIGNodW5rIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgbWV0aG9kcyB0
byBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdAorICAgICAgICBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0
aGVtIHRvIG9wZXJhdGUgb24gZWxlbWVudHMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMsIHN1
Y2ggYXMgdGhvc2UgaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQuIEl0IGFsc28KKyAgICAgICAg
bW92ZXMgdXMgdG93YXJkcyB0aGUgZ29hbCB3aGVyZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
CisgICAgICAgIG9ubHkgaGFzIGNvZGUgdGhhdCdzIHNwZWNpZmljIHRvIHJlbmRlcmVycyBhbmQg
bm90IGp1c3Qgbm9kZXMuCisKKyAgICAgICAgSGFsZiBvZiB0aGUgbWV0aG9kcyBjdXQgYW5kIHBh
c3RlIHdpdGggZXNzZW50aWFsbHkgbm8gY2hhbmdlcy4KKyAgICAgICAgU29tZSByZXF1aXJlZCBq
dXN0IHRpbnkgY2hhbmdlcyB0byBhY2Nlc3MgYW4gYXR0cmlidXRlIHZpYSB0aGUKKyAgICAgICAg
ZWxlbWVudCAoZS5nLiBIVE1MU2VsZWN0RWxlbWVudCkgcmF0aGVyIHRoYW4gaXRzIGFzc29jaWF0
ZWQKKyAgICAgICAgcmVuZGVyZXIgKGUuZy4gUmVuZGVyTWVudUxpc3QpLiBBIGZldyB3ZXJlIGEg
bGl0dGxlIHRyaWNraWVyLAorICAgICAgICBhcyB0aGUgYmVoYXZpb3IgbmVlZHMgdG8gYmUgc2xp
Z2h0bHkgZGlmZmVyZW50IHdoZW4gdGhlcmUncyBhCisgICAgICAgIHJlbmRlcmVyLiBJbiB0aG9z
ZSBsYXN0IGNhc2VzLCBhcyBtdWNoIG9mIHRoZSBjb2RlIGFzIHBvc3NpYmxlIGlzCisgICAgICAg
IGluIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGFuZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
IG92ZXJyaWRlcworICAgICAgICBpdCBhcyBuZWNlc3NhcnkuCisKKyAgICAgICAgVGVzdDogYWNj
ZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLmh0bWwKKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNXZWJBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0FuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQYXNzd29yZEZpZWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJvZ3Jlc3NJbmRp
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzU2xp
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVS
ZWxhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01l
bnUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudUJh
cik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUNoZWNrYm94T3JSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzUHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQVJJQVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdGVwVmFsdWVGb3JSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIZWFkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0xpbmspOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ29udHJvbCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNHcm91cCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2Jv
eE9yUmFkaW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVyU2xpZGVyVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluY3JlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5U3RlcCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hhbmdlVmFsdWVC
eVBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
R2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpzaWJsaW5nV2l0aEFyaWFSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjptZW51RWxlbWVudEZvck1lbnVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVGb3JNZW51QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51SXRlbUVsZW1lbnRG
b3JNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51
QnV0dG9uRm9yTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aGllcmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3Np
YmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50c0Zyb21BdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFyaWFMYWJlbGVkQnlFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUxh
YmVsZWRCeUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpub2RlKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4pOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJPYmplY3QpOgorCiAyMDEyLTA5LTEwICBKdXN0aW4gTm92
b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHY1
IGxpbmUgZGFzaCBmZWF0dXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTkw
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwxMiArMjU5LDI0IEBAIEFjY2Vzc2liaWxpdHlS
b2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWMKICAgICAgICAgICAgIHJldHVybiBSYWRpb0J1dHRv
blJvbGU7CiAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJv
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFNsaWRlclJvbGU7CiAgICAgICAgIHJldHVybiBUZXh0
RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
IHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBs
ZSgpID8gTGlzdFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIHJldHVybiBzZWxlY3RF
bGVtZW50LT5tdWx0aXBsZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAg
fQorICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICByZXR1
cm4gVGV4dEFyZWFSb2xlOworICAgIGlmIChoZWFkaW5nTGV2ZWwoKSkKKyAgICAgICAgcmV0dXJu
IEhlYWRpbmdSb2xlOworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoZGl2VGFnKSkKKyAgICAg
ICAgcmV0dXJuIERpdlJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShwVGFnKSkKKyAg
ICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShs
YWJlbFRhZykpCisgICAgICAgIHJldHVybiBMYWJlbFJvbGU7CiAgICAgaWYgKG5vZGUoKS0+aXNG
b2N1c2FibGUoKSkKICAgICAgICAgcmV0dXJuIEdyb3VwUm9sZTsKICAgICAKQEAgLTMwMSw4ICsz
MTMsMzQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZQogICAgIH0K
IH0KIAorYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29u
c3QKK3sKKyAgICBpZiAoIW5vZGUoKSAmJiAhaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEVsZW1lbnRzIHRoYXQgc2hvdWxkIG5v
dCBoYXZlIGNoaWxkcmVuCisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAgIGNhc2UgSW1h
Z2VSb2xlOgorICAgIGNhc2UgQnV0dG9uUm9sZToKKyAgICBjYXNlIFBvcFVwQnV0dG9uUm9sZToK
KyAgICBjYXNlIENoZWNrQm94Um9sZToKKyAgICBjYXNlIFJhZGlvQnV0dG9uUm9sZToKKyAgICBj
YXNlIFRhYlJvbGU6CisgICAgY2FzZSBTdGF0aWNUZXh0Um9sZToKKyAgICBjYXNlIExpc3RCb3hP
cHRpb25Sb2xlOgorICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiB7
CisgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIHdpdGhpbiBhIHBhcmVudCB0aGF0IGNhbm5vdCBo
YXZlIGNoaWxkcmVuLCBpdCBzaG91bGQgbm90IGJlIGV4cG9zZWQuCisgICAgaWYgKGlzRGVzY2Vu
ZGFudE9mQmFycmVuUGFyZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgcmV0dXJu
IG1fcm9sZSA9PSBVbmtub3duUm9sZTsKIH0KIApAQCAtMzIzLDkgKzM2MSwxMDMxIEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0YKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzV2ViQXJlYSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNO
YXRpdmVJbWFnZSgpICYmIHJvbGVWYWx1ZSgpID09IEJ1dHRvblJvbGU7Cit9CisKK2Jvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQW5jaG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWlz
TmF0aXZlSW1hZ2UoKSAmJiBpc0xpbmsoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7
CisgICAgICAgIHJldHVybiBpbnB1dC0+aXNUZXh0KCkgfHwgaW5wdXQtPmlzTnVtYmVyRmllbGQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlz
LT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwor
ICAgIGlmICghaW5wdXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
aW5wdXRFbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gU29tZSB3ZWJzaXRlcyBkb24ndCBsYWJlbCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1
Y2guIEhvd2V2ZXIsIHRoZXkgd2lsbAorICAgIC8vIHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBl
aXRoZXIgdGhlIGZvcm0gb3IgaW5wdXQgdHlwZS4gVGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNl
LAorICAgIC8vIGJ1dCBpdCB3aWxsIGNhdGNoIGdvb2dsZS5jb20gZm9yIGV4YW1wbGUuCisKKyAg
ICAvLyBDaGVjayB0aGUgbm9kZSBuYW1lIG9mIHRoZSBpbnB1dCB0eXBlLCBzb21ldGltZXMgaXQn
cyAic2VhcmNoIi4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyaWJ1dGUgPSBnZXRB
dHRyaWJ1dGUobmFtZUF0dHIpOworICAgIGlmIChuYW1lQXR0cmlidXRlLmNvbnRhaW5zKCJzZWFy
Y2giLCBmYWxzZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ2hlY2sgdGhlIGZv
cm0gYWN0aW9uIGFuZCB0aGUgbmFtZSwgd2hpY2ggd2lsbCBzb21ldGltZXMgYmUgInNlYXJjaCIu
CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gaW5wdXRFbGVtZW50LT5mb3JtKCk7CisgICAg
aWYgKGZvcm0gJiYgKGZvcm0tPm5hbWUoKS5jb250YWlucygic2VhcmNoIiwgZmFsc2UpIHx8IGZv
cm0tPmFjdGlvbigpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpOwor
ICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0b24oKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW1hZ2UoKSBj
b25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBJbWFnZVJvbGU7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0Cit7CisgICAg
Tm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFyaWFSb2xlQXR0
cmlidXRlKCkgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCk7Cisg
ICAgaWYgKCFpbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0
aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgCisg
ICAgaWYgKHJvbGVWYWx1ZSgpID09IEJ1dHRvblJvbGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbnB1
dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1
dHRvbigpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNQcm9ncmVzc0luZGljYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IFByb2dyZXNzSW5kaWNhdG9yUm9sZTsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNTbGlkZXIoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFs
dWUoKSA9PSBTbGlkZXJSb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c01lbnVSZWxhdGVkKCkgY29uc3QKK3sKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcm9s
ZVZhbHVlKCk7CisgICAgcmV0dXJuIHJvbGUgPT0gTWVudVJvbGUKKyAgICAgICAgfHwgcm9sZSA9
PSBNZW51QmFyUm9sZQorICAgICAgICB8fCByb2xlID09IE1lbnVCdXR0b25Sb2xlCisgICAgICAg
IHx8IHJvbGUgPT0gTWVudUl0ZW1Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc01lbnUoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBNZW51Um9s
ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51QmFyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTWVudUJhclJvbGU7Cit9CisKK2Jvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IE1lbnVCdXR0b25Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojppc01lbnVJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkg
PT0gTWVudUl0ZW1Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05h
dGl2ZUNoZWNrYm94T3JSYWRpbygpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5w
dXQpCisgICAgICAgIHJldHVybiBpbnB1dC0+aXNDaGVja2JveCgpIHx8IGlucHV0LT5pc1JhZGlv
QnV0dG9uKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGdldEF0dHJpYnV0ZShhcmlhX2Rpc2FibGVkQXR0ciksICJ0cnVlIikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2Rl
IHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2wo
KTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbmRldGVybWluYXRlKCkg
Y29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNJbmRldGVy
bWluYXRlKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJlc3NlZCgp
IGNvbnN0Cit7CisgICAgaWYgKHJvbGVWYWx1ZSgpICE9IEJ1dHRvblJvbGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGlzIGlzIGFuIEFSSUEg
YnV0dG9uLCBjaGVjayB0aGUgYXJpYS1wcmVzc2VkIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiBub2Rl
KCktPmFjdGl2ZSgpCisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQnV0dG9uUm9sZSkg
eworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfcHJlc3Nl
ZEF0dHIpLCAidHJ1ZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9kZS0+YWN0aXZlKCk7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0Cit7CisgICAgTm9kZSog
bm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2VkbmVzcyBzZW1hbnRpY3MK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVu
dCgpOworICAgIGlmIChpbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKTsKKworICAgIC8vIEVsc2UsIGlmIHRoaXMgaXMgYW4gQVJJ
QSBjaGVja2JveCBvciByYWRpbywgcmVzcGVjdCB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZQor
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKKyAg
ICBpZiAoYXJpYVJvbGUgPT0gUmFkaW9CdXR0b25Sb2xlIHx8IGFyaWFSb2xlID09IENoZWNrQm94
Um9sZSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFf
Y2hlY2tlZEF0dHIpLCAidHJ1ZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBub3QgY2hlY2tl
ZAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aXNIb3ZlcmVkKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG5vZGUtPmhv
dmVyZWQoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVj
dGFibGUoKSBjb25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYU11bHRpU2VsZWN0
YWJsZSA9IGdldEF0dHJpYnV0ZShhcmlhX211bHRpc2VsZWN0YWJsZUF0dHIpOworICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAidHJ1ZSIpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJpYU11bHRpU2VsZWN0YWJs
ZSwgImZhbHNlIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbm9k
ZSgpICYmIHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+bXVsdGlwbGUoKTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgTm9k
ZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG5vZGUpLT5yZWFkT25seSgp
OworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpLT5yZWFkT25seSgpOworCisgICAg
cmV0dXJuICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0Cit7CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX3JlcXVpcmVkQXR0ciksICJ0cnVlIikpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgTm9kZSogbiA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAobiAm
JiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obiktPnJlcXVpcmVkKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGVhZGluZ0xldmVsKCkgY29uc3QKK3sKKyAg
ICAvLyBoZWFkaW5ncyBjYW4gYmUgaW4gYmxvY2sgZmxvdyBhbmQgbm9uLWJsb2NrIGZsb3cKKyAg
ICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gSGVhZGluZ1JvbGUp
CisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV9sZXZlbEF0dHIpLnRvSW50KCk7CisK
KyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoMVRhZykpCisgICAgICAgIHJldHVybiAxOworCisg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDJUYWcpKQorICAgICAgICByZXR1cm4gMjsKKworICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGgzVGFnKSkKKyAgICAgICAgcmV0dXJuIDM7CisKKyAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShoNFRhZykpCisgICAgICAgIHJldHVybiA0OworCisgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoaDVUYWcpKQorICAgICAgICByZXR1cm4gNTsKKworICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGg2VGFnKSkKKyAgICAgICAgcmV0dXJuIDY7CisKKyAgICByZXR1cm4g
MDsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZURlc2NyaXB0aW9u
KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZXRleHRBdHRyKS5zdHJp
bmcoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNBUklBUmFuZ2UoKSBj
b25zdAoreworICAgIHJldHVybiBtX2FyaWFSb2xlID09IFByb2dyZXNzSW5kaWNhdG9yUm9sZQor
ICAgICAgICB8fCBtX2FyaWFSb2xlID09IFNsaWRlclJvbGUKKyAgICAgICAgfHwgbV9hcmlhUm9s
ZSA9PSBTY3JvbGxCYXJSb2xlCisgICAgICAgIHx8IG1fYXJpYVJvbGUgPT0gU3BpbkJ1dHRvblJv
bGU7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKCkg
Y29uc3QKK3sKKyAgICBpZiAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
IHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LT52YWx1ZUFzTnVtYmVyKCk7CisgICAgfQorCisg
ICAgaWYgKCFpc0FSSUFSYW5nZSgpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0dHIpLnRvRmxvYXQoKTsKK30KKworZmxvYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdAoreworICAg
IGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihu
b2RlKCkpOworICAgICAgICBpZiAoaW5wdXQtPmlzUmFuZ2VDb250cm9sKCkpCisgICAgICAgICAg
ICByZXR1cm4gaW5wdXQtPm1heGltdW0oKTsKKyAgICB9CisKKyAgICBpZiAoIWlzQVJJQVJhbmdl
KCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlh
X3ZhbHVlbWF4QXR0cikudG9GbG9hdCgpOworfQorCitmbG9hdCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6bWluVmFsdWVGb3JSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKG5vZGUoKSAmJiBub2Rl
KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIGlm
IChpbnB1dC0+aXNSYW5nZUNvbnRyb2woKSkKKyAgICAgICAgICAgIHJldHVybiBpbnB1dC0+bWlu
aW11bSgpOworICAgIH0KKworICAgIGlmICghaXNBUklBUmFuZ2UoKSkKKyAgICAgICAgcmV0dXJu
IDAuMGY7CisKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyaWFfdmFsdWVtaW5BdHRyKS50b0Zs
b2F0KCk7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdGVwVmFsdWVGb3JS
YW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzdGVwQXR0cikudG9GbG9h
dCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hlYWRpbmcoKSBjb25z
dAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBIZWFkaW5nUm9sZTsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNMaW5rKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9s
ZVZhbHVlKCkgPT0gV2ViQ29yZUxpbmtSb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc0NvbnRyb2woKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2Rl
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
KChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICB8fCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpp
c0FSSUFDb250cm9sKGFyaWFSb2xlQXR0cmlidXRlKCkpKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKTsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNHcm91cCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJvbGVWYWx1
ZSgpID09IEdyb3VwUm9sZTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnNlbGVjdGVkUmFkaW9CdXR0b24oKQoreworICAgIGlmICghaXNSYWRpb0dy
b3VwKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKwor
ICAgIC8vIEZpbmQgdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbiB0aGF0IGlzIHNlbGVjdGVkIChpZS4g
dGhlIGludFZhbHVlID09IDEpLgorICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIG9iamVjdCA9IGNoaWxkcmVuW2ldLmdldCgpOworICAgICAgICBpZiAob2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBSYWRpb0J1dHRvblJvbGUgJiYgb2JqZWN0LT5jaGVja2JveE9y
UmFkaW9WYWx1ZSgpID09IEJ1dHRvblN0YXRlT24pCisgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnNlbGVjdGVkVGFiSXRlbSgpCit7CisgICAgaWYgKCFpc1RhYkxp
c3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGaW5kIHRoZSBjaGlsZCB0YWIgaXRl
bSB0aGF0IGlzIHNlbGVjdGVkIChpZS4gdGhlIGludFZhbHVlID09IDEpLgorICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzOworICAgIHRhYkNo
aWxkcmVuKHRhYnMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IHRhYnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGNoaWxkcmVuW2ldLmdldCgp
OworICAgICAgICBpZiAob2JqZWN0LT5pc1RhYkl0ZW0oKSAmJiBvYmplY3QtPmlzQ2hlY2tlZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgfQorICAg
IHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOYXRp
dmVDaGVja2JveE9yUmFkaW8oKSkKKyAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZCgpID8gQnV0dG9u
U3RhdGVPbiA6IEJ1dHRvblN0YXRlT2ZmOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7Cit9CisKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBWE9i
amVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKworICAgIC8vIHNlYXJjaCB1cCB0
aGUgRE9NIHRyZWUgZm9yIGFuIGFuY2hvciBlbGVtZW50CisgICAgLy8gTk9URTogdGhpcyBhc3N1
bWVzIHRoYXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hvciBpcyBhbiBIVE1MQW5jaG9yRWxl
bWVudAorICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSB8fCAobm9kZS0+cmVuZGVyZXIoKSAmJiBj
YWNoZS0+Z2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSktPmlzQW5jaG9yKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjdGlvbkVs
ZW1lbnQoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShpbnB1dFRhZykpIHsKKyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlucHV0LT5kaXNhYmxlZCgpICYmIChpc0NoZWNrYm94T3JSYWRpbygpIHx8IGlucHV0LT5p
c1RleHRCdXR0b24oKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7Cisg
ICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisKKyAgICBpZiAoaXNGaWxlVXBsb2FkQnV0
dG9uKCkpCisgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgICAgICAKKyAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBUklBSW5wdXQoYXJpYVJvbGVBdHRyaWJ1dGUo
KSkpCisgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisKKyAgICBpZiAoaXNJbWFnZUJ1
dHRvbigpKQorICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIAorICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSk7CisKKyAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7CisgICAgY2FzZSBCdXR0b25Sb2xlOgor
ICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2UgVGFiUm9sZToKKyAgICBjYXNlIE1l
bnVJdGVtUm9sZToKKyAgICBjYXNlIExpc3RJdGVtUm9sZToKKyAgICAgICAgcmV0dXJuIHRvRWxl
bWVudChub2RlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgRWxlbWVudCogZWx0ID0gYW5jaG9yRWxlbWVudCgpOworICAgIGlmICghZWx0KQorICAgICAg
ICBlbHQgPSBtb3VzZUJ1dHRvbkxpc3RlbmVyKCk7CisgICAgcmV0dXJuIGVsdDsKK30KKworRWxl
bWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1vdXNlQnV0dG9uTGlzdGVuZXIoKSBjb25z
dAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBi
dXR0b24gbGlzdGVuZXIKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBEbyB0aGUgY29udGludWF0aW9uIHNl
YXJjaCBsaWtlIGFuY2hvckVsZW1lbnQgZG9lcworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgZWxlbWVudC0+Z2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHx8IGVsZW1lbnQt
PmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQo
KSBjb25zdAoreworICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gcGFyZW50
T2JqZWN0KCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkgeworICAg
ICAgICBpZiAoIW9iamVjdC0+Y2FuSGF2ZUNoaWxkcmVuKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmFsdGVyU2xpZGVyVmFsdWUoYm9vbCBpbmNyZWFzZSkKK3sKKyAgICBpZiAo
cm9sZVZhbHVlKCkgIT0gU2xpZGVyUm9sZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFn
ZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLmlzRW1wdHkoKSkKKyAgICAgICAgY2hhbmdlVmFsdWVCeVN0
ZXAoaW5jcmVhc2UpOworICAgIGVsc2UKKyAgICAgICAgY2hhbmdlVmFsdWVCeVBlcmNlbnQoaW5j
cmVhc2UgPyA1IDogLTUpOworfQorICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aW5jcmVtZW50KCkKK3sKKyAgICBhbHRlclNsaWRlclZhbHVlKHRydWUpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZWNyZW1lbnQoKQoreworICAgIGFsdGVyU2xpZGVyVmFs
dWUoZmFsc2UpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGFuZ2VWYWx1
ZUJ5U3RlcChib29sIGluY3JlYXNlKQoreworICAgIGZsb2F0IHN0ZXAgPSBzdGVwVmFsdWVGb3JS
YW5nZSgpOworICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOworCisgICAgdmFsdWUg
Kz0gaW5jcmVhc2UgPyBzdGVwIDogLXN0ZXA7CisKKyAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJl
cih2YWx1ZSkpOworCisgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG5vZGUo
KSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5UGVyY2VudChmbG9hdCBwZXJjZW50Q2hh
bmdlKQoreworICAgIGZsb2F0IHJhbmdlID0gbWF4VmFsdWVGb3JSYW5nZSgpIC0gbWluVmFsdWVG
b3JSYW5nZSgpOworICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOworCisgICAgdmFs
dWUgKz0gcmFuZ2UgKiAocGVyY2VudENoYW5nZSAvIDEwMCk7CisgICAgc2V0VmFsdWUoU3RyaW5n
OjpudW1iZXIodmFsdWUpKTsKKworICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlv
bihub2RlKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNv
bnN0Cit7CisgICAgaWYgKCFjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgLy8gSWYgaXQncyBhIGNvbnRyb2wsIGl0J3Mgbm90IGdlbmVyaWMuCisg
ICAgIGlmIChpc0NvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
aXQgaGFzIGFuIGFyaWEgcm9sZSwgaXQncyBub3QgZ2VuZXJpYy4KKyAgICBpZiAobV9hcmlhUm9s
ZSAhPSBVbmtub3duUm9sZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgdGhl
IGNvbnRlbnQgZWRpdGFibGUgYXR0cmlidXRlIGlzIHNldCBvbiB0aGlzIGVsZW1lbnQsIHRoYXQn
cyB0aGUgcmVhc29uCisgICAgLy8gaXQncyBmb2N1c2FibGUsIGFuZCBleGlzdGluZyBsb2dpYyBz
aG91bGQgaGFuZGxlIHRoaXMgY2FzZSBhbHJlYWR5IC0gc28gaXQncyBub3QgYQorICAgIC8vIGdl
bmVyaWMgZm9jdXNhYmxlIGVsZW1lbnQuCisKKyAgICBpZiAoaGFzQ29udGVudEVkaXRhYmxlQXR0
cmlidXRlU2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSB3ZWIgYXJl
YSBhbmQgYm9keSBlbGVtZW50IGFyZSBib3RoIGZvY3VzYWJsZSwgYnV0IGV4aXN0aW5nIGxvZ2lj
IGhhbmRsZXMgdGhlc2UKKyAgICAvLyBjYXNlcyBhbHJlYWR5LCBzbyB3ZSBkb24ndCBuZWVkIHRv
IGluY2x1ZGUgdGhlbSBoZXJlLgorICAgIGlmIChyb2xlVmFsdWUoKSA9PSBXZWJBcmVhUm9sZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdO
YW1lKGJvZHlUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlZlB0cjxOb2RlTGlzdD4g
bGlzdCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIp
OworICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+aGFzVGFn
TmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0g
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOworICAgICAgICAg
ICAgaWYgKGxhYmVsLT5jb250cm9sKCkgPT0gZWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5n
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgYXJpYUxhYmVsZWRCeSA9IGFyaWFMYWJlbGVkQnlBdHRyaWJ1
dGUoKTsKKyAgICBpZiAoIWFyaWFMYWJlbGVkQnkuaXNFbXB0eSgpKQorICAgIHJldHVybiBhcmlh
TGFiZWxlZEJ5OworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGFiZWwgPSBnZXRBdHRy
aWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgIGlmICghYXJpYUxhYmVsLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGFyaWFMYWJlbDsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworc3Rh
dGljIEVsZW1lbnQqIHNpYmxpbmdXaXRoQXJpYVJvbGUoU3RyaW5nIHJvbGUsIE5vZGUqIG5vZGUp
Cit7CisgICAgTm9kZSogc2libGluZyA9IG5vZGUtPnBhcmVudE5vZGUoKS0+Zmlyc3RDaGlsZCgp
OworICAgIHdoaWxlIChzaWJsaW5nKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnRO
b2RlKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNpYmxpbmcpLT5nZXRBdHRyaWJ1dGUocm9sZUF0dHIp
OworICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHNpYmxpbmdBcmlhUm9sZSwgcm9s
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihzaWJsaW5n
KTsKKyAgICAgICAgfQorICAgICAgICBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjptZW51RWxlbWVudEZvck1lbnVCdXR0b24oKSBjb25zdAoreworICAgIGlmIChh
cmlhUm9sZUF0dHJpYnV0ZSgpICE9IE1lbnVCdXR0b25Sb2xlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBzaWJsaW5nV2l0aEFyaWFSb2xlKCJtZW51Iiwgbm9kZSgpKTsKK30KKwor
QWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVGb3JNZW51
QnV0dG9uKCkgY29uc3QKK3sKKyAgICBFbGVtZW50KiBtZW51ID0gbWVudUVsZW1lbnRGb3JNZW51
QnV0dG9uKCk7CisgICAgaWYgKG1lbnUpCisgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKG1lbnUpOworICAgIHJldHVybiAwOworfQorCitFbGVtZW50KiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0Cit7CisgICAg
aWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gTWVudVJvbGUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiBzaWJsaW5nV2l0aEFyaWFSb2xlKCJtZW51aXRlbSIsIG5vZGUoKSk7
ICAgIAorfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
bWVudUJ1dHRvbkZvck1lbnUoKSBjb25zdAoreworICAgIEVsZW1lbnQqIG1lbnVJdGVtID0gbWVu
dUl0ZW1FbGVtZW50Rm9yTWVudSgpOworCisgICAgaWYgKG1lbnVJdGVtKSB7CisgICAgICAgIC8v
IEFSSUEganVzdCBoYXMgZ2VuZXJpYyBtZW51IGl0ZW1zLiBBcHBLaXQgbmVlZHMgdG8ga25vdyBp
ZiB0aGlzIGlzIGEgdG9wIGxldmVsIGl0ZW1zIGxpa2UgTWVudUJhckJ1dHRvbiBvciBNZW51QmFy
SXRlbQorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51SXRlbUFYID0gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShtZW51SXRlbSk7CisgICAgICAgIGlmIChtZW51SXRlbUFYLT5p
c01lbnVCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBtZW51SXRlbUFYOworICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIC8vIFN0YXRpYyB0ZXh0IHNob3VsZCBu
b3QgaGF2ZSBhIGRlc2NyaXB0aW9uLCBpdCBzaG91bGQgb25seSBoYXZlIGEgc3RyaW5nVmFsdWUu
CisgICAgaWYgKHJvbGVWYWx1ZSgpID09IFN0YXRpY1RleHRSb2xlKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBTdHJpbmcgYXJpYURlc2NyaXB0aW9uID0gYXJpYUFjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbigpOworICAgIGlmICghYXJpYURlc2NyaXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGFyaWFEZXNjcmlwdGlvbjsKKworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5u
b2RlKCk7CisgICAgaWYgKGlzSW1hZ2UoKSB8fCBpc0lucHV0SW1hZ2UoKSB8fCBpc05hdGl2ZUlt
YWdlKCkgfHwgaXNDYW52YXMoKSkgeworICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1M
RWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgICAgICAgICAgaWYgKGFs
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICAg
ICAgcmV0dXJuIGFsdDsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEVOQUJMRShNQVRITUwpCisg
ICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+aXNNYXRoTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoTWF0aE1MTmFtZXM6OmFsdHRleHRBdHRyKTsKKyNlbmRpZgorCisgICAgLy8gQW4gZWxlbWVu
dCdzIGRlc2NyaXB0aXZlIHRleHQgaXMgY29tcHJpc2VkIG9mIHRpdGxlKCkgKHdoYXQncyB2aXNp
YmxlIG9uIHRoZSBzY3JlZW4pIGFuZCBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSAob3RoZXIg
ZGVzY3JpcHRpdmUgdGV4dCkuCisgICAgLy8gQm90aCBhcmUgdXNlZCB0byBnZW5lcmF0ZSB3aGF0
IGEgc2NyZWVuIHJlYWRlciBzcGVha3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBJZiB0aGlzIHBvaW50IGlzIHJlYWNo
ZWQgKGkuZS4gdGhlcmUncyBubyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pIGFuZCB0aGVyZSdz
IG5vIHRpdGxlKCksIHdlIHNob3VsZCBmYWxsYmFjayB0byB1c2luZyB0aGUgdGl0bGUgYXR0cmli
dXRlLgorICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgaXMgbm9ybWFsbHkgdXNlZCBhcyBoZWxw
IHRleHQgKGJlY2F1c2UgaXQgaXMgYSB0b29sdGlwKSwgYnV0IGlmIHRoZXJlIGlzIG5vdGhpbmcg
ZWxzZSBhdmFpbGFibGUsIHRoaXMgc2hvdWxkIGJlIHVzZWQgKGFjY29yZGluZyB0byBBUklBKS4K
KyAgICBpZiAodGl0bGUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
dGl0bGVBdHRyKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIZWxwID0gZ2V0QXR0cmlidXRlKGFyaWFf
aGVscEF0dHIpOworICAgIGlmICghYXJpYUhlbHAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
YXJpYUhlbHA7CisgICAgCisgICAgU3RyaW5nIGRlc2NyaWJlZEJ5ID0gYXJpYURlc2NyaWJlZEJ5
QXR0cmlidXRlKCk7CisgICAgaWYgKCFkZXNjcmliZWRCeS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBkZXNjcmliZWRCeTsKKyAgICAKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKTsKKyAgICBmb3IgKE5vZGUqIGN1cnIgPSBub2RlOyBjdXJyOyBj
dXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0hUTUxFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihjdXJyKS0+Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICAg
ICAgICAgIGlmICghc3VtbWFyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1
bW1hcnk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUg
c2hvdWxkIGJlIHVzZWQgYXMgaGVscCB0ZXh0IHVubGVzcyBpdCBpcyBhbHJlYWR5IGJlaW5nIHVz
ZWQgYXMgZGVzY3JpcHRpdmUgdGV4dC4KKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dGl0bGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY3VyciktPmdldEF0dHJpYnV0ZSh0aXRsZUF0
dHIpOworICAgICAgICAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkgJiYgZGVzY3JpcHRpb24gIT0g
dGl0bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBPbmx5IHRha2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVu
dCBpZiBpdHMgYSBncm91cCBvciBhbiB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAorICAgICAg
ICAvLyBhZGRlZCB0byB0aG9zZSBraW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdh
cyBtZWFudCBmb3IgYSBjaGlsZCBlbGVtZW50LgorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iaiA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY3Vycik7CisgICAgICAgIGlm
IChheE9iaikgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGF4T2JqLT5y
b2xlVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChyb2xlICE9IEdyb3VwUm9sZSAmJiByb2xlICE9
IFVua25vd25Sb2xlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK3Vuc2lnbmVkIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpoaWVyYXJjaGljYWxMZXZlbCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9k
ZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKKyAgICBTdHJpbmcgYXJpYUxldmVsID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGFyaWFfbGV2ZWxBdHRyKTsKKyAgICBpZiAoIWFyaWFMZXZlbC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBhcmlhTGV2ZWwudG9JbnQoKTsKKyAgICAKKyAgICAvLyBPbmx5IHRyZWUg
aXRlbSB3aWxsIGNhbGN1bGF0ZSBpdHMgbGV2ZWwgdGhyb3VnaCB0aGUgRE9NIGN1cnJlbnRseS4K
KyAgICBpZiAocm9sZVZhbHVlKCkgIT0gVHJlZUl0ZW1Sb2xlKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICAvLyBIaWVyYXJjaHkgbGV2ZWxpbmcgc3RhcnRzIGF0IDAuCisgICAgLy8gV2Ug
bWVhc3VyZSB0cmVlIGhpZXJhcmNoeSBieSB0aGUgbnVtYmVyIG9mIGdyb3VwcyB0aGF0IHRoZSBp
dGVtIGlzIHdpdGhpbi4KKyAgICB1bnNpZ25lZCBsZXZlbCA9IDA7CisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CisgICAgd2hpbGUgKHBhcmVudCkgewor
ICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRSb2xlID0gcGFyZW50LT5yb2xlVmFsdWUo
KTsKKyAgICAgICAgaWYgKHBhcmVudFJvbGUgPT0gR3JvdXBSb2xlKQorICAgICAgICAgICAgbGV2
ZWwrKzsKKyAgICAgICAgZWxzZSBpZiAocGFyZW50Um9sZSA9PSBUcmVlUm9sZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmpl
Y3QoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGxldmVsOworfQorCitTdHJpbmcgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoKSBjb25zdAoreworICAgIE5vZGUq
IG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICAvLyBOb3RlOiBUZXh0SXRlcmF0b3IgZG9lc24ndCByZXR1cm4gYW55IHRl
eHQgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSByZW5kZXJlcnMuCisgICAgLy8gSWYgdGhpcyBj
b3VsZCBiZSBmaXhlZCwgaXQnZCBiZSBtb3JlIGFjY3VyYXRlIHVzZSBUZXh0SXRlcmF0b3IgaGVy
ZS4KKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gdG9FbGVt
ZW50KG5vZGUpLT5pbm5lclRleHQoKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgQWNjZXNz
aWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOworCisgICAgaWYgKCFub2RlKCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBib29sIGlzSW5w
dXRUYWcgPSBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKTsKKyAgICBpZiAoaXNJbnB1dFRhZykg
eworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVmYXVsdCgpOworICAgIH0KKworICAg
IGlmIChpc0lucHV0VGFnIHx8IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFS
b2xlQXR0cmlidXRlKCkpIHx8IGlzQ29udHJvbCgpKSB7CisgICAgICAgIEhUTUxMYWJlbEVsZW1l
bnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7
CisgICAgICAgIGlmIChsYWJlbCAmJiAhZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gbGFiZWwtPmlubmVyVGV4dCgpOworICAgIH0KKworICAgIC8vIElmIHRoaXMg
bm9kZSBpc24ndCByZW5kZXJlZCwgdGhlcmUncyBubyBpbm5lciB0ZXh0IHdlIGNhbiBleHRyYWN0
IGZyb20gYSBzZWxlY3QgZWxlbWVudC4KKyAgICBpZiAoIWlzQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCgpICYmIG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6
CisgICAgY2FzZSBCdXR0b25Sb2xlOgorICAgIGNhc2UgQ2hlY2tCb3hSb2xlOgorICAgIGNhc2Ug
TGlzdEJveE9wdGlvblJvbGU6CisgICAgY2FzZSBNZW51QnV0dG9uUm9sZToKKyAgICBjYXNlIE1l
bnVJdGVtUm9sZToKKyAgICBjYXNlIFJhZGlvQnV0dG9uUm9sZToKKyAgICBjYXNlIFRhYlJvbGU6
CisgICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGlzSGVhZGluZygpIHx8IGlzTGluaygpKQorICAg
ICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOworCisgICAgLy8gSWYgaXQncyBmb2N1c2Fi
bGUgYnV0IGl0J3Mgbm90IGNvbnRlbnQgZWRpdGFibGUgb3IgYSBrbm93biBjb250cm9sIHR5cGUs
IHRoZW4gaXQgd2lsbCBhcHBlYXIgdG8gICAgICAgICAgICAgICAgICAKKyAgICAvLyB0aGUgdXNl
ciBhcyBhIHNpbmdsZSBhdG9taWMgb2JqZWN0LCBzbyB3ZSBzaG91bGQgdXNlIGl0cyB0ZXh0IGFz
IHRoZSBkZWZhdWx0IHRpdGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGlm
IChpc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0ZXh0VW5kZXJF
bGVtZW50KCk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dGV4dCgpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhpcyBpcyBhIHVzZXIg
ZGVmaW5lZCBzdGF0aWMgdGV4dCwgdXNlIHRoZSBhY2Nlc3NpYmxlIG5hbWUgY29tcHV0YXRpb24u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBpZiAoYXJpYVJvbGVB
dHRyaWJ1dGUoKSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAgICAgcmV0dXJuIGFyaWFBY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKTsKKworICAgIGlmICghaXNUZXh0Q29udHJvbCgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKGlzTmF0aXZl
VGV4dENvbnRyb2woKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRh
ZykpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+
KG5vZGUpLT52YWx1ZSgpOworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKS0+dmFsdWUoKTsKKyAg
ICB9CisKKyAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKS0+aW5uZXJUZXh0KCk7Cit9CisK
K1N0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25zdAorewor
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBTdGF0aWNU
ZXh0Um9sZSkgeworICAgICAgICBTdHJpbmcgc3RhdGljVGV4dCA9IHRleHQoKTsKKyAgICAgICAg
aWYgKCFzdGF0aWNUZXh0Lmxlbmd0aCgpKQorICAgICAgICAgICAgc3RhdGljVGV4dCA9IHRleHRV
bmRlckVsZW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY1RleHQ7CisgICAgfQorCisgICAg
aWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQo
KTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKKyAgICAgICAgSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUp
OworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQtPnNlbGVjdGVkSW5k
ZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc2Vs
ZWN0RWxlbWVudC0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDAg
JiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihzZWxlY3RlZEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgb3ZlcnJpZGRlbkRlc2NyaXB0aW9u
ID0gbGlzdEl0ZW1zW3NlbGVjdGVkSW5kZXhdLT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxB
dHRyKTsKKyAgICAgICAgICAgIGlmICghb3ZlcnJpZGRlbkRlc2NyaXB0aW9uLmlzTnVsbCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZGVuRGVzY3JpcHRpb247CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50LT5tdWx0aXBsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHNlbGVjdEVsZW1lbnQtPnZhbHVlKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBpZiAoaXNUZXh0Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gdGV4dCgpOwor
CisgICAgLy8gRklYTUU6IFdlIG1pZ2h0IG5lZWQgdG8gaW1wbGVtZW50IGEgdmFsdWUgaGVyZSBm
b3IgbW9yZSB0eXBlcworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgbm90IHRvIGFk
dmVydGlzZSBhIHZhbHVlIGF0IGFsbCBmb3IgdGhlIHR5cGVzIGZvciB3aGljaCB3ZSBkb24ndCBp
bXBsZW1lbnQgb25lOworICAgIC8vIHRoaXMgd291bGQgcmVxdWlyZSBzdWJjbGFzc2luZyBvciBt
YWtpbmcgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzIGRvIHNvbWV0aGluZyBvdGhlciB0aGFu
IHJldHVybiBhCisgICAgLy8gc2luZ2xlIHN0YXRpYyBhcnJheS4KKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgQVJJQSBhY2Nlc3NpYmxl
IG5hbWUgYXMgZGVzY3JpYmVkIGJ5IHRoZSBNb3ppbGxhICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorLy8gQVJJQSBJbXBsZW1lbnRlcidzIEd1aWRlLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVOYW1lRm9y
Tm9kZShOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAg
IHJldHVybiB0b1RleHQobm9kZSktPmRhdGEoKTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pihub2RlKS0+dmFsdWUoKTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT5nZXRB
dHRyaWJ1dGUoYWx0QXR0cik7CisgICAgICAgIGlmICghYWx0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBhbHQ7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJp
bmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVs
ZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25zdAoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICB1bnNpZ25lZCBzaXplID0gZWxlbWVudHMuc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRWxlbWVudCog
aWRFbGVtZW50ID0gZWxlbWVudHNbaV07CisKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNz
aWJsZU5hbWVGb3JOb2RlKGlkRWxlbWVudCkpOworICAgICAgICBmb3IgKE5vZGUqIG4gPSBpZEVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoaWRFbGVtZW50
KSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShuKSk7
CisKKyAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnICcpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50c0Zyb21BdHRyaWJ1dGUoVmVjdG9yPEVs
ZW1lbnQqPiYgZWxlbWVudHMsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkgY29uc3QK
K3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUcmVlU2NvcGUqIHNj
b3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgaWYgKCFzY29wZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIGlkTGlzdCA9IGdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLnN0cmluZygp
OworICAgIGlmIChpZExpc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZExp
c3QucmVwbGFjZSgnXG4nLCAnICcpOworICAgIFZlY3RvcjxTdHJpbmc+IGlkVmVjdG9yOworICAg
IGlkTGlzdC5zcGxpdCgnICcsIGlkVmVjdG9yKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBpZFZl
Y3Rvci5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBBdG9taWNTdHJpbmcgaWROYW1lKGlkVmVjdG9yW2ldKTsKKyAgICAgICAgRWxlbWVu
dCogaWRFbGVtZW50ID0gc2NvcGUtPmdldEVsZW1lbnRCeUlkKGlkTmFtZSk7CisgICAgICAgIGlm
IChpZEVsZW1lbnQpCisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoaWRFbGVtZW50KTsKKyAg
ICB9Cit9CisKKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUxhYmVsZWRCeUVs
ZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdAoreworICAgIGVsZW1lbnRz
RnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9sYWJlbGVkYnlBdHRyKTsKKyAgICBpZiAoIWVs
ZW1lbnRzLnNpemUoKSkKKyAgICAgICAgZWxlbWVudHNGcm9tQXR0cmlidXRlKGVsZW1lbnRzLCBh
cmlhX2xhYmVsbGVkYnlBdHRyKTsKK30KKworCitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIFZlY3RvcjxFbGVtZW50
Kj4gZWxlbWVudHM7CisgICAgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKGVsZW1lbnRzKTsKKworICAg
IHJldHVybiBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyhlbGVtZW50cyk7Cit9
CisKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKCkg
Y29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzV2ViQXJlYSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsOCArNjgsNzEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNh
bnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzQW5j
aG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpc0ZpZWxkc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzR3JvdXAo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNIZWFkaW5nKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzSG92ZXJlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTGluaygpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01lbnUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNZW51QmFyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWVudUJ1dHRvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc01lbnVJdGVtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzTWVudVJlbGF0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNdWx0aVNlbGVjdGFi
bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNOYXRpdmVDaGVja2JveE9yUmFkaW8oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc05hdGl2ZVRleHRDb250cm9sKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
UGFzc3dvcmRGaWVsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyZXNzSW5kaWNh
dG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNTbGlkZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNXZWJB
cmVhKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0
ZXJtaW5hdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzc2VkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZXF1aXJlZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXROb2RlKE5vZGUqKTsKKyAgICB2aXJ0dWFs
IE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICB2aXJ0dWFsIERvY3Vt
ZW50KiBkb2N1bWVudCgpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29sIGNhblNldEZvY3VzQXR0
cmlidXRlKCkgY29uc3Q7Ci0gICAgCisgICAgdmlydHVhbCBpbnQgaGVhZGluZ0xldmVsKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBmbG9hdCB2YWx1ZUZvclJhbmdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBt
YXhWYWx1ZUZvclJhbmdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBtaW5WYWx1ZUZvclJh
bmdlKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBzdGVwVmFsdWVGb3JSYW5nZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFJhZGlvQnV0dG9u
KCk7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFRhYkl0ZW0oKTsK
KyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9yUmFkaW9WYWx1
ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBoaWVyYXJjaGljYWxMZXZlbCgpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRleHRVbmRlckVsZW1lbnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3Ry
aW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgYXJpYUxhYmVsZWRC
eUF0dHJpYnV0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBFbGVtZW50KiBhY3Rpb25FbGVtZW50
KCkgY29uc3Q7CisgICAgRWxlbWVudCogbW91c2VCdXR0b25MaXN0ZW5lcigpIGNvbnN0OworICAg
IHZpcnR1YWwgRWxlbWVudCogYW5jaG9yRWxlbWVudCgpIGNvbnN0OworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG1lbnVGb3JNZW51QnV0dG9uKCkgY29uc3Q7CisgICAKKyAgICB2aXJ0dWFsIHZv
aWQgY2hhbmdlVmFsdWVCeVBlcmNlbnQoZmxvYXQgcGVyY2VudENoYW5nZSk7CisgCiAgICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNvbnN0OwpAQCAtNzcsMTQgKzE0
MCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRP
YmplY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9i
amVjdElmRXhpc3RzKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldE5vZGUoTm9kZSopOwotICAgIHZp
cnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQotICAgIHZpcnR1YWwg
RG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7
CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpOwogCisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudCgp
OworICAgIHZpcnR1YWwgdm9pZCBkZWNyZW1lbnQoKTsKKwogICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBlbGVtZW50UmVjdCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC05NiwxMSArMTU4LDI2IEBA
IHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNj
ZXNzaWJpbGl0eVJvbGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdDsKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlh
Um9sZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFy
aWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcmVtYXBBcmlh
Um9sZUR1ZVRvUGFyZW50KEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdDsKICAgICBib29sIGhhc0Nv
bnRlbnRFZGl0YWJsZUF0dHJpYnV0ZVNldCgpIGNvbnN0OworICAgIGJvb2wgaXNEZXNjZW5kYW50
T2ZCYXJyZW5QYXJlbnQoKSBjb25zdDsKKyAgICB2b2lkIGFsdGVyU2xpZGVyVmFsdWUoYm9vbCBp
bmNyZWFzZSk7CisgICAgdm9pZCBjaGFuZ2VWYWx1ZUJ5U3RlcChib29sIGluY3JlYXNlKTsKKyAg
ICBib29sIGlzQVJJQVJhbmdlKCkgY29uc3Q7CisgICAgYm9vbCBpc0dlbmVyaWNGb2N1c2FibGVF
bGVtZW50KCkgY29uc3Q7CisgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxGb3JFbGVtZW50KEVs
ZW1lbnQqKSBjb25zdDsKKyAgICBTdHJpbmcgYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigp
IGNvbnN0OworICAgIHZvaWQgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzKSBjb25zdDsKKyAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9y
RWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0OworICAgIHZvaWQgZWxl
bWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBFbGVtZW50KiBtZW51RWxlbWVudEZvck1lbnVCdXR0
b24oKSBjb25zdDsKKyAgICBFbGVtZW50KiBtZW51SXRlbUVsZW1lbnRGb3JNZW51KCkgY29uc3Q7
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWVudUJ1dHRvbkZvck1lbnUoKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw2NiArNDc3LDcgQEAg
QWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIAogICAgIHJldHVy
biAwOwogfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzV2ViQXJlYSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzSW1hZ2VCdXR0b24oKSBjb25zdAotewotICAg
IHJldHVybiBpc05hdGl2ZUltYWdlKCkgJiYgcm9sZVZhbHVlKCkgPT0gQnV0dG9uUm9sZTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0FuY2hvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICFpc05hdGl2ZUltYWdlKCkgJiYgaXNMaW5rKCk7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmVuZGVyZXItPmlzVGV4dENvbnRyb2woKTsKLX0KICAgICAKLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFu
b2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQgPSBub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpbnB1dEVsZW1lbnQt
PmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBTb21lIHdl
YnNpdGVzIGRvbid0IGxhYmVsIHRoZWlyIHNlYXJjaCBmaWVsZHMgYXMgc3VjaC4gSG93ZXZlciwg
dGhleSB3aWxsCi0gICAgLy8gdXNlIHRoZSB3b3JkICJzZWFyY2giIGluIGVpdGhlciB0aGUgZm9y
bSBvciBpbnB1dCB0eXBlLiBUaGlzIHdvbid0IGNhdGNoIGV2ZXJ5IGNhc2UsCi0gICAgLy8gYnV0
IGl0IHdpbGwgY2F0Y2ggZ29vZ2xlLmNvbSBmb3IgZXhhbXBsZS4KLSAgICAKLSAgICAvLyBDaGVj
ayB0aGUgbm9kZSBuYW1lIG9mIHRoZSBpbnB1dCB0eXBlLCBzb21ldGltZXMgaXQncyAic2VhcmNo
Ii4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwotICAgIGlmIChuYW1lQXR0cmlidXRlLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxz
ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIENoZWNrIHRoZSBmb3JtIGFj
dGlvbiBhbmQgdGhlIG5hbWUsIHdoaWNoIHdpbGwgc29tZXRpbWVzIGJlICJzZWFyY2giLgotICAg
IEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGlucHV0RWxlbWVudC0+Zm9ybSgpOwotICAgIGlmIChm
b3JtICYmIChmb3JtLT5uYW1lKCkuY29udGFpbnMoInNlYXJjaCIsIGZhbHNlKSB8fCBmb3JtLT5h
Y3Rpb24oKS5jb250YWlucygic2VhcmNoIiwgZmFsc2UpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5kZXJl
ci0+aXNCb3hNb2RlbE9iamVjdCgpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJl
ciktPmlzSW1hZ2UoKTsKLX0gICAgCi0gICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBJbWFnZVJv
bGU7Ci19Ci0KIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBdHRhY2htZW50KCkg
Y29uc3QKIHsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hN
b2RlbE9iamVjdCgpOwpAQCAtNTQ4LDIxICs0ODksNiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzQXR0YWNoCiAgICAgcmV0dXJuIGlzV2lkZ2V0ICYmIGFyaWFSb2xlQXR0cmli
dXRlKCkgPT0gVW5rbm93blJvbGU7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0g
ICAgaWYgKCFtX3JlbmRlcmVyLT5ub2RlKCkgfHwgIW1fcmVuZGVyZXItPm5vZGUoKS0+aXNIVE1M
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGFyaWFSb2xlQXR0cmli
dXRlKCkgIT0gVW5rbm93blJvbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+dG9JbnB1dEVs
ZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCk7Ci19Ci0gICAgCiBi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwbG9hZEJ1dHRvbigpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+bm9kZSgpICYmIG1fcmVuZGVy
ZXItPm5vZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKQEAgLTU3MywxNDcgKzQ5OSw2IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNGaWxlVXAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAgICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzSW5wdXRJbWFn
ZSgpIGNvbnN0Ci17Ci0gICAgTm9kZSogZWxlbWVudE5vZGUgPSBub2RlKCk7Ci0gICAgaWYgKHJv
bGVWYWx1ZSgpID09IEJ1dHRvblJvbGUgJiYgZWxlbWVudE5vZGUgJiYgZWxlbWVudE5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnROb2RlKTsKLSAgICAgICAgcmV0
dXJuIGlucHV0LT5pc0ltYWdlQnV0dG9uKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Byb2dyZXNzSW5kaWNh
dG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gUHJvZ3Jlc3NJbmRpY2F0
b3JSb2xlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzU2xpZGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gU2xpZGVyUm9sZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01lbnVSZWxhdGVkKCkgY29uc3QKLXsKLSAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcm9sZVZhbHVlKCk7Ci0gICAgcmV0dXJuIHJvbGUg
PT0gTWVudVJvbGUgCi0gICAgICAgIHx8IHJvbGUgPT0gTWVudUJhclJvbGUKLSAgICAgICAgfHwg
cm9sZSA9PSBNZW51QnV0dG9uUm9sZQotICAgICAgICB8fCByb2xlID09IE1lbnVJdGVtUm9sZTsK
LX0gICAgCi0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNZW51KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTWVudVJvbGU7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNNZW51QmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9s
ZVZhbHVlKCkgPT0gTWVudUJhclJvbGU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aXNNZW51QnV0dG9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0g
TWVudUJ1dHRvblJvbGU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNN
ZW51SXRlbSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IE1lbnVJdGVtUm9s
ZTsKLX0KLSAgICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUHJlc3NlZCgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwotICAgIGlmIChyb2xlVmFsdWUoKSAh
PSBCdXR0b25Sb2xlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBub2RlID0g
bV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gSWYgdGhpcyBpcyBhbiBBUklBIGJ1dHRvbiwgY2hlY2sgdGhlIGFyaWEtcHJl
c3NlZCBhdHRyaWJ1dGUgcmF0aGVyIHRoYW4gbm9kZSgpLT5hY3RpdmUoKQotICAgIGlmIChhcmlh
Um9sZUF0dHJpYnV0ZSgpID09IEJ1dHRvblJvbGUpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX3ByZXNzZWRBdHRyKSwgInRydWUiKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG5vZGUtPmFjdGl2ZSgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwotICAg
IGlmICghbV9yZW5kZXJlci0+bm9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5w
dXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3QKLXsKLSAgICBOb2RlKiBlbGVtZW50Tm9kZSA9IG5vZGUoKTsKLSAgICBpZiAoZWxlbWVu
dE5vZGUpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50Tm9kZS0+
dG9JbnB1dEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGlucHV0KQotICAgICAgICAgICAgcmV0dXJu
IGlucHV0LT5pc0NoZWNrYm94KCkgfHwgaW5wdXQtPmlzUmFkaW9CdXR0b24oKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0NoZWNrZWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAg
ICAKLSAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRmlyc3QgdGVzdCBmb3IgbmF0aXZlIGNoZWNrZWRu
ZXNzIHNlbWFudGljcwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUt
PnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKGlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOwotCi0gICAgLy8gRWxzZSwgaWYg
dGhpcyBpcyBhbiBBUklBIGNoZWNrYm94IG9yIHJhZGlvLCByZXNwZWN0IHRoZSBhcmlhLWNoZWNr
ZWQgYXR0cmlidXRlCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9sZUF0
dHJpYnV0ZSgpOwotICAgIGlmIChhcmlhUm9sZSA9PSBSYWRpb0J1dHRvblJvbGUgfHwgYXJpYVJv
bGUgPT0gQ2hlY2tCb3hSb2xlKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRB
dHRyaWJ1dGUoYXJpYV9jaGVja2VkQXR0ciksICJ0cnVlIikpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBp
dCdzIG5vdCBjaGVja2VkCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmlzSG92ZXJlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVy
ZXIpOwotICAgIHJldHVybiBtX3JlbmRlcmVyLT5ub2RlKCkgJiYgbV9yZW5kZXJlci0+bm9kZSgp
LT5ob3ZlcmVkKCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNdWx0
aVNlbGVjdGFibGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICAKLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFNdWx0aVNlbGVjdGFibGUgPSBnZXRBdHRyaWJ1dGUo
YXJpYV9tdWx0aXNlbGVjdGFibGVBdHRyKTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJp
YU11bHRpU2VsZWN0YWJsZSwgInRydWUiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGFyaWFNdWx0aVNlbGVjdGFibGUsICJmYWxzZSIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2Jq
ZWN0KCkgfHwgIXRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlciktPmlzTGlzdEJveCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXItPm5vZGUoKSAm
JiB0b0hUTUxTZWxlY3RFbGVtZW50KG1fcmVuZGVyZXItPm5vZGUoKSktPm11bHRpcGxlKCk7Ci19
Ci0KIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZWFkT25seSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fcmVuZGVyZXIpOwpAQCAtNzMwLDE1ICs1MTUsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9uCiAgICAgICAgIHJldHVybiAhZG9jdW1lbnQt
PnJlbmRlcmVySXNFZGl0YWJsZSgpOwogICAgIH0KIAotICAgIGlmIChtX3JlbmRlcmVyLT5pc0Jv
eE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRv
UmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlcik7Ci0gICAgICAgIGlmIChib3gtPmlzVGV4
dEZpZWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KGJveC0+bm9kZSgpKS0+cmVhZE9ubHkoKTsKLSAgICAgICAgaWYgKGJveC0+aXNUZXh0QXJl
YSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQq
Pihib3gtPm5vZGUoKSktPnJlYWRPbmx5KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICFtX3JlbmRl
cmVyLT5ub2RlKCkgfHwgIW1fcmVuZGVyZXItPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7
CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KCk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNPZmZTY3JlZW4oKSBjb25zdApAQCAt
NzUxLDEwNyArNTI4LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc09mZlNj
cgogICAgIHJldHVybiB2aWV3UmVjdC5pc0VtcHR5KCk7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpoZWFkaW5nTGV2ZWwoKSBjb25zdAotewotICAgIC8vIGhlYWRpbmdzIGNh
biBiZSBpbiBibG9jayBmbG93IGFuZCBub24tYmxvY2sgZmxvdwotICAgIE5vZGUqIGVsZW1lbnQg
PSBub2RlKCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IEhlYWRpbmdSb2xlKQotICAgICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKS50b0ludCgpOwotCi0gICAgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoaDFUYWcpKQotICAgICAgICByZXR1cm4gMTsKLSAgICAKLSAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShoMlRhZykpCi0gICAgICAgIHJldHVybiAyOwotICAgIAotICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKGgzVGFnKSkKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgCi0gICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaDRUYWcpKQotICAgICAgICByZXR1cm4gNDsKLSAgICAK
LSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoNVRhZykpCi0gICAgICAgIHJldHVybiA1Owot
ICAgIAotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGg2VGFnKSkKLSAgICAgICAgcmV0dXJu
IDY7Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aXNIZWFkaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gSGVh
ZGluZ1JvbGU7Ci19Ci0gICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTGlu
aygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFdlYkNvcmVMaW5rUm9sZTsK
LX0gICAgCi0gICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQ29udHJvbCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICByZXR1cm4gbm9k
ZSAmJiAoKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHx8IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmlzQVJJQUNvbnRyb2woYXJpYVJvbGVBdHRyaWJ1dGUoKSkpOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmllbGRzZXQoKSBjb25zdAotewot
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlckJveE1vZGVsT2JqZWN0
KCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biByZW5kZXJlci0+aXNGaWVsZHNldCgpOwotfQotICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNHcm91cCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IEdy
b3VwUm9sZTsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbigpCi17Ci0gICAgaWYgKCFpc1JhZGlvR3JvdXAoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKLQotICAg
IC8vIEZpbmQgdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbiB0aGF0IGlzIHNlbGVjdGVkIChpZS4gdGhl
IGludFZhbHVlID09IDEpLgotICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdCA9IGNoaWxkcmVuW2ldLmdldCgpOwotICAgICAgICBpZiAob2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBSYWRpb0J1dHRvblJvbGUgJiYgb2JqZWN0LT5jaGVja2JveE9yUmFk
aW9WYWx1ZSgpID09IEJ1dHRvblN0YXRlT24pCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKCkKLXsKLSAgICBpZiAoIWlzVGFiTGlz
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBGaW5kIHRoZSBjaGlsZCB0YWIg
aXRlbSB0aGF0IGlzIHNlbGVjdGVkIChpZS4gdGhlIGludFZhbHVlID09IDEpLgotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzOwotICAgIHRh
YkNoaWxkcmVuKHRhYnMpOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgCi0g
ICAgc2l6ZV90IHNpemUgPSB0YWJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBjaGls
ZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNUYWJJdGVtKCkgJiYgb2JqZWN0
LT5pc0NoZWNrZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQotCiBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphbmNob3JF
bGVtZW50KCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC04ODQsMTQ1ICs1NjAs
NiBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphbmNoCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjdGlvbkVsZW1l
bnQoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAobm9kZSkg
ewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KG5vZGUpOwotICAgICAgICAgICAgaWYgKCFpbnB1dC0+ZGlzYWJsZWQoKSAmJiAoaXNDaGVja2Jv
eE9yUmFkaW8oKSB8fCBpbnB1dC0+aXNUZXh0QnV0dG9uKCkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBpbnB1dDsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKGJ1dHRvblRh
ZykpCi0gICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOwotICAgIH0KLQotICAgIGlm
IChpc0ZpbGVVcGxvYWRCdXR0b24oKSkKLSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChtX3JlbmRl
cmVyLT5ub2RlKCkpOwotICAgICAgICAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmlidXRlKCkpKQotICAgICAgICByZXR1cm4gdG9FbGVt
ZW50KG1fcmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBpZiAoaXNJbWFnZUJ1dHRvbigpKQotICAg
ICAgICByZXR1cm4gdG9FbGVtZW50KG1fcmVuZGVyZXItPm5vZGUoKSk7Ci0gICAgCi0gICAgaWYg
KG1fcmVuZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KG1fcmVuZGVyZXIpLT5pc01lbnVMaXN0KCkpCi0gICAgICAgIHJldHVybiB0b0VsZW1lbnQobV9y
ZW5kZXJlci0+bm9kZSgpKTsKLQotICAgIHN3aXRjaCAocm9sZVZhbHVlKCkpIHsKLSAgICBjYXNl
IEJ1dHRvblJvbGU6Ci0gICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6Ci0gICAgY2FzZSBUYWJSb2xl
OgotICAgIGNhc2UgTWVudUl0ZW1Sb2xlOgotICAgIGNhc2UgTGlzdEl0ZW1Sb2xlOgotICAgICAg
ICByZXR1cm4gdG9FbGVtZW50KG1fcmVuZGVyZXItPm5vZGUoKSk7IAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBFbGVtZW50KiBlbHQgPSBhbmNob3JFbGVt
ZW50KCk7Ci0gICAgaWYgKCFlbHQpCi0gICAgICAgIGVsdCA9IG1vdXNlQnV0dG9uTGlzdGVuZXIo
KTsKLSAgICByZXR1cm4gZWx0OwotfQotCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojptb3VzZUJ1dHRvbkxpc3RlbmVyKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0gbV9y
ZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ci0gICAgLy8gY2hlY2sgaWYgb3VyIHBhcmVudCBpcyBhIG1vdXNlIGJ1dHRvbiBsaXN0ZW5lcgot
ICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7Ci0KLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2VhcmNoIGxpa2UgYW5jaG9y
RWxlbWVudCBkb2VzCi0gICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB8fCBlbGVtZW50LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgfHwgZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSkKLSAgICAgICAgICAgIHJldHVy
biBlbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmFsdGVyU2xpZGVyVmFsdWUoYm9vbCBpbmNyZWFzZSkKLXsKLSAgICBp
ZiAocm9sZVZhbHVlKCkgIT0gU2xpZGVyUm9sZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFnZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLmlzRW1wdHkoKSkKLSAgICAgICAgY2hhbmdlVmFsdWVC
eVN0ZXAoaW5jcmVhc2UpOwotICAgIGVsc2UKLSAgICAgICAgY2hhbmdlVmFsdWVCeVBlcmNlbnQo
aW5jcmVhc2UgPyA1IDogLTUpOwotfQotICAgIAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjppbmNyZW1lbnQoKQotewotICAgIGFsdGVyU2xpZGVyVmFsdWUodHJ1ZSk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGVjcmVtZW50KCkKLXsKLSAgICBhbHRlclNs
aWRlclZhbHVlKGZhbHNlKTsKLX0KLQotc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdXaXRoQXJpYVJv
bGUoU3RyaW5nIHJvbGUsIE5vZGUqIG5vZGUpCi17Ci0gICAgTm9kZSogc2libGluZyA9IG5vZGUt
PnBhcmVudE5vZGUoKS0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChzaWJsaW5nKSB7Ci0gICAg
ICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNpYmxp
bmcpLT5nZXRBdHRyaWJ1dGUocm9sZUF0dHIpOwotICAgICAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHNpYmxpbmdBcmlhUm9sZSwgcm9sZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihzaWJsaW5nKTsKLSAgICAgICAgfQotICAgICAgICBzaWJsaW5n
ID0gc2libGluZy0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1lbnVFbGVtZW50Rm9yTWVu
dUJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gTWVudUJ1
dHRvblJvbGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHNpYmxpbmdXaXRoQXJp
YVJvbGUoIm1lbnUiLCByZW5kZXJlcigpLT5ub2RlKCkpOwotfQotCi1BY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51Rm9yTWVudUJ1dHRvbigpIGNvbnN0
Ci17Ci0gICAgRWxlbWVudCogbWVudSA9IG1lbnVFbGVtZW50Rm9yTWVudUJ1dHRvbigpOwotICAg
IGlmIChtZW51ICYmIG1lbnUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKG1lbnUpOwotICAgIHJldHVybiAwOwotfQotCi1FbGVtZW50KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51SXRlbUVsZW1lbnRGb3JNZW51KCkgY29uc3QK
LXsKLSAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBNZW51Um9sZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIHNpYmxpbmdXaXRoQXJpYVJvbGUoIm1lbnVpdGVtIiwg
cmVuZGVyZXIoKS0+bm9kZSgpKTsgICAgCi19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6Om1lbnVCdXR0b25Gb3JNZW51KCkgY29uc3QKLXsKLSAgICBF
bGVtZW50KiBtZW51SXRlbSA9IG1lbnVJdGVtRWxlbWVudEZvck1lbnUoKTsKLQotICAgIGlmICht
ZW51SXRlbSAmJiBtZW51SXRlbS0+cmVuZGVyZXIoKSkgewotICAgICAgICAvLyBBUklBIGp1c3Qg
aGFzIGdlbmVyaWMgbWVudSBpdGVtcy4gIEFwcEtpdCBuZWVkcyB0byBrbm93IGlmIHRoaXMgaXMg
YSB0b3AgbGV2ZWwgaXRlbXMgbGlrZSBNZW51QmFyQnV0dG9uIG9yIE1lbnVCYXJJdGVtCi0gICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1lbnVJdGVtQVggPSBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKG1lbnVJdGVtKTsKLSAgICAgICAgaWYgKG1lbnVJdGVtQVgtPmlzTWVudUJ1dHRv
bigpKQotICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQVg7Ci0gICAgfQotICAgIHJldHVybiAw
OwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGVscFRleHQoKSBjb25z
dAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTEwNjEsNDAgKzU5OCw2IEBAIFN0cmluZyBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGUKICAgICAKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9Ci0gICAgCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoaWVyYXJj
aGljYWxMZXZlbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgU3RyaW5n
IGFyaWFMZXZlbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cik7Ci0gICAg
aWYgKCFhcmlhTGV2ZWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYUxldmVsLnRvSW50
KCk7Ci0gICAgCi0gICAgLy8gT25seSB0cmVlIGl0ZW0gd2lsbCBjYWxjdWxhdGUgaXRzIGxldmVs
IHRocm91Z2ggdGhlIERPTSBjdXJyZW50bHkuCi0gICAgaWYgKHJvbGVWYWx1ZSgpICE9IFRyZWVJ
dGVtUm9sZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gSGllcmFyY2h5IGxldmVs
aW5nIHN0YXJ0cyBhdCAwLgotICAgIC8vIFdlIG1lYXN1cmUgdHJlZSBoaWVyYXJjaHkgYnkgdGhl
IG51bWJlciBvZiBncm91cHMgdGhhdCB0aGUgaXRlbSBpcyB3aXRoaW4uCi0gICAgdW5zaWduZWQg
bGV2ZWwgPSAwOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVj
dCgpOwotICAgIHdoaWxlIChwYXJlbnQpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcGFy
ZW50Um9sZSA9IHBhcmVudC0+cm9sZVZhbHVlKCk7Ci0gICAgICAgIGlmIChwYXJlbnRSb2xlID09
IEdyb3VwUm9sZSkKLSAgICAgICAgICAgIGxldmVsKys7Ci0gICAgICAgIGVsc2UgaWYgKHBhcmVu
dFJvbGUgPT0gVHJlZVJvbGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAg
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBsZXZlbDsKLX0KIAogc3RhdGljIFRleHRJdGVyYXRvckJlaGF2aW9yIHRleHRJdGVyYXRvckJl
aGF2aW9yRm9yVGV4dFJhbmdlKCkKIHsKQEAgLTExNDYsNTkgKzY0OSw2IEBAIE5vZGUqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGUoKSAKICAgICByZXR1cm4gbV9yZW5kZXJlciA/IG1f
cmVuZGVyZXItPm5vZGUoKSA6IDA7IAogfSAgICAKICAgICAKLUFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkpCi0gICAgICAgIHJldHVy
biBpc0NoZWNrZWQoKSA/IEJ1dHRvblN0YXRlT24gOiBCdXR0b25TdGF0ZU9mZjsKLSAgICAKLSAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2hlY2tib3hPclJhZGlvVmFsdWUoKTsKLX0K
LQotU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIGlmICghaXNBUklBUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIAotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZXRleHRBdHRyKS5zdHJp
bmcoKTsKLX0KLSAgICAKLWZsb2F0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0ZXBWYWx1
ZUZvclJhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHN0ZXBBdHRyKS50
b0Zsb2F0KCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBUklBUmFu
Z2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2FyaWFSb2xlID09IFByb2dyZXNzSW5kaWNhdG9y
Um9sZQotICAgICAgICB8fCBtX2FyaWFSb2xlID09IFNsaWRlclJvbGUKLSAgICAgICAgfHwgbV9h
cmlhUm9sZSA9PSBTY3JvbGxCYXJSb2xlCi0gICAgICAgIHx8IG1fYXJpYVJvbGUgPT0gU3BpbkJ1
dHRvblJvbGU7Ci19Ci0gICAgCi1mbG9hdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2YWx1
ZUZvclJhbmdlKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCi0gICAgICAgIHJl
dHVybiAwLjBmOwotCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0ciku
dG9GbG9hdCgpOwotfQotCi1mbG9hdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXhWYWx1
ZUZvclJhbmdlKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCi0gICAgICAgIHJl
dHVybiAwLjBmOwotCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWF4QXR0ciku
dG9GbG9hdCgpOwotfQotCi1mbG9hdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptaW5WYWx1
ZUZvclJhbmdlKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCi0gICAgICAgIHJl
dHVybiAwLjBmOwotCi0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWluQXR0ciku
dG9GbG9hdCgpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5n
VmFsdWUoKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTEyNTcsOTkgKzcwNyw2
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmcKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgQVJJQSBhY2Nl
c3NpYmxlIG5hbWUgYXMgZGVzY3JpYmVkIGJ5IHRoZSBNb3ppbGxhCi0vLyBBUklBIEltcGxlbWVu
dGVyJ3MgR3VpZGUuCi1zdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBu
b2RlKQotewotICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybiB0b1Rl
eHQobm9kZSktPmRhdGEoKTsKLQotICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+dmFs
dWUoKTsKLQotICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbHQgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoYWx0
QXR0cik7Ci0gICAgICAgIGlmICghYWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBh
bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVj
dG9yPEVsZW1lbnQqPiAmZWxlbWVudHMpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwotICAgIHVuc2lnbmVkIHNpemUgPSBlbGVtZW50cy5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBFbGVtZW50KiBpZEVsZW1lbnQg
PSBlbGVtZW50c1tpXTsKLQotICAgICAgICBidWlsZGVyLmFwcGVuZChhY2Nlc3NpYmxlTmFtZUZv
ck5vZGUoaWRFbGVtZW50KSk7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IGlkRWxlbWVudC0+Zmly
c3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShpZEVsZW1lbnQpKQotICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5hbWVGb3JOb2RlKG4pKTsKLQotICAgICAg
ICBpZiAoaSAhPSBzaXplIC0gMSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0g
ICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNvbnN0Ci17Ci0gICAg
Tm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVHJlZVNjb3BlKiBzY29w
ZSA9IG5vZGUtPnRyZWVTY29wZSgpOwotICAgIGlmICghc2NvcGUpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBTdHJpbmcgaWRMaXN0ID0gZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkuc3RyaW5n
KCk7Ci0gICAgaWYgKGlkTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpZExpc3QucmVwbGFjZSgnXG4nLCAnICcpOwotICAgIFZlY3RvcjxTdHJpbmc+IGlkVmVjdG9y
OwotICAgIGlkTGlzdC5zcGxpdCgnICcsIGlkVmVjdG9yKTsKLSAgICAKLSAgICB1bnNpZ25lZCBz
aXplID0gaWRWZWN0b3Iuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGlkTmFtZShpZFZlY3RvcltpXSk7Ci0gICAg
ICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IHNjb3BlLT5nZXRFbGVtZW50QnlJZChpZE5hbWUpOwot
ICAgICAgICBpZiAoaWRFbGVtZW50KQotICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGlkRWxl
bWVudCk7Ci0gICAgfQotfQotICAgIAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
cmlhTGFiZWxlZEJ5RWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpIGNvbnN0Ci17
Ci0gICAgZWxlbWVudHNGcm9tQXR0cmlidXRlKGVsZW1lbnRzLCBhcmlhX2xhYmVsZWRieUF0dHIp
OwotICAgIGlmICghZWxlbWVudHMuc2l6ZSgpKQotICAgICAgICBlbGVtZW50c0Zyb21BdHRyaWJ1
dGUoZWxlbWVudHMsIGFyaWFfbGFiZWxsZWRieUF0dHIpOwotfQotICAgCi1TdHJpbmcgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtZW50czsKLSAgICBhcmlhTGFiZWxlZEJ5RWxlbWVudHMo
ZWxlbWVudHMpOwotICAgIAotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JF
bGVtZW50cyhlbGVtZW50cyk7Ci19Ci0KLXN0YXRpYyBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbEZv
ckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3Qg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKTsKLSAg
ICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUo
bGFiZWxUYWcpKSB7Ci0gICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRp
Y19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlm
IChsYWJlbC0+Y29udHJvbCgpID09IGVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxh
YmVsOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQotICAgIAogSFRN
TExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFiZWxFbGVtZW50Q29u
dGFpbmVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0xMzY4LDU1ICs3MjUs
NiBAQCBIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqCiAgICAgcmV0dXJu
IDA7CiB9CiAKLVN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZSgpIGNvbnN0
Ci17Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwotICAgIAotICAg
IGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTm9kZSog
bm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICAKLSAgICBib29sIGlzSW5wdXRUYWcgPSBub2RlLT5oYXNUYWdOYW1l
KGlucHV0VGFnKTsKLSAgICBpZiAoaXNJbnB1dFRhZykgewotICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKLSAgICAg
ICAgaWYgKGlucHV0LT5pc1RleHRCdXR0b24oKSkKLSAgICAgICAgICAgIHJldHVybiBpbnB1dC0+
dmFsdWVXaXRoRGVmYXVsdCgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNJbnB1dFRhZyB8fCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSB8fCBp
c0NvbnRyb2woKSkgewotICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9y
RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkpOwotICAgICAgICBpZiAobGFiZWwg
JiYgIWV4cG9zZXNUaXRsZVVJRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGxhYmVsLT5p
bm5lclRleHQoKTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgY2FzZSBC
dXR0b25Sb2xlOgotICAgIGNhc2UgTGlzdEJveE9wdGlvblJvbGU6Ci0gICAgY2FzZSBNZW51SXRl
bVJvbGU6Ci0gICAgY2FzZSBNZW51QnV0dG9uUm9sZToKLSAgICBjYXNlIFJhZGlvQnV0dG9uUm9s
ZToKLSAgICBjYXNlIENoZWNrQm94Um9sZToKLSAgICBjYXNlIFRhYlJvbGU6Ci0gICAgY2FzZSBQ
b3BVcEJ1dHRvblJvbGU6Ci0gICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgCi0gICAgaWYgKGlzSGVhZGluZygp
IHx8IGlzTGluaygpKQotICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwotCi0gICAg
Ly8gSWYgaXQncyBmb2N1c2FibGUgYnV0IGl0J3Mgbm90IGNvbnRlbnQgZWRpdGFibGUgb3IgYSBr
bm93biBjb250cm9sIHR5cGUsIHRoZW4gaXQgd2lsbCBhcHBlYXIgdG8KLSAgICAvLyB0aGUgdXNl
ciBhcyBhIHNpbmdsZSBhdG9taWMgb2JqZWN0LCBzbyB3ZSBzaG91bGQgdXNlIGl0cyB0ZXh0IGFz
IHRoZSBkZWZhdWx0IHRpdGxlLgotICAgIGlmIChpc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiB0ZXh0VW5kZXJFbGVtZW50KCk7Ci0KLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhRGVzY3JpYmVk
QnlBdHRyaWJ1dGUoKSBjb25zdAogewogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7CkBA
IC0xNDI1LDE5ICs3MzMsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJp
YURlCiAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKGVsZW1l
bnRzKTsKIH0KICAgICAKLVN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhQWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmcgYXJpYUxhYmVsZWRC
eSA9IGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKTsKLSAgICBpZiAoIWFyaWFMYWJlbGVkQnkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYUxhYmVsZWRCeTsKLQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXJpYUxhYmVsID0gZ2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKLSAgICBp
ZiAoIWFyaWFMYWJlbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBhcmlhTGFiZWw7Ci0gICAg
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6d2ViQXJlYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgLy8g
VGhlIFdlYkFyZWEgZGVzY3JpcHRpb24gc2hvdWxkIGZvbGxvdyB0aGlzIG9yZGVyOgpAQCAtMTQ5
MCw0MCArNzg1LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3MK
ICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIC8v
IFN0YXRpYyB0ZXh0IHNob3VsZCBub3QgaGF2ZSBhIGRlc2NyaXB0aW9uLCBpdCBzaG91bGQgb25s
eSBoYXZlIGEgc3RyaW5nVmFsdWUuCi0gICAgaWYgKHJvbGVWYWx1ZSgpID09IFN0YXRpY1RleHRS
b2xlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgU3RyaW5nIGFyaWFEZXNj
cmlwdGlvbiA9IGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoIWFyaWFE
ZXNjcmlwdGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBhcmlhRGVzY3JpcHRpb247Ci0g
ICAgCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoaXNJbWFn
ZSgpIHx8IGlzSW5wdXRJbWFnZSgpIHx8IGlzTmF0aXZlSW1hZ2UoKSB8fCBpc0NhbnZhcygpKSB7
Ci0gICAgICAgIGlmIChub2RlICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT5nZXRBdHRy
aWJ1dGUoYWx0QXR0cik7Ci0gICAgICAgICAgICBpZiAoYWx0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gYWx0OwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShNQVRITUwpCi0gICAgaWYgKG5vZGUgJiYgbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNNYXRo
TUxFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmFs
dHRleHRBdHRyKTsKLSNlbmRpZgotICAgIAogICAgIGlmIChpc1dlYkFyZWEoKSkKICAgICAgICAg
cmV0dXJuIHdlYkFyZWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKLSAgICAKLSAgICAvLyBB
biBlbGVtZW50J3MgZGVzY3JpcHRpdmUgdGV4dCBpcyBjb21wcmlzZWQgb2YgdGl0bGUoKSAod2hh
dCdzIHZpc2libGUgb24gdGhlIHNjcmVlbikgYW5kIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigp
IChvdGhlciBkZXNjcmlwdGl2ZSB0ZXh0KS4KLSAgICAvLyBCb3RoIGFyZSB1c2VkIHRvIGdlbmVy
YXRlIHdoYXQgYSBzY3JlZW4gcmVhZGVyIHNwZWFrcy4KLSAgICAvLyBJZiB0aGlzIHBvaW50IGlz
IHJlYWNoZWQgKGkuZS4gdGhlcmUncyBubyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pIGFuZCB0
aGVyZSdzIG5vIHRpdGxlKCksIHdlIHNob3VsZCBmYWxsYmFjayB0byB1c2luZyB0aGUgdGl0bGUg
YXR0cmlidXRlLgotICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgaXMgbm9ybWFsbHkgdXNlZCBh
cyBoZWxwIHRleHQgKGJlY2F1c2UgaXQgaXMgYSB0b29sdGlwKSwgYnV0IGlmIHRoZXJlIGlzIG5v
dGhpbmcgZWxzZSBhdmFpbGFibGUsIHRoaXMgc2hvdWxkIGJlIHVzZWQgKGFjY29yZGluZyB0byBB
UklBKS4KLSAgICBpZiAodGl0bGUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKLSAgICAKLSAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwog
fQogCiBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kaW5nQm94UmVj
dCgpIGNvbnN0CkBAIC0xODEwLDE2ICsxMDc1LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphcmlhSXNIaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0Ci17Ci0g
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBwYXJlbnRPYmplY3QoKTsgb2Jq
ZWN0OyBvYmplY3QgPSBvYmplY3QtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmICghb2Jq
ZWN0LT5jYW5IYXZlQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzQWxsb3dlZENoaWxkT2ZUcmVlKCkgY29uc3QKIHsKICAgICAvLyBEZXRlcm1p
bmUgaWYgdGhpcyBpcyBpbiBhIHRyZWUuIElmIHNvLCB3ZSBhcHBseSBzcGVjaWFsIGJlaGF2aW9y
IHRvIG1ha2UgaXQgd29yayBsaWtlIGFuIEFYT3V0bGluZS4KQEAgLTIwNTksMjcgKzEzMTQsMTAg
QEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxheW91dENvdQogCiBTdHJpbmcgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gSWYgdGhpcyBp
cyBhIHVzZXIgZGVmaW5lZCBzdGF0aWMgdGV4dCwgdXNlIHRoZSBhY2Nlc3NpYmxlIG5hbWUgY29t
cHV0YXRpb24uCi0gICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gU3RhdGljVGV4dFJvbGUp
Ci0gICAgICAgIHJldHVybiBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgCi0g
ICAgaWYgKCFpc1RleHRDb250cm9sKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQogICAg
IGlmIChpc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkRmllbGRWYWx1
ZSgpOwogCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChpc05hdGl2ZVRleHRDb250
cm9sKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKG1fcmVuZGVyZXIpLT50
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCktPnZhbHVlKCk7Ci0KLSAgICBpZiAoIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlubmVyVGV4dCgpOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dCgpOwogfQogICAgIAogaW50IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnRleHRMZW5ndGgoKSBjb25zdApAQCAtMjIzNywxOCArMTQ3NSw2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZWxlbWVudEEKICAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpLCAidHJ1ZSIpOwogfQogICAg
IAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlcXVpcmVkKCkgY29uc3QKLXsK
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfcmVxdWlyZWRBdHRy
KSwgInRydWUiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgTm9kZSogbiA9IG5v
ZGUoKTsKLSAgICBpZiAobiAmJiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihuKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obiktPnJlcXVpcmVkKCk7Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
U2VsZWN0ZWQoKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTIzNDUsMjkgKzE1
NzEsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEZvY3VzCiAgICAgfQog
fQogCi12b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoYW5nZVZhbHVlQnlTdGVwKGJv
b2wgaW5jcmVhc2UpCi17Ci0gICAgZmxvYXQgc3RlcCA9IHN0ZXBWYWx1ZUZvclJhbmdlKCk7Ci0g
ICAgZmxvYXQgdmFsdWUgPSB2YWx1ZUZvclJhbmdlKCk7Ci0gICAgCi0gICAgdmFsdWUgKz0gaW5j
cmVhc2UgPyBzdGVwIDogLXN0ZXA7Ci0KLSAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2YWx1
ZSkpOwotICAgIAotICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3JlbmRl
cmVyLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci19Ci0gICAgCi12b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoYW5nZVZhbHVlQnlQZXJjZW50KGZsb2F0IHBl
cmNlbnRDaGFuZ2UpCi17Ci0gICAgZmxvYXQgcmFuZ2UgPSBtYXhWYWx1ZUZvclJhbmdlKCkgLSBt
aW5WYWx1ZUZvclJhbmdlKCk7Ci0gICAgZmxvYXQgdmFsdWUgPSB2YWx1ZUZvclJhbmdlKCk7Ci0g
ICAgCi0gICAgdmFsdWUgKz0gcmFuZ2UgKiAocGVyY2VudENoYW5nZSAvIDEwMCk7Ci0gICAgc2V0
VmFsdWUoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLSAgICAKLSAgICBheE9iamVjdENhY2hlKCkt
PnBvc3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5n
ZWQsIHRydWUpOwotfQotCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVj
dGVkUm93cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNlbGVjdGVkUm93cykKIHsKICAg
ICAvLyBTZXR0aW5nIHNlbGVjdGVkIG9ubHkgbWFrZXMgc2Vuc2UgaW4gdHJlZXMgYW5kIHRhYmxl
cyAoYW5kIHRyZWUtdGFibGVzKS4KQEAgLTI0MjcsMjAgKzE2MzAsNiBAQCBib29sIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnN1cHBvcnRzCiAgICAgcmV0dXJuICFhcmlhT3ducy5pc0VtcHR5
KCk7CiB9CiAgICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRW5hYmxlZCgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwotICAgIAotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShnZXRBdHRyaWJ1dGUoYXJpYV9kaXNhYmxlZEF0dHIpLCAidHJ1ZSIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5p
c0VuYWJsZWRGb3JtQ29udHJvbCgpOwotfQotCiBSZW5kZXJWaWV3KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojp0b3BSZW5kZXJlcigpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQqIHRvcERvYyA9
IHRvcERvY3VtZW50KCk7CkBAIC0zMTM4LDM1ICsyMzI3LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppc0Rlc2NlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkgY29uc3QK
LXsKLSAgICBpZiAoIWNhblNldEZvY3VzQXR0cmlidXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIElmIGl0J3MgYSBjb250cm9sLCBpdCdzIG5vdCBnZW5lcmljLgotICAgIGlm
IChpc0NvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgaXQgaGFz
IGFuIGFyaWEgcm9sZSwgaXQncyBub3QgZ2VuZXJpYy4KLSAgICBpZiAobV9hcmlhUm9sZSAhPSBV
bmtub3duUm9sZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGNvbnRl
bnQgZWRpdGFibGUgYXR0cmlidXRlIGlzIHNldCBvbiB0aGlzIGVsZW1lbnQsIHRoYXQncyB0aGUg
cmVhc29uCi0gICAgLy8gaXQncyBmb2N1c2FibGUsIGFuZCBleGlzdGluZyBsb2dpYyBzaG91bGQg
aGFuZGxlIHRoaXMgY2FzZSBhbHJlYWR5IC0gc28gaXQncyBub3QgYQotICAgIC8vIGdlbmVyaWMg
Zm9jdXNhYmxlIGVsZW1lbnQuCi0gICAgaWYgKGhhc0NvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZVNl
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgd2ViIGFyZWEgYW5kIGJv
ZHkgZWxlbWVudCBhcmUgYm90aCBmb2N1c2FibGUsIGJ1dCBleGlzdGluZyBsb2dpYyBoYW5kbGVz
IHRoZXNlCi0gICAgLy8gY2FzZXMgYWxyZWFkeSwgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRl
IHRoZW0gaGVyZS4KLSAgICBpZiAocm9sZVZhbHVlKCkgPT0gV2ViQXJlYVJvbGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShib2R5
VGFnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAg
CiBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVB
Y2Nlc3NpYmlsaXR5Um9sZSgpCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtMzQzNSwyOCAr
MjU5NSw2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29udGVudEMKICAgICAg
ICAgICAgIGNhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlclBhcmVudCwgQVhPYmplY3RDYWNo
ZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogICAgIH0KIH0KLSAgICAKLWJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBFbGVtZW50cyB0
aGF0IHNob3VsZCBub3QgaGF2ZSBjaGlsZHJlbgotICAgIHN3aXRjaCAocm9sZVZhbHVlKCkpIHsK
LSAgICBjYXNlIEltYWdlUm9sZToKLSAgICBjYXNlIEJ1dHRvblJvbGU6Ci0gICAgY2FzZSBQb3BV
cEJ1dHRvblJvbGU6Ci0gICAgY2FzZSBDaGVja0JveFJvbGU6Ci0gICAgY2FzZSBSYWRpb0J1dHRv
blJvbGU6Ci0gICAgY2FzZSBUYWJSb2xlOgotICAgIGNhc2UgU3RhdGljVGV4dFJvbGU6Ci0gICAg
Y2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKLSAgICBjYXNlIFNjcm9sbEJhclJvbGU6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci19CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2xlYXJDaGlsZHJlbigpCiB7
CkBAIC0zNTk0LDcgKzI3MzIsMTUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRDaGlsZAogICAgIHVwZGF0ZUF0dGFjaG1lbnRWaWV3UGFyZW50cygpOwogI2VuZGlmCiB9Ci0g
ICAgICAgIAorCitib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGlsZHJl
bigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigp
OworfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFMaXZlUmVnaW9uU3RhdHVzKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgbGl2ZVJlZ2lvblN0YXR1c0Fzc2VydGl2ZSwgKCJhc3NlcnRpdmUi
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDQ0ICs2NiwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5p
dCgpOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0FuY2hvcigpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNIZWFkaW5n
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTGluaygpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNOYXRpdmVJbWFnZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNOYXRp
dmVUZXh0Q29udHJvbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2ViQXJlYSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1
dEltYWdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvZ3Jlc3NJbmRpY2F0b3IoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTbGlkZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNNZW51UmVsYXRlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc01lbnUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW51QmFyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzTWVudUJ1dHRvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc01lbnVJdGVtKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0ZpZWxkc2V0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzR3JvdXAoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNTZWxlY3RlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
SG92ZXJlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNPZmZTY3JlZW4o
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzc2VkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzUmVhZE9ubHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNVbnZpc2l0ZWQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWaXNpdGVkKCkgY29uc3Q7ICAgICAgICAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXF1aXJlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0xp
bmtlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNCb2xkRm9udCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBoYXNJdGFsaWNGb250KCkgY29uc3Q7CkBAIC0xMjMsMTUgKzk1LDYgQEAg
cHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gYWNjZXNzaWJpbGl0eUlz
SWdub3JlZEJhc2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgaW50IGhlYWRpbmdMZXZlbCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrYm94T3JSYWRpb1Zh
bHVlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0
OwotICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
ZmxvYXQgbWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgbWluVmFs
dWVGb3JSYW5nZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgc3RlcFZhbHVlRm9yUmFuZ2Uo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNlbGVjdGVkUmFkaW9C
dXR0b24oKTsKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHNlbGVjdGVkVGFiSXRl
bSgpOwogICAgIHZpcnR1YWwgaW50IGxheW91dENvdW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBk
b3VibGUgZXN0aW1hdGVkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Q7CiAgICAgCkBAIC0xNTYsMTIg
KzExOSw4IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uIHRoZSByb290IGFj
Y2Vzc2liaWxpdHkgb2JqZWN0IHRvIGtpY2sgb2ZmIGEgaGl0IHRlc3QuCiAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBFbGVtZW50KiBhY3Rpb25FbGVtZW50KCkgY29uc3Q7Ci0g
ICAgRWxlbWVudCogbW91c2VCdXR0b25MaXN0ZW5lcigpIGNvbnN0OwogICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3SWZSZW5kZXJWaWV3KCkgY29uc3Q7CiAgICAgdmlydHVhbCBFbGVtZW50KiBhbmNo
b3JFbGVtZW50KCkgY29uc3Q7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWVudUZvck1lbnVC
dXR0b24oKSBjb25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51QnV0dG9uRm9yTWVu
dSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBib3VuZGluZ0JveFJlY3Qo
KSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKQEAg
LTE4NCw4ICsxNDMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGFpblRleHRSYW5nZSBzZWxl
Y3RlZFRleHRSYW5nZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFEZXNj
cmliZWRCeUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGFjY2Vzc2liaWxp
dHlEZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGhlbHBUZXh0KCkgY29u
c3Q7CkBAIC0xOTksNyArMTU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2lkZ2V0KiB3aWRn
ZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBnZXREb2N1bWVu
dExpbmtzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwogICAgIHZpcnR1YWwgRnJhbWVW
aWV3KiBkb2N1bWVudEZyYW1lVmlldygpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaGll
cmFyY2hpY2FsTGV2ZWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhckNoaWxkcmVu
KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKQEAgLTIw
OCwxMCArMTY0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFRleHRS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShj
b25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRSb3dzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VWYWx1ZUJ5UGVy
Y2VudChmbG9hdCBwZXJjZW50Q2hhbmdlKTsKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwpAQCAtMjYzLDcg
KzIxNiw2IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAgICAg
CiAgICAgdm9pZCBzZXRSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3Jl
bmRlcmVyID0gcmVuZGVyZXI7IH0KLSAgICB2b2lkIGFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0
b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29uc3Q7CiAgICAgYm9vbCBuZWVkc1RvVXBkYXRlQ2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuRGlydHk7IH0KICAgICBTY3JvbGxhYmxl
QXJlYSogZ2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdDsKICAgICB2b2lkIHNj
cm9sbFRvKGNvbnN0IEludFBvaW50JikgY29uc3Q7CkBAIC0yNzYsNyArMjI4LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFyaWFMaXN0Ym94U2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKTsKICAgICB2b2lkIGFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwogICAgIGJvb2wgYXJpYUlzSGlkZGVuKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0OwogICAgIGJvb2wg
aXNBbGxvd2VkQ2hpbGRPZlRyZWUoKSBjb25zdDsKICAgICBib29sIGhhc1RleHRBbHRlcm5hdGl2
ZSgpIGNvbnN0OwogICAgIFN0cmluZyBwb3NpdGlvbmFsRGVzY3JpcHRpb25Gb3JNU0FBKCkgY29u
c3Q7CkBAIC0yODUsMTMgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBub2RlSXNUZXh0Q29u
dHJvbChjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVG9VcGRh
dGVDaGlsZHJlbigpIHsgbV9jaGlsZHJlbkRpcnR5ID0gdHJ1ZTsgfQogCi0gICAgRWxlbWVudCog
bWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7Ci0gICAgRWxlbWVudCogbWVudUl0ZW1F
bGVtZW50Rm9yTWVudSgpIGNvbnN0OwotCiAgICAgYm9vbCBpc1RhYkl0ZW1TZWxlY3RlZCgpIGNv
bnN0OwotICAgIHZvaWQgYWx0ZXJTbGlkZXJWYWx1ZShib29sIGluY3JlYXNlKTsKLSAgICB2b2lk
IGNoYW5nZVZhbHVlQnlTdGVwKGJvb2wgaW5jcmVhc2UpOwotICAgIGJvb2wgaXNOYXRpdmVDaGVj
a2JveE9yUmFkaW8oKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGNoZWNrYm94T3JSYWRpb1JlY3Qo
KSBjb25zdDsKICAgICB2b2lkIGFkZFJhZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYgbGlua2VkVUlFbGVtZW50cykgY29uc3Q7CiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogaW50ZXJuYWxMaW5rRWxlbWVudCgpIGNvbnN0OwpAQCAtMzAxLDggKzI0Niw2
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJQYXJlbnRPYmplY3QoKSBjb25z
dDsKICAgICBib29sIGlzRGVzY2VuZGFudE9mRWxlbWVudFR5cGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkgY29uc3Q7CiAgICAgLy8gVGhpcyByZXR1cm5zIHRydWUgaWYgaXQncyBmb2N1
c2FibGUgYnV0IGl0J3Mgbm90IGNvbnRlbnQgZWRpdGFibGUgYW5kIGl0J3Mgbm90IGEgY29udHJv
bCBvciBBUklBIGNvbnRyb2wuCi0gICAgYm9vbCBpc0dlbmVyaWNGb2N1c2FibGVFbGVtZW50KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0FSSUFSYW5nZSgpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRUZXh0
RmllbGRDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkSW1hZ2VNYXBDaGlsZHJlbigpOwpAQCAtMzE3
LDkgKzI2MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBlbGVtZW50QXR0cmlidXRlVmFsdWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0RWxlbWVudEF0dHJpYnV0ZVZh
bHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBib29sKTsKICAgICAKLSAgICBTdHJpbmcgYWNjZXNz
aWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiAmZWxlbWVudHMp
IGNvbnN0OwotICAgIHZvaWQgZWxlbWVudHNGcm9tQXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0gICAgU3RyaW5nIGFyaWFB
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBTdHJpbmcgd2ViQXJlYUFjY2Vz
c2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBFU3BlYWsgc3BlYWtQ
cm9wZXJ0eSgpIGNvbnN0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MTIwKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDktMTAg
IERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IFJl
ZmFjdG9yIG1vc3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCBjb2RlIGludG8gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk2MzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTmV3IHRlc3QgdGhhdCBjb21wYXJlcyBhY2Nlc3NpYmlsaXR5IGF0dHJpYnV0ZXMgb2Yg
bG90cyBvZiBlbGVtZW50cworICAgICAgICBpbnNpZGUgYW5kIG91dHNpZGUgb2YgY2FudmFzIGZh
bGxiYWNrIGNvbnRlbnQsIHRvIG1ha2Ugc3VyZSB0aGV5J3JlCisgICAgICAgIHRoZSBzYW1lLiBE
ZXNpZ25lZCB0byBiZSBjcm9zcy1wbGF0Zm9ybSBiZWNhdXNlIGl0IGp1c3QgYXNzZXJ0cyB0aGUK
KyAgICAgICAgYXR0cmlidXRlcyBhcmUgdGhlIHNhbWUgaW4gYm90aCBjb250ZXh0cywgcmF0aGVy
IHRoYW4gZXhwZWN0aW5nIHNwZWNpZmljCisgICAgICAgIHZhbHVlcy4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi5odG1s
OiBBZGRlZC4KKwogMjAxMi0wOS0xMCAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIHN0cmF5IENoYW5nZWxvZyBtZXNzYWdlLgpJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250
ZW50LTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNzYgQEAKK0xpbmsgIEJ1dHRvbiAgQnV0dG9uICBCdXR0b24gICAgICAgICAg
ICAgICAgIAorRm9jdXNhYmxlCitIZWFkaW5nCisKK0FSSUEgYnV0dG9uCitBUklBIGRpc2FibGVk
IGJ1dHRvbgorQVJJQSBlbmFibGVkIGJ1dHRvbgorQVJJQSByZXF1aXJlZCBidXR0b24KK0FSSUEg
dG9nZ2xlIGJ1dHRvbgorQVJJQSBsaW5rCitUaGlzIHRlc3RzIGEgbnVtYmVyIG9mIGRpZmZlcmVu
dCBlbGVtZW50cyBpbiBjYW52YXMgZmFsbGJhY2sgY29udGVudCB0byBtYWtlIHN1cmUgdGhlaXIg
YWNjZXNzaWJsZSBhdHRyaWJ1dGVzIGFyZSBlc3NlbnRpYWxseSBpZGVudGljYWwgdG8gdGhlIGNv
cnJlc3BvbmRpbmcgZWxlbWVudHMgb3V0c2lkZSBvZiBjYW52YXMgZmFsbGJhY2sgY29udGVudC4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2xpbmsxCitQQVNTIGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorbGluazIKK1BBU1MgZG9jdW1lbnQuYWN0
aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBh
eEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVt
ZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQx
LnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlw
dGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BB
U1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNT
IGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxl
bWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50
Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRW
YWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMg
YXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVu
dDEubWF4VmFsdWUKKworYnV0dG9uMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVs
ZW1lbnQxIGlzIHRydWUKK2J1dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBl
bGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUK
K1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3Jp
cHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4
RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVs
ZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5z
dHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNF
bmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJl
ZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMg
YXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1l
bnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5W
YWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKwor
bGFiZWxlZC1idXR0b24xCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEg
aXMgdHJ1ZQorbGFiZWxlZC1idXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0g
ZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xl
CitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2Ny
aXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBh
eEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhF
bGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIu
c3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlz
RW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWly
ZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlz
IGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVt
ZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWlu
VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisK
K2J1dHRvbi13aXRoLXRpdGxlMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1l
bnQxIGlzIHRydWUKK2J1dHRvbi13aXRoLXRpdGxlMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVu
dDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJv
bGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUK
K1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQ
QVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVs
ZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVt
ZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5p
c1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hl
Y2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlz
IGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1l
bnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhW
YWx1ZQorCit0ZXh0MQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlz
IHRydWUKK3RleHQyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMg
dHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxl
bWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNT
IGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRl
c2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxw
VGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUg
aXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBh
eEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVt
ZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEu
aXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1
ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1Mg
YXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2NoZWNrYm94MQor
UEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2NoZWNrYm94
MgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1Mg
YXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVE
ZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQy
LnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBp
cyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhF
bGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVu
dDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5p
c0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1
aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAor
UEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhF
bGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIu
bWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitudW1iZXIxCitQQVNTIGRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorbnVtYmVyMgorUEFTUyBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xl
IGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBh
eEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxl
bWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRl
c2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4
dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVs
ZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQy
LmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1
ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhF
bGVtZW50MS5tYXhWYWx1ZQorCityYWRpbzEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBlbGVtZW50MSBpcyB0cnVlCityYWRpbzIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJv
bGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVz
Y3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNT
IGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBh
eEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50
Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIu
aXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1
aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQg
aXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVs
ZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5t
aW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUK
Kworc2xpZGVyMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRy
dWUKK3NsaWRlcjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0
cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVt
ZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1Mg
YXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVz
Y3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBU
ZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBp
cyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4
RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1l
bnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5p
c0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVl
CitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBh
eEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworc3VibWl0MQorUEFT
UyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK3N1Ym1pdDIKK1BB
U1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxl
bWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3Jp
cHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRs
ZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhF
bGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVu
dDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0
cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFi
bGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQK
K1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVu
dDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZh
bHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworY29tYm9ib3gxCitQQVNTIGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorY29tYm9ib3gyCitQQVNTIGRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUg
aXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4
RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVt
ZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVz
Y3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0
CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQor
UEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBh
eEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxl
bWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIu
aW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVl
IGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVs
ZW1lbnQxLm1heFZhbHVlCisKK2xpc3Rib3gxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
PT0gZWxlbWVudDEgaXMgdHJ1ZQorbGlzdGJveDIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQx
LnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xl
RGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQ
QVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFT
UyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVt
ZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVu
dDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNS
ZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNr
ZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBh
eEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50
MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFs
dWUKKwordGV4dGFyZWExCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEg
aXMgdHJ1ZQordGV4dGFyZWEyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVu
dDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNT
IGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9u
CitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1l
bnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50
Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5n
VmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxl
ZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMg
YXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxl
bWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5p
bnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2ZvY3Vz
YWJsZTEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitm
b2N1c2FibGUyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1
ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVu
dDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4
RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2Ny
aXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4
dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMg
YXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVs
ZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50
MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXND
aGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQor
UEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhF
bGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2hlYWRpbmcxCitQQVNT
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQoraGVhZGluZzIKK1BB
U1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxl
bWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3Jp
cHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRs
ZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhF
bGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVu
dDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0
cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFi
bGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQK
K1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVu
dDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZh
bHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworYXJpYS1idXR0b24xCitQQVNTIGRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorYXJpYS1idXR0b24yCitQQVNTIGRv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQy
LnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9u
IGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMg
YXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVu
dDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhl
bHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdW
YWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAor
UEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNT
IGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxl
bWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1p
blZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBp
cyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2FyaWEtZGlzYWJsZWRidXR0b24xCitQQVNTIGRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorYXJpYS1kaXNhYmxlZGJ1dHRv
bjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNT
IGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xl
RGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50
Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24g
aXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4
RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1l
bnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEu
aXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVx
dWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQK
K1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4
RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQy
Lm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworYXJpYS1lbmFibGVkYnV0dG9uMQor
UEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2FyaWEtZW5h
YmxlZGJ1dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0
cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVt
ZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1Mg
YXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVz
Y3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBU
ZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBp
cyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4
RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1l
bnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5p
c0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVl
CitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBh
eEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworYXJpYS1yZXF1aXJl
ZGJ1dHRvbjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVl
CithcmlhLXJlcXVpcmVkYnV0dG9uMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVs
ZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQor
UEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlw
dGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhF
bGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxl
bWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0
cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0Vu
YWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVk
IGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBh
eEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVu
dDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZh
bHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCith
cmlhLXRvZ2dsZWJ1dHRvbjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50
MSBpcyB0cnVlCithcmlhLXRvZ2dsZWJ1dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQx
LnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xl
RGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQ
QVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFT
UyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVt
ZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVu
dDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNS
ZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNr
ZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBh
eEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50
MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFs
dWUKKworYXJpYS1saW5rMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQx
IGlzIHRydWUKK2FyaWEtbGluazIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVt
ZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BB
U1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRp
b24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxl
bWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1l
bnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJp
bmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFi
bGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBp
cyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhF
bGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQx
LmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1
ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNv
bnRlbnQtMi1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29u
dGVudC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52
YXMtZmFsbGJhY2stY29udGVudC0yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisK
KzxkaXY+CisgIDxhIGlkPSJsaW5rMSIgaHJlZj0iIyI+TGluazwvYT4KKyAgPGJ1dHRvbiBpZD0i
YnV0dG9uMSI+QnV0dG9uPC9idXR0b24+CisgIDxidXR0b24gaWQ9ImxhYmVsZWQtYnV0dG9uMSIg
YXJpYS1sYWJlbD0iTGFiZWwiPkJ1dHRvbjwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJidXR0b24t
d2l0aC10aXRsZTEiIHRpdGxlPSJUaXRsZSI+QnV0dG9uPC9idXR0b24+CisgIDxpbnB1dCBpZD0i
dGV4dDEiIHR5cGU9InRleHQiIHZhbHVlPSJWYWx1ZSI+CisgIDxpbnB1dCBpZD0iY2hlY2tib3gx
IiB0eXBlPSJjaGVja2JveCIgY2hlY2tlZD4KKyAgPGlucHV0IGlkPSJudW1iZXIxIiB0eXBlPSJu
dW1iZXIiIHZhbHVlPSIxMjMiPgorICA8aW5wdXQgaWQ9InJhZGlvMSIgdHlwZT0icmFkaW8iIGNo
ZWNrZWQ+CisgIDxpbnB1dCBpZD0ic2xpZGVyMSIgdHlwZT0icmFuZ2UiIG1pbj0iMSIgbWF4PSIx
MCIgdmFsdWU9IjUiPgorICA8aW5wdXQgaWQ9InN1Ym1pdDEiIHR5cGU9InN1Ym1pdCI+CisgIDxz
ZWxlY3QgaWQ9ImNvbWJvYm94MSI+PG9wdGlvbj4xPG9wdGlvbiBzZWxlY3RlZD4yPC9zZWxlY3Q+
CisgIDxzZWxlY3QgbXVsdGlwbGUgaWQ9Imxpc3Rib3gxIj48b3B0aW9uPjE8b3B0aW9uIHNlbGVj
dGVkPjI8L3NlbGVjdD4KKyAgPHRleHRhcmVhIGlkPSJ0ZXh0YXJlYTEiPlRleHRhcmVhPC90ZXh0
YXJlYT4KKyAgPGRpdiBpZD0iZm9jdXNhYmxlMSIgdGFiaW5kZXg9IjAiPkZvY3VzYWJsZTwvZGl2
PgorICA8aDUgaWQ9ImhlYWRpbmcxIiB0YWJpbmRleD0iMCI+SGVhZGluZzwvaDU+CisgIDxkaXYg
aWQ9ImFyaWEtYnV0dG9uMSIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiI+QVJJQSBidXR0b248
L2Rpdj4KKyAgPGRpdiBpZD0iYXJpYS1kaXNhYmxlZGJ1dHRvbjEiIHRhYmluZGV4PSIwIiByb2xl
PSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9InRydWUiPkFSSUEgZGlzYWJsZWQgYnV0dG9uPC9kaXY+
CisgIDxkaXYgaWQ9ImFyaWEtZW5hYmxlZGJ1dHRvbjEiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0
b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj5BUklBIGVuYWJsZWQgYnV0dG9uPC9kaXY+CisgIDxk
aXYgaWQ9ImFyaWEtcmVxdWlyZWRidXR0b24xIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBh
cmlhLXJlcXVpcmVkPSJ0cnVlIj5BUklBIHJlcXVpcmVkIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlk
PSJhcmlhLXRvZ2dsZWJ1dHRvbjEiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFyaWEtcHJl
c3NlZD0iZmFsc2UiPkFSSUEgdG9nZ2xlIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlkPSJhcmlhLWxp
bmsxIiB0YWJpbmRleD0iMCIgcm9sZT0ibGluayI+QVJJQSBsaW5rPC9kaXY+Cis8L2Rpdj4KKwor
PGNhbnZhcyBpZD0ibXlDYW52YXMiIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIj4KKyAgPGEgaWQ9
ImxpbmsyIiBocmVmPSIjIj5MaW5rPC9hPgorICA8YnV0dG9uIGlkPSJidXR0b24yIj5CdXR0b248
L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0ibGFiZWxlZC1idXR0b24yIiBhcmlhLWxhYmVsPSJMYWJl
bCI+QnV0dG9uPC9idXR0b24+CisgIDxidXR0b24gaWQ9ImJ1dHRvbi13aXRoLXRpdGxlMiIgdGl0
bGU9IlRpdGxlIj5CdXR0b248L2J1dHRvbj4KKyAgPGlucHV0IGlkPSJ0ZXh0MiIgdHlwZT0idGV4
dCIgdmFsdWU9IlZhbHVlIj4KKyAgPGlucHV0IGlkPSJjaGVja2JveDIiIHR5cGU9ImNoZWNrYm94
IiBjaGVja2VkPgorICA8aW5wdXQgaWQ9Im51bWJlcjIiIHR5cGU9Im51bWJlciIgdmFsdWU9IjEy
MyI+CisgIDxpbnB1dCBpZD0icmFkaW8yIiB0eXBlPSJyYWRpbyIgY2hlY2tlZD4KKyAgPGlucHV0
IGlkPSJzbGlkZXIyIiB0eXBlPSJyYW5nZSIgbWluPSIxIiBtYXg9IjEwIiB2YWx1ZT0iNSI+Cisg
IDxpbnB1dCBpZD0ic3VibWl0MiIgdHlwZT0ic3VibWl0Ij4KKyAgPHNlbGVjdCBpZD0iY29tYm9i
b3gyIj48b3B0aW9uPjE8b3B0aW9uIHNlbGVjdGVkPjI8L3NlbGVjdD4KKyAgPHNlbGVjdCBtdWx0
aXBsZSBpZD0ibGlzdGJveDIiPjxvcHRpb24+MTxvcHRpb24gc2VsZWN0ZWQ+Mjwvc2VsZWN0Pgor
ICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhMiI+VGV4dGFyZWE8L3RleHRhcmVhPgorICA8ZGl2IGlk
PSJmb2N1c2FibGUyIiB0YWJpbmRleD0iMCI+Rm9jdXNhYmxlPC9kaXY+CisgIDxoNSBpZD0iaGVh
ZGluZzIiIHRhYmluZGV4PSIwIj5IZWFkaW5nPC9oNT4KKyAgPGRpdiBpZD0iYXJpYS1idXR0b24y
IiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIj5BUklBIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlk
PSJhcmlhLWRpc2FibGVkYnV0dG9uMiIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1k
aXNhYmxlZD0idHJ1ZSI+QVJJQSBkaXNhYmxlZCBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJp
YS1lbmFibGVkYnV0dG9uMiIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1kaXNhYmxl
ZD0iZmFsc2UiPkFSSUEgZW5hYmxlZCBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJpYS1yZXF1
aXJlZGJ1dHRvbjIiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFyaWEtcmVxdWlyZWQ9InRy
dWUiPkFSSUEgcmVxdWlyZWQgYnV0dG9uPC9kaXY+CisgIDxkaXYgaWQ9ImFyaWEtdG9nZ2xlYnV0
dG9uMiIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1wcmVzc2VkPSJmYWxzZSI+QVJJ
QSB0b2dnbGUgYnV0dG9uPC9kaXY+CisgIDxkaXYgaWQ9ImFyaWEtbGluazIiIHRhYmluZGV4PSIw
IiByb2xlPSJsaW5rIj5BUklBIGxpbms8L2Rpdj4KKzwvY2FudmFzPgorCis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBhIG51bWJlciBv
ZiBkaWZmZXJlbnQgZWxlbWVudHMgaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQgdG8gbWFrZSBz
dXJlIHRoZWlyIGFjY2Vzc2libGUgYXR0cmlidXRlcyBhcmUgZXNzZW50aWFsbHkgaWRlbnRpY2Fs
IHRvIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG91dHNpZGUgb2YgY2FudmFzIGZhbGxiYWNr
IGNvbnRlbnQuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
KyAgICBmdW5jdGlvbiBjaGVjayhpZDEsIGlkMikgeworICAgICAgICBkZWJ1ZyhpZDEpOworICAg
ICAgICB3aW5kb3cuZWxlbWVudDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDEpOworICAg
ICAgICBlbGVtZW50MS5mb2N1cygpOworICAgICAgICBzaG91bGRCZSgiZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCA9PSBlbGVtZW50MSIsICJ0cnVlIik7CisgICAgICAgIHdpbmRvdy5heEVsZW1lbnQx
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICAgICAgZGVi
dWcoaWQyKTsKKyAgICAgICAgd2luZG93LmVsZW1lbnQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQyKTsKKyAgICAgICAgZWxlbWVudDIuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmUoImRv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIiLCAidHJ1ZSIpOworICAgICAgICB3aW5k
b3cuYXhFbGVtZW50MiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLnJvbGUiLCAiYXhFbGVtZW50MS5yb2xlIik7
CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiIsICJheEVsZW1l
bnQxLnJvbGVEZXNjcmlwdGlvbiIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi50aXRs
ZSIsICJheEVsZW1lbnQxLnRpdGxlIik7CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLmRl
c2NyaXB0aW9uIiwgImF4RWxlbWVudDEuZGVzY3JpcHRpb24iKTsKKyAgICAgICAgc2hvdWxkQmUo
ImF4RWxlbWVudDIuaGVscFRleHQiLCAiYXhFbGVtZW50MS5oZWxwVGV4dCIpOworICAgICAgICBz
aG91bGRCZSgiYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSIsICJheEVsZW1lbnQxLnN0cmluZ1ZhbHVl
Iik7CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLmlzRW5hYmxlZCIsICJheEVsZW1lbnQx
LmlzRW5hYmxlZCIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5pc1JlcXVpcmVkIiwg
ImF4RWxlbWVudDEuaXNSZXF1aXJlZCIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5p
c0NoZWNrZWQiLCAiYXhFbGVtZW50MS5pc0NoZWNrZWQiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4
RWxlbWVudDIuaW50VmFsdWUiLCAiYXhFbGVtZW50MS5pbnRWYWx1ZSIpOworICAgICAgICBzaG91
bGRCZSgiYXhFbGVtZW50Mi5taW5WYWx1ZSIsICJheEVsZW1lbnQxLm1pblZhbHVlIik7CisgICAg
ICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLm1heFZhbHVlIiwgImF4RWxlbWVudDEubWF4VmFsdWUi
KTsKKyAgICAgICAgZGVidWcoIiIpOworICAgIH0KKworICAgIGNoZWNrKCJsaW5rMSIsICJsaW5r
MiIpOworICAgIGNoZWNrKCJidXR0b24xIiwgImJ1dHRvbjIiKTsKKyAgICBjaGVjaygibGFiZWxl
ZC1idXR0b24xIiwgImxhYmVsZWQtYnV0dG9uMiIpOworICAgIGNoZWNrKCJidXR0b24td2l0aC10
aXRsZTEiLCAiYnV0dG9uLXdpdGgtdGl0bGUyIik7CisgICAgY2hlY2soInRleHQxIiwgInRleHQy
Iik7CisgICAgY2hlY2soImNoZWNrYm94MSIsICJjaGVja2JveDIiKTsKKyAgICBjaGVjaygibnVt
YmVyMSIsICJudW1iZXIyIik7CisgICAgY2hlY2soInJhZGlvMSIsICJyYWRpbzIiKTsKKyAgICBj
aGVjaygic2xpZGVyMSIsICJzbGlkZXIyIik7CisgICAgY2hlY2soInN1Ym1pdDEiLCAic3VibWl0
MiIpOworICAgIGNoZWNrKCJjb21ib2JveDEiLCAiY29tYm9ib3gyIik7CisgICAgY2hlY2soImxp
c3Rib3gxIiwgImxpc3Rib3gyIik7CisgICAgY2hlY2soInRleHRhcmVhMSIsICJ0ZXh0YXJlYTIi
KTsKKyAgICBjaGVjaygiZm9jdXNhYmxlMSIsICJmb2N1c2FibGUyIik7CisgICAgY2hlY2soImhl
YWRpbmcxIiwgImhlYWRpbmcyIik7CisgICAgY2hlY2soImFyaWEtYnV0dG9uMSIsICJhcmlhLWJ1
dHRvbjIiKTsKKyAgICBjaGVjaygiYXJpYS1kaXNhYmxlZGJ1dHRvbjEiLCAiYXJpYS1kaXNhYmxl
ZGJ1dHRvbjIiKTsKKyAgICBjaGVjaygiYXJpYS1lbmFibGVkYnV0dG9uMSIsICJhcmlhLWVuYWJs
ZWRidXR0b24yIik7CisgICAgY2hlY2soImFyaWEtcmVxdWlyZWRidXR0b24xIiwgImFyaWEtcmVx
dWlyZWRidXR0b24yIik7CisgICAgY2hlY2soImFyaWEtdG9nZ2xlYnV0dG9uMSIsICJhcmlhLXRv
Z2dsZWJ1dHRvbjIiKTsKKyAgICBjaGVjaygiYXJpYS1saW5rMSIsICJhcmlhLWxpbmsyIik7Cit9
CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163541</attachid>
            <date>2012-09-12 01:24:00 -0700</date>
            <delta_ts>2012-09-12 07:59:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96323-20120912012413.patch</filename>
            <type>text/plain</type>
            <size>104167</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODEyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxMi0wOS0xMCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogUmVmYWN0b3Ig
bW9zdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IGNvZGUgaW50byBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTYzMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGlzIGxhcmdlLCBidXQgaXQncyBhdCBsZWFzdCA3NSUgY3V0LWFuZC1wYXN0ZS4K
KworICAgICAgICBBbGwgaXQgZG9lcyBpcyBtb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGxh
cmdlIGNodW5rIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgbWV0aG9kcyB0
byBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdAorICAgICAgICBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0
aGVtIHRvIG9wZXJhdGUgb24gZWxlbWVudHMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMsIHN1
Y2ggYXMgdGhvc2UgaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQuIEl0IGFsc28KKyAgICAgICAg
bW92ZXMgdXMgdG93YXJkcyB0aGUgZ29hbCB3aGVyZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
CisgICAgICAgIG9ubHkgaGFzIGNvZGUgdGhhdCdzIHNwZWNpZmljIHRvIHJlbmRlcmVycyBhbmQg
bm90IGp1c3Qgbm9kZXMuCisKKyAgICAgICAgSGFsZiBvZiB0aGUgbWV0aG9kcyBjdXQgYW5kIHBh
c3RlIHdpdGggZXNzZW50aWFsbHkgbm8gY2hhbmdlcy4KKyAgICAgICAgU29tZSByZXF1aXJlZCBq
dXN0IHRpbnkgY2hhbmdlcyB0byBhY2Nlc3MgYW4gYXR0cmlidXRlIHZpYSB0aGUKKyAgICAgICAg
ZWxlbWVudCAoZS5nLiBIVE1MU2VsZWN0RWxlbWVudCkgcmF0aGVyIHRoYW4gaXRzIGFzc29jaWF0
ZWQKKyAgICAgICAgcmVuZGVyZXIgKGUuZy4gUmVuZGVyTWVudUxpc3QpLiBBIGZldyB3ZXJlIGEg
bGl0dGxlIHRyaWNraWVyLAorICAgICAgICBhcyB0aGUgYmVoYXZpb3IgbmVlZHMgdG8gYmUgc2xp
Z2h0bHkgZGlmZmVyZW50IHdoZW4gdGhlcmUncyBhCisgICAgICAgIHJlbmRlcmVyLiBJbiB0aG9z
ZSBsYXN0IGNhc2VzLCBhcyBtdWNoIG9mIHRoZSBjb2RlIGFzIHBvc3NpYmxlIGlzCisgICAgICAg
IGluIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGFuZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
IG92ZXJyaWRlcworICAgICAgICBpdCBhcyBuZWNlc3NhcnkuCisKKyAgICAgICAgVGVzdDogYWNj
ZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLmh0bWwKKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNXZWJBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0FuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQYXNzd29yZEZpZWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJvZ3Jlc3NJbmRp
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzU2xp
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVS
ZWxhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01l
bnUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudUJh
cik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUNoZWNrYm94T3JSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzUHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQVJJQVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdGVwVmFsdWVGb3JSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIZWFkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0xpbmspOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ29udHJvbCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNHcm91cCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2Jv
eE9yUmFkaW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVyU2xpZGVyVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluY3JlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5U3RlcCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hhbmdlVmFsdWVC
eVBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
R2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpzaWJsaW5nV2l0aEFyaWFSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjptZW51RWxlbWVudEZvck1lbnVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVGb3JNZW51QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51SXRlbUVsZW1lbnRG
b3JNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51
QnV0dG9uRm9yTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aGllcmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3Np
YmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50c0Zyb21BdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFyaWFMYWJlbGVkQnlFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUxh
YmVsZWRCeUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpub2RlKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4pOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJPYmplY3QpOgorCiAyMDEyLTA5LTEwICBKdXN0aW4gTm92
b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHY1
IGxpbmUgZGFzaCBmZWF0dXJlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTkw
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwxMiArMjU5LDI0IEBAIEFjY2Vzc2liaWxpdHlS
b2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWMKICAgICAgICAgICAgIHJldHVybiBSYWRpb0J1dHRv
blJvbGU7CiAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gYnV0dG9uUm9sZVR5cGUoKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc1JhbmdlQ29udHJv
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFNsaWRlclJvbGU7CiAgICAgICAgIHJldHVybiBUZXh0
RmllbGRSb2xlOwogICAgIH0KICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykp
IHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxl
Y3RFbGVtZW50KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBs
ZSgpID8gTGlzdFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CisgICAgICAgIHJldHVybiBzZWxlY3RF
bGVtZW50LT5tdWx0aXBsZSgpID8gTGlzdEJveFJvbGUgOiBQb3BVcEJ1dHRvblJvbGU7CiAgICAg
fQorICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICByZXR1
cm4gVGV4dEFyZWFSb2xlOworICAgIGlmIChoZWFkaW5nTGV2ZWwoKSkKKyAgICAgICAgcmV0dXJu
IEhlYWRpbmdSb2xlOworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoZGl2VGFnKSkKKyAgICAg
ICAgcmV0dXJuIERpdlJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShwVGFnKSkKKyAg
ICAgICAgcmV0dXJuIFBhcmFncmFwaFJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShs
YWJlbFRhZykpCisgICAgICAgIHJldHVybiBMYWJlbFJvbGU7CiAgICAgaWYgKG5vZGUoKS0+aXNG
b2N1c2FibGUoKSkKICAgICAgICAgcmV0dXJuIEdyb3VwUm9sZTsKICAgICAKQEAgLTMwMSw4ICsz
MTMsMzggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZQogICAgIH0K
IH0KIAorYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29u
c3QKK3sKKyAgICAvLyBJZiB0aGlzIGlzIGFuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QsIHRo
ZW4gaXQncyBva2F5IGlmIHRoaXMgb2JqZWN0CisgICAgLy8gZG9lc24ndCBoYXZlIGEgbm9kZSAt
IHRoZXJlIGFyZSBzb21lIHJlbmRlcmVycyB0aGF0IGRvbid0IGhhdmUgYXNzb2NpYXRlZAorICAg
IC8vIG5vZGVzLCBsaWtlIHNjcm9sbCBhcmVhcyBhbmQgY3NzLWdlbmVyYXRlZCB0ZXh0LgorICAg
IGlmICghbm9kZSgpICYmICFpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gRWxlbWVudHMgdGhhdCBzaG91bGQgbm90IGhhdmUgY2hp
bGRyZW4KKyAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7CisgICAgY2FzZSBJbWFnZVJvbGU6Cisg
ICAgY2FzZSBCdXR0b25Sb2xlOgorICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2Ug
Q2hlY2tCb3hSb2xlOgorICAgIGNhc2UgUmFkaW9CdXR0b25Sb2xlOgorICAgIGNhc2UgVGFiUm9s
ZToKKyAgICBjYXNlIFRvZ2dsZUJ1dHRvblJvbGU6CisgICAgY2FzZSBTdGF0aWNUZXh0Um9sZToK
KyAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgorICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0CiB7CisgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIHdpdGhpbiBhIHBh
cmVudCB0aGF0IGNhbm5vdCBoYXZlIGNoaWxkcmVuLCBpdCBzaG91bGQgbm90IGJlIGV4cG9zZWQu
CisgICAgaWYgKGlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50KCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCiAgICAgcmV0dXJuIG1fcm9sZSA9PSBVbmtub3duUm9sZTsKIH0KIApAQCAtMzIzLDkg
KzM2NSwxMDI3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhbnZhc0hhc0YKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzV2Vi
QXJlYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaXNOYXRpdmVJbWFnZSgpICYmIHJvbGVWYWx1ZSgpID09IEJ1dHRvblJv
bGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQW5jaG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIWlzTmF0aXZlSW1hZ2UoKSAmJiBpc0xpbmsoKTsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0Cit7Cisg
ICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
IHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dC0+aXNUZXh0KCkgfHwgaW5w
dXQtPmlzTnVtYmVyRmllbGQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAoreworICAg
IE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50
b0lucHV0RWxlbWVudCgpOworICAgIGlmICghaW5wdXRFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1NlYXJjaEZpZWxkKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gU29tZSB3ZWJzaXRlcyBkb24ndCBsYWJlbCB0aGVpciBz
ZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2ZXIsIHRoZXkgd2lsbAorICAgIC8vIHVzZSB0aGUg
d29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhlIGZvcm0gb3IgaW5wdXQgdHlwZS4gVGhpcyB3b24n
dCBjYXRjaCBldmVyeSBjYXNlLAorICAgIC8vIGJ1dCBpdCB3aWxsIGNhdGNoIGdvb2dsZS5jb20g
Zm9yIGV4YW1wbGUuCisKKyAgICAvLyBDaGVjayB0aGUgbm9kZSBuYW1lIG9mIHRoZSBpbnB1dCB0
eXBlLCBzb21ldGltZXMgaXQncyAic2VhcmNoIi4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVBdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgIGlmIChuYW1lQXR0cmli
dXRlLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gQ2hlY2sgdGhlIGZvcm0gYWN0aW9uIGFuZCB0aGUgbmFtZSwgd2hpY2ggd2lsbCBzb21l
dGltZXMgYmUgInNlYXJjaCIuCisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gaW5wdXRFbGVt
ZW50LT5mb3JtKCk7CisgICAgaWYgKGZvcm0gJiYgKGZvcm0tPm5hbWUoKS5jb250YWlucygic2Vh
cmNoIiwgZmFsc2UpIHx8IGZvcm0tPmFjdGlvbigpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgTm9k
ZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBub2RlLT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7
CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG5vZGUpOworICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0b24oKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBJbWFn
ZVJvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUGFzc3dvcmRGaWVs
ZCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUtPnRv
SW5wdXRFbGVtZW50KCk7CisgICAgaWYgKCFpbnB1dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UoKSBjb25zdAorewor
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgCisgICAgaWYgKHJvbGVWYWx1ZSgpID09IEJ1dHRvblJvbGUgJiYgbm9k
ZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIHJldHVy
biBpbnB1dC0+aXNJbWFnZUJ1dHRvbigpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQcm9ncmVzc0luZGljYXRvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFByb2dyZXNzSW5kaWNhdG9yUm9sZTsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNTbGlkZXIoKSBjb25zdAorewor
ICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBTbGlkZXJSb2xlOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojppc01lbnVSZWxhdGVkKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJv
bGVWYWx1ZSgpKSB7CisgICAgY2FzZSBNZW51Um9sZToKKyAgICBjYXNlIE1lbnVCYXJSb2xlOgor
ICAgIGNhc2UgTWVudUJ1dHRvblJvbGU6CisgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IE1lbnVSb2xlOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc01lbnVCYXIoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUo
KSA9PSBNZW51QmFyUm9sZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNN
ZW51QnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTWVudUJ1dHRv
blJvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudUl0ZW0oKSBj
b25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBNZW51SXRlbVJvbGU7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkgY29u
c3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBub2Rl
LT50b0lucHV0RWxlbWVudCgpOworICAgIGlmIChpbnB1dCkKKyAgICAgICAgcmV0dXJuIGlucHV0
LT5pc0NoZWNrYm94KCkgfHwgaW5wdXQtPmlzUmFkaW9CdXR0b24oKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNFbmFibGVkKCkgY29u
c3QKK3sKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfZGlzYWJs
ZWRBdHRyKSwgInRydWUiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogbm9k
ZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpLT5p
c0VuYWJsZWRGb3JtQ29udHJvbCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2Rl
KCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOworICAgIGlm
ICghaW5wdXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5w
dXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNQcmVzc2VkKCkgY29uc3QKK3sKKyAgICBpZiAocm9sZVZhbHVlKCkgIT0gQnV0
dG9uUm9sZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IElmIHRoaXMgaXMgYW4gQVJJQSBidXR0b24sIGNoZWNrIHRoZSBhcmlhLXByZXNzZWQgYXR0cmli
dXRlIHJhdGhlciB0aGFuIG5vZGUoKS0+YWN0aXZlKCkKKyAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1
dGUoKSA9PSBCdXR0b25Sb2xlKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShnZXRB
dHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciksICJ0cnVlIikpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBub2RlLT5h
Y3RpdmUoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNDaGVja2VkKCkg
Y29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmlyc3QgdGVzdCBmb3IgbmF0aXZlIGNo
ZWNrZWRuZXNzIHNlbWFudGljcworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IG5vZGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKGlucHV0RWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpOworCisgICAgLy8gRWxz
ZSwgaWYgdGhpcyBpcyBhbiBBUklBIGNoZWNrYm94IG9yIHJhZGlvLCByZXNwZWN0IHRoZSBhcmlh
LWNoZWNrZWQgYXR0cmlidXRlCisgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBhcmlh
Um9sZUF0dHJpYnV0ZSgpOworICAgIGlmIChhcmlhUm9sZSA9PSBSYWRpb0J1dHRvblJvbGUgfHwg
YXJpYVJvbGUgPT0gQ2hlY2tCb3hSb2xlKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShnZXRBdHRyaWJ1dGUoYXJpYV9jaGVja2VkQXR0ciksICJ0cnVlIikpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIE90aGVy
d2lzZSBpdCdzIG5vdCBjaGVja2VkCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc0hvdmVyZWQoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUg
PSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gbm9kZS0+aG92ZXJlZCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0Cit7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhcmlhTXVsdGlTZWxlY3RhYmxlID0gZ2V0QXR0cmlidXRlKGFyaWFfbXVsdGlzZWxlY3Rh
YmxlQXR0cik7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFyaWFNdWx0aVNlbGVjdGFibGUs
ICJ0cnVlIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBub2RlKCkgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5t
dWx0aXBsZSgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5
KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZSh0ZXh0
YXJlYVRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
Kj4obm9kZSktPnJlYWRPbmx5KCk7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRh
ZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSkt
PnJlYWRPbmx5KCk7CisKKyAgICByZXR1cm4gIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkgY29uc3QKK3sK
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfcmVxdWlyZWRBdHRy
KSwgInRydWUiKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBOb2RlKiBuID0gdGhpcy0+
bm9kZSgpOworICAgIGlmIChuICYmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG4p
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihuKS0+cmVxdWlyZWQoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWFkaW5nTGV2ZWwoKSBjb25z
dAoreworICAgIC8vIGhlYWRpbmdzIGNhbiBiZSBpbiBibG9jayBmbG93IGFuZCBub24tYmxvY2sg
ZmxvdworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBIZWFk
aW5nUm9sZSkKKyAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cikudG9J
bnQoKTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGgxVGFnKSkKKyAgICAgICAgcmV0dXJu
IDE7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoMlRhZykpCisgICAgICAgIHJldHVybiAy
OworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDNUYWcpKQorICAgICAgICByZXR1cm4gMzsK
KworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGg0VGFnKSkKKyAgICAgICAgcmV0dXJuIDQ7CisK
KyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoNVRhZykpCisgICAgICAgIHJldHVybiA1OworCisg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDZUYWcpKQorICAgICAgICByZXR1cm4gNjsKKworICAg
IHJldHVybiAwOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVz
Y3JpcHRpb24oKSBjb25zdAoreworICAgIGlmICghaXNBUklBUmFuZ2UoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVldGV4dEF0
dHIpLnN0cmluZygpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0FSSUFS
YW5nZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2FyaWFSb2xlKSB7CisgICAgY2FzZSBQcm9n
cmVzc0luZGljYXRvclJvbGU6CisgICAgY2FzZSBTbGlkZXJSb2xlOgorICAgIGNhc2UgU2Nyb2xs
QmFyUm9sZToKKyAgICBjYXNlIFNwaW5CdXR0b25Sb2xlOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitmbG9hdCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmFsdWVGb3JSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYg
KG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUo
KSk7CisgICAgICAgIGlmIChpbnB1dC0+aXNSYW5nZUNvbnRyb2woKSkKKyAgICAgICAgICAgIHJl
dHVybiBpbnB1dC0+dmFsdWVBc051bWJlcigpOworICAgIH0KKworICAgIGlmICghaXNBUklBUmFu
Z2UoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFy
aWFfdmFsdWVub3dBdHRyKS50b0Zsb2F0KCk7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAobm9kZSgpICYmIG5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAg
aWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LT5t
YXhpbXVtKCk7CisgICAgfQorCisgICAgaWYgKCFpc0FSSUFSYW5nZSgpKQorICAgICAgICByZXR1
cm4gMC4wZjsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1heEF0dHIpLnRv
RmxvYXQoKTsKK30KKworZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9y
UmFuZ2UoKSBjb25zdAoreworICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQtPmlzUmFuZ2VD
b250cm9sKCkpCisgICAgICAgICAgICByZXR1cm4gaW5wdXQtPm1pbmltdW0oKTsKKyAgICB9CisK
KyAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWluQXR0cikudG9GbG9hdCgpOworfQorCitmbG9h
dCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c3RlcFZhbHVlRm9yUmFuZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLnRvRmxvYXQoKTsKK30KKworYm9vbCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIZWFkaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cm9sZVZhbHVlKCkgPT0gSGVhZGluZ1JvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzTGluaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFdlYkNv
cmVMaW5rUm9sZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNDb250cm9s
KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICgobm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgfHwgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBUklBQ29udHJvbChhcmlhUm9sZUF0dHJpYnV0
ZSgpKSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRmllbGRzZXQoKSBj
b25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShmaWVs
ZHNldFRhZyk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR3JvdXAoKSBj
b25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBHcm91cFJvbGU7Cit9CisKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZWxlY3RlZFJhZGlvQnV0
dG9uKCkKK3sKKyAgICBpZiAoIWlzUmFkaW9Hcm91cCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGls
ZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisKKyAgICAvLyBGaW5kIHRoZSBjaGlsZCByYWRpbyBi
dXR0b24gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBpbnRWYWx1ZSA9PSAxKS4KKyAgICBzaXpl
X3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBjaGlsZHJl
bltpXS5nZXQoKTsKKyAgICAgICAgaWYgKG9iamVjdC0+cm9sZVZhbHVlKCkgPT0gUmFkaW9CdXR0
b25Sb2xlICYmIG9iamVjdC0+Y2hlY2tib3hPclJhZGlvVmFsdWUoKSA9PSBCdXR0b25TdGF0ZU9u
KQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZWxlY3RlZFRh
Ykl0ZW0oKQoreworICAgIGlmICghaXNUYWJMaXN0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gRmluZCB0aGUgY2hpbGQgdGFiIGl0ZW0gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBp
bnRWYWx1ZSA9PSAxKS4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgdGFiczsKKyAgICB0YWJDaGlsZHJlbih0YWJzKTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMt
PmNoaWxkcmVuKCk7CisgICAgc2l6ZV90IHNpemUgPSB0YWJzLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmplY3QgPSBjaGlsZHJlbltpXS5nZXQoKTsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNUYWJJ
dGVtKCkgJiYgb2JqZWN0LT5pc0NoZWNrZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNOYXRpdmVDaGVja2JveE9yUmFkaW8oKSkKKyAgICAgICAgcmV0dXJuIGlzQ2hlY2tl
ZCgpID8gQnV0dG9uU3RhdGVPbiA6IEJ1dHRvblN0YXRlT2ZmOworCisgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7Cit9CisKK0VsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2Rl
KiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKworICAgIC8v
IHNlYXJjaCB1cCB0aGUgRE9NIHRyZWUgZm9yIGFuIGFuY2hvciBlbGVtZW50CisgICAgLy8gTk9U
RTogdGhpcyBhc3N1bWVzIHRoYXQgYW55IG5vbi1pbWFnZSB3aXRoIGFuIGFuY2hvciBpcyBhbiBI
VE1MQW5jaG9yRWxlbWVudAorICAgIGZvciAoIDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSB8fCAobm9kZS0+cmVu
ZGVyZXIoKSAmJiBjYWNoZS0+Z2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSktPmlzQW5jaG9y
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjdGlvbkVs
ZW1lbnQoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFpbnB1dC0+ZGlzYWJsZWQo
KSAmJiAoaXNDaGVja2JveE9yUmFkaW8oKSB8fCBpbnB1dC0+aXNUZXh0QnV0dG9uKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGlucHV0OworICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShi
dXR0b25UYWcpKQorICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworCisgICAgaWYgKGlz
RmlsZVVwbG9hZEJ1dHRvbigpKQorICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAg
ICAgICAgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFS
b2xlQXR0cmlidXRlKCkpKQorICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworCisgICAg
aWYgKGlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKyAg
ICAKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICByZXR1cm4g
dG9FbGVtZW50KG5vZGUpOworCisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAgIGNhc2Ug
QnV0dG9uUm9sZToKKyAgICBjYXNlIFBvcFVwQnV0dG9uUm9sZToKKyAgICBjYXNlIFRhYlJvbGU6
CisgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgY2FzZSBMaXN0SXRlbVJvbGU6CisgICAgICAg
IHJldHVybiB0b0VsZW1lbnQobm9kZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEVsZW1lbnQqIGVsdCA9IGFuY2hvckVsZW1lbnQoKTsKKyAgICBpZiAo
IWVsdCkKKyAgICAgICAgZWx0ID0gbW91c2VCdXR0b25MaXN0ZW5lcigpOworICAgIHJldHVybiBl
bHQ7Cit9CisKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojptb3VzZUJ1dHRvbkxp
c3RlbmVyKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBjaGVjayBpZiBvdXIgcGFyZW50
IGlzIGEgbW91c2UgYnV0dG9uIGxpc3RlbmVyCisgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKworICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogRG8gdGhlIGNv
bnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBhbmNob3JFbGVtZW50IGRvZXMKKyAgICBmb3IgKEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50
LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHx8IGVsZW1lbnQtPmdldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB8fCBlbGVtZW50
LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRGVzY2VuZGFudE9mQmFycmVuUGFyZW50
KCkgY29uc3QKK3sKKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IHBhcmVu
dE9iamVjdCgpOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsKKyAg
ICAgICAgaWYgKCFvYmplY3QtPmNhbkhhdmVDaGlsZHJlbigpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjphbHRlclNsaWRlclZhbHVlKGJvb2wgaW5jcmVhc2UpCit7CisgICAgaWYg
KHJvbGVWYWx1ZSgpICE9IFNsaWRlclJvbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
Z2V0QXR0cmlidXRlKHN0ZXBBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIGNoYW5nZVZhbHVlQnlT
dGVwKGluY3JlYXNlKTsKKyAgICBlbHNlCisgICAgICAgIGNoYW5nZVZhbHVlQnlQZXJjZW50KGlu
Y3JlYXNlID8gNSA6IC01KTsKK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmluY3JlbWVudCgpCit7CisgICAgYWx0ZXJTbGlkZXJWYWx1ZSh0cnVlKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KCkKK3sKKyAgICBhbHRlclNsaWRlclZh
bHVlKGZhbHNlKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hhbmdlVmFs
dWVCeVN0ZXAoYm9vbCBpbmNyZWFzZSkKK3sKKyAgICBmbG9hdCBzdGVwID0gc3RlcFZhbHVlRm9y
UmFuZ2UoKTsKKyAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlRm9yUmFuZ2UoKTsKKworICAgIHZhbHVl
ICs9IGluY3JlYXNlID8gc3RlcCA6IC1zdGVwOworCisgICAgc2V0VmFsdWUoU3RyaW5nOjpudW1i
ZXIodmFsdWUpKTsKKworICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihub2Rl
KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hhbmdlVmFsdWVCeVBlcmNlbnQoZmxvYXQgcGVyY2VudENo
YW5nZSkKK3sKKyAgICBmbG9hdCByYW5nZSA9IG1heFZhbHVlRm9yUmFuZ2UoKSAtIG1pblZhbHVl
Rm9yUmFuZ2UoKTsKKyAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlRm9yUmFuZ2UoKTsKKworICAgIHZh
bHVlICs9IHJhbmdlICogKHBlcmNlbnRDaGFuZ2UgLyAxMDApOworICAgIHNldFZhbHVlKFN0cmlu
Zzo6bnVtYmVyKHZhbHVlKSk7CisKKyAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24obm9kZSgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzR2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQoKSBj
b25zdAoreworICAgIGlmICghY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgIC8vIElmIGl0J3MgYSBjb250cm9sLCBpdCdzIG5vdCBnZW5lcmljLgor
ICAgICBpZiAoaXNDb250cm9sKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElm
IGl0IGhhcyBhbiBhcmlhIHJvbGUsIGl0J3Mgbm90IGdlbmVyaWMuCisgICAgaWYgKG1fYXJpYVJv
bGUgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRo
ZSBjb250ZW50IGVkaXRhYmxlIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhpcyBlbGVtZW50LCB0aGF0
J3MgdGhlIHJlYXNvbgorICAgIC8vIGl0J3MgZm9jdXNhYmxlLCBhbmQgZXhpc3RpbmcgbG9naWMg
c2hvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYWxyZWFkeSAtIHNvIGl0J3Mgbm90IGEKKyAgICAvLyBn
ZW5lcmljIGZvY3VzYWJsZSBlbGVtZW50LgorCisgICAgaWYgKGhhc0NvbnRlbnRFZGl0YWJsZUF0
dHJpYnV0ZVNldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgd2ViIGFy
ZWEgYW5kIGJvZHkgZWxlbWVudCBhcmUgYm90aCBmb2N1c2FibGUsIGJ1dCBleGlzdGluZyBsb2dp
YyBoYW5kbGVzIHRoZXNlCisgICAgLy8gY2FzZXMgYWxyZWFkeSwgc28gd2UgZG9uJ3QgbmVlZCB0
byBpbmNsdWRlIHRoZW0gaGVyZS4KKyAgICBpZiAocm9sZVZhbHVlKCkgPT0gV2ViQXJlYVJvbGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobm9kZSgpICYmIG5vZGUoKS0+aGFzVGFn
TmFtZShib2R5VGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0hUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZv
ckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZWZQdHI8Tm9kZUxpc3Q+
IGxpc3QgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwi
KTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmhhc1Rh
Z05hbWUobGFiZWxUYWcpKSB7CisgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9
IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAg
ICAgIGlmIChsYWJlbC0+Y29udHJvbCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGxhYmVsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmlu
ZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigp
IGNvbnN0Cit7CisgICAgU3RyaW5nIGFyaWFMYWJlbGVkQnkgPSBhcmlhTGFiZWxlZEJ5QXR0cmli
dXRlKCk7CisgICAgaWYgKCFhcmlhTGFiZWxlZEJ5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGFyaWFMYWJlbGVkQnk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IGdl
dEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgaWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gYXJpYUxhYmVsOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitzdGF0aWMgRWxlbWVudCogc2libGluZ1dpdGhBcmlhUm9sZShTdHJpbmcgcm9sZSwgTm9kZSog
bm9kZSkKK3sKKyAgICBmb3IgKE5vZGUqIHNpYmxpbmcgPSBub2RlLT5wYXJlbnROb2RlKCktPmZp
cnN0Q2hpbGQoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKHNpYmxpbmctPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzaWJsaW5nQXJpYVJvbGUgPSB0b0VsZW1lbnQoc2libGluZyktPmdl
dEF0dHJpYnV0ZShyb2xlQXR0cik7CisgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
c2libGluZ0FyaWFSb2xlLCByb2xlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9FbGVtZW50
KHNpYmxpbmcpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiAwOworfQorCitF
bGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWVudUVsZW1lbnRGb3JNZW51QnV0dG9u
KCkgY29uc3QKK3sKKyAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBNZW51QnV0dG9uUm9s
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2libGluZ1dpdGhBcmlhUm9sZSgi
bWVudSIsIG5vZGUoKSk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjptZW51Rm9yTWVudUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGF4T2Jq
ZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkpOworfQor
CitFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWVudUl0ZW1FbGVtZW50Rm9yTWVu
dSgpIGNvbnN0Cit7CisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gTWVudVJvbGUpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBzaWJsaW5nV2l0aEFyaWFSb2xlKCJt
ZW51aXRlbSIsIG5vZGUoKSk7ICAgIAorfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6bWVudUJ1dHRvbkZvck1lbnUoKSBjb25zdAoreworICAgIEVsZW1l
bnQqIG1lbnVJdGVtID0gbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpOworCisgICAgaWYgKG1lbnVJ
dGVtKSB7CisgICAgICAgIC8vIEFSSUEganVzdCBoYXMgZ2VuZXJpYyBtZW51IGl0ZW1zLiBBcHBL
aXQgbmVlZHMgdG8ga25vdyBpZiB0aGlzIGlzIGEgdG9wIGxldmVsIGl0ZW1zIGxpa2UgTWVudUJh
ckJ1dHRvbiBvciBNZW51QmFySXRlbQorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51
SXRlbUFYID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtZW51SXRlbSk7CisgICAgICAg
IGlmIChtZW51SXRlbUFYLT5pc01lbnVCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBtZW51
SXRlbUFYOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIC8vIFN0
YXRpYyB0ZXh0IHNob3VsZCBub3QgaGF2ZSBhIGRlc2NyaXB0aW9uLCBpdCBzaG91bGQgb25seSBo
YXZlIGEgc3RyaW5nVmFsdWUuCisgICAgaWYgKHJvbGVWYWx1ZSgpID09IFN0YXRpY1RleHRSb2xl
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgYXJpYURlc2NyaXB0aW9u
ID0gYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOworICAgIGlmICghYXJpYURlc2NyaXB0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGFyaWFEZXNjcmlwdGlvbjsKKworICAgIE5v
ZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKGlzSW1hZ2UoKSB8fCBpc0lucHV0SW1h
Z2UoKSB8fCBpc05hdGl2ZUltYWdlKCkgfHwgaXNDYW52YXMoKSkgeworICAgICAgICBpZiAobm9k
ZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwor
ICAgICAgICAgICAgaWYgKGFsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgICAgICAgICAgcmV0dXJuIGFsdDsKKyAgICAgICAgfQorICAgIH0KKworI2lm
IEVOQUJMRShNQVRITUwpCisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYm
IHRvRWxlbWVudChub2RlKS0+aXNNYXRoTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmFsdHRleHRBdHRyKTsKKyNlbmRpZgorCisgICAgLy8gQW4g
ZWxlbWVudCdzIGRlc2NyaXB0aXZlIHRleHQgaXMgY29tcHJpc2VkIG9mIHRpdGxlKCkgKHdoYXQn
cyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4pIGFuZCBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSAo
b3RoZXIgZGVzY3JpcHRpdmUgdGV4dCkuCisgICAgLy8gQm90aCBhcmUgdXNlZCB0byBnZW5lcmF0
ZSB3aGF0IGEgc2NyZWVuIHJlYWRlciBzcGVha3MuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBJZiB0aGlzIHBvaW50IGlz
IHJlYWNoZWQgKGkuZS4gdGhlcmUncyBubyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pIGFuZCB0
aGVyZSdzIG5vIHRpdGxlKCksIHdlIHNob3VsZCBmYWxsYmFjayB0byB1c2luZyB0aGUgdGl0bGUg
YXR0cmlidXRlLgorICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgaXMgbm9ybWFsbHkgdXNlZCBh
cyBoZWxwIHRleHQgKGJlY2F1c2UgaXQgaXMgYSB0b29sdGlwKSwgYnV0IGlmIHRoZXJlIGlzIG5v
dGhpbmcgZWxzZSBhdmFpbGFibGUsIHRoaXMgc2hvdWxkIGJlIHVzZWQgKGFjY29yZGluZyB0byBB
UklBKS4KKyAgICBpZiAodGl0bGUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9k
ZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIZWxwID0gZ2V0QXR0cmlidXRl
KGFyaWFfaGVscEF0dHIpOworICAgIGlmICghYXJpYUhlbHAuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gYXJpYUhlbHA7CisgICAgCisgICAgU3RyaW5nIGRlc2NyaWJlZEJ5ID0gYXJpYURlc2Ny
aWJlZEJ5QXR0cmlidXRlKCk7CisgICAgaWYgKCFkZXNjcmliZWRCeS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBkZXNjcmliZWRCeTsKKyAgICAKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBh
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKKyAgICBmb3IgKE5vZGUqIGN1cnIgPSBub2RlOyBj
dXJyOyBjdXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9
IHRvRWxlbWVudChjdXJyKS0+Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICAgICAgICAg
IGlmICghc3VtbWFyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgc2hvdWxk
IGJlIHVzZWQgYXMgaGVscCB0ZXh0IHVubGVzcyBpdCBpcyBhbHJlYWR5IGJlaW5nIHVzZWQgYXMg
ZGVzY3JpcHRpdmUgdGV4dC4KKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUg
PSB0b0VsZW1lbnQoY3VyciktPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAg
aWYgKCF0aXRsZS5pc0VtcHR5KCkgJiYgZGVzY3JpcHRpb24gIT0gdGl0bGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRpdGxlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPbmx5
IHRha2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBv
ciBhbiB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAorICAgICAgICAvLyBhZGRlZCB0byB0aG9z
ZSBraW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdhcyBtZWFudCBmb3IgYSBjaGls
ZCBlbGVtZW50LgorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iaiA9IGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY3Vycik7CisgICAgICAgIGlmIChheE9iaikgeworICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGF4T2JqLT5yb2xlVmFsdWUoKTsKKyAgICAg
ICAgICAgIGlmIChyb2xlICE9IEdyb3VwUm9sZSAmJiByb2xlICE9IFVua25vd25Sb2xlKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKyAgICAKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVy
YXJjaGljYWxMZXZlbCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBTdHJpbmcg
YXJpYUxldmVsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKTsKKyAgICBp
ZiAoIWFyaWFMZXZlbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBhcmlhTGV2ZWwudG9JbnQo
KTsKKyAgICAKKyAgICAvLyBPbmx5IHRyZWUgaXRlbSB3aWxsIGNhbGN1bGF0ZSBpdHMgbGV2ZWwg
dGhyb3VnaCB0aGUgRE9NIGN1cnJlbnRseS4KKyAgICBpZiAocm9sZVZhbHVlKCkgIT0gVHJlZUl0
ZW1Sb2xlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBIaWVyYXJjaHkgbGV2ZWxp
bmcgc3RhcnRzIGF0IDAuCisgICAgLy8gV2UgbWVhc3VyZSB0cmVlIGhpZXJhcmNoeSBieSB0aGUg
bnVtYmVyIG9mIGdyb3VwcyB0aGF0IHRoZSBpdGVtIGlzIHdpdGhpbi4KKyAgICB1bnNpZ25lZCBs
ZXZlbCA9IDA7CisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRP
YmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAg
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudFJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOwor
ICAgICAgICBpZiAocGFyZW50Um9sZSA9PSBHcm91cFJvbGUpCisgICAgICAgICAgICBsZXZlbCsr
OworICAgICAgICBlbHNlIGlmIChwYXJlbnRSb2xlID09IFRyZWVSb2xlKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBsZXZlbDsKK30KKworU3RyaW5nIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2Rl
KiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgLy8gTm90ZTogVGV4dEl0ZXJhdG9yIGRvZXNuJ3QgcmV0dXJuIGFueSB0
ZXh0IGZvciBub2RlcyB0aGF0IGRvbid0IGhhdmUgcmVuZGVyZXJzLgorICAgIC8vIElmIHRoaXMg
Y291bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1cmF0ZSB1c2UgVGV4dEl0ZXJhdG9yIGhl
cmUuCisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvRWxl
bWVudChub2RlKS0+aW5uZXJUZXh0KCk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAoreworICAgIE5vZGUq
IG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBib29sIGlzSW5wdXRUYWcgPSBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFn
KTsKKyAgICBpZiAoaXNJbnB1dFRhZykgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGlu
cHV0LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRo
RGVmYXVsdCgpOworICAgIH0KKworICAgIGlmIChpc0lucHV0VGFnIHx8IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmlidXRlKCkpIHx8IGlzQ29udHJvbCgpKSB7
CisgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHRvRWxl
bWVudChub2RlKSk7CisgICAgICAgIGlmIChsYWJlbCAmJiAhZXhwb3Nlc1RpdGxlVUlFbGVtZW50
KCkpCisgICAgICAgICAgICByZXR1cm4gbGFiZWwtPmlubmVyVGV4dCgpOworICAgIH0KKworICAg
IC8vIElmIHRoaXMgbm9kZSBpc24ndCByZW5kZXJlZCwgdGhlcmUncyBubyBpbm5lciB0ZXh0IHdl
IGNhbiBleHRyYWN0IGZyb20gYSBzZWxlY3QgZWxlbWVudC4KKyAgICBpZiAoIWlzQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCgpICYmIG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAgIGNh
c2UgUG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2UgQnV0dG9uUm9sZToKKyAgICBjYXNlIENoZWNr
Qm94Um9sZToKKyAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgorICAgIGNhc2UgTWVudUJ1dHRv
blJvbGU6CisgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6
CisgICAgY2FzZSBUYWJSb2xlOgorICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChpc0hlYWRpbmco
KSB8fCBpc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQoKTsKKworICAg
IC8vIElmIGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIG9yIGEg
a25vd24gY29udHJvbCB0eXBlLCB0aGVuIGl0IHdpbGwgYXBwZWFyIHRvICAgICAgICAgICAgICAg
ICAgCisgICAgLy8gdGhlIHVzZXIgYXMgYSBzaW5nbGUgYXRvbWljIG9iamVjdCwgc28gd2Ugc2hv
dWxkIHVzZSBpdHMgdGV4dCBhcyB0aGUgZGVmYXVsdCB0aXRsZS4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICBpZiAoaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpKQorICAgICAg
ICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHQoKSBjb25zdAoreworICAgIC8v
IElmIHRoaXMgaXMgYSB1c2VyIGRlZmluZWQgc3RhdGljIHRleHQsIHVzZSB0aGUgYWNjZXNzaWJs
ZSBuYW1lIGNvbXB1dGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gU3RhdGljVGV4dFJvbGUpCisgICAgICAg
IHJldHVybiBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7CisKKyAgICBpZiAoIWlzVGV4
dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTm9kZSogbm9kZSA9
IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxUZXh0QXJlYUVsZW1lbnQqPihub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnRvSW5wdXRFbGVt
ZW50KCktPnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSkt
PmlubmVyVGV4dCgpOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0cmlu
Z1ZhbHVlKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKGFyaWFSb2xlQXR0
cmlidXRlKCkgPT0gU3RhdGljVGV4dFJvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0YXRpY1RleHQg
PSB0ZXh0KCk7CisgICAgICAgIGlmICghc3RhdGljVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHN0YXRpY1RleHQgPSB0ZXh0VW5kZXJFbGVtZW50KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNU
ZXh0OworICAgIH0KKworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVy
biB0ZXh0VW5kZXJFbGVtZW50KCk7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RU
YWcpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1M
U2VsZWN0RWxlbWVudChub2RlKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RF
bGVtZW50LT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVu
dCo+IGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOworICAgICAgICBpZiAo
c2VsZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkg
PCBsaXN0SXRlbXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG92
ZXJyaWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJdGVtc1tzZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0
dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgICAgICAgICBpZiAoIW92ZXJyaWRkZW5EZXNj
cmlwdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkRlc2Ny
aXB0aW9uOworICAgICAgICB9CisgICAgICAgIGlmICghc2VsZWN0RWxlbWVudC0+bXVsdGlwbGUo
KSkKKyAgICAgICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT52YWx1ZSgpOworICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGlzVGV4dENvbnRyb2woKSkKKyAgICAg
ICAgcmV0dXJuIHRleHQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIGltcGxl
bWVudCBhIHZhbHVlIGhlcmUgZm9yIG1vcmUgdHlwZXMKKyAgICAvLyBGSVhNRTogSXQgd291bGQg
YmUgYmV0dGVyIG5vdCB0byBhZHZlcnRpc2UgYSB2YWx1ZSBhdCBhbGwgZm9yIHRoZSB0eXBlcyBm
b3Igd2hpY2ggd2UgZG9uJ3QgaW1wbGVtZW50IG9uZTsKKyAgICAvLyB0aGlzIHdvdWxkIHJlcXVp
cmUgc3ViY2xhc3Npbmcgb3IgbWFraW5nIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyBkbyBz
b21ldGhpbmcgb3RoZXIgdGhhbiByZXR1cm4gYQorICAgIC8vIHNpbmdsZSBzdGF0aWMgYXJyYXku
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMg
dGhlIEFSSUEgYWNjZXNzaWJsZSBuYW1lIGFzIGRlc2NyaWJlZCBieSB0aGUgTW96aWxsYSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIEFSSUEgSW1wbGVtZW50ZXIn
cyBHdWlkZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGljIFN0cmlu
ZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNU
ZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gdG9UZXh0KG5vZGUpLT5kYXRhKCk7CisKKyAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSktPnZhbHVlKCk7CisKKyAgICBpZiAobm9kZS0+aXNI
VE1MRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1M
RWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgICAgICBpZiAoIWFsdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gYWx0OworICAgIH0KKworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+ICZlbGVtZW50cykgY29u
c3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgdW5zaWduZWQgc2l6ZSA9IGVs
ZW1lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IGVsZW1lbnRzW2ldOworCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShpZEVsZW1lbnQpKTsKKyAgICAgICAg
Zm9yIChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKGlkRWxlbWVudCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhY2Nlc3Np
YmxlTmFtZUZvck5vZGUobikpOworCisgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZWxlbWVudHNGcm9t
QXR0cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVHJlZVNjb3BlKiBzY29wZSA9IG5vZGUtPnRyZWVTY29wZSgpOworICAgIGlmICghc2Nv
cGUpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBpZExpc3QgPSBnZXRBdHRyaWJ1dGUo
YXR0cmlidXRlKS5zdHJpbmcoKTsKKyAgICBpZiAoaWRMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWRMaXN0LnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBpZFZlY3RvcjsKKyAgICBpZExpc3Quc3BsaXQoJyAnLCBpZFZlY3Rvcik7CisKKyAgICB1
bnNpZ25lZCBzaXplID0gaWRWZWN0b3Iuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGlkTmFtZShpZFZlY3Rvcltp
XSk7CisgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IHNjb3BlLT5nZXRFbGVtZW50QnlJZChp
ZE5hbWUpOworICAgICAgICBpZiAoaWRFbGVtZW50KQorICAgICAgICAgICAgZWxlbWVudHMuYXBw
ZW5kKGlkRWxlbWVudCk7CisgICAgfQorfQorCisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29u
c3QKK3sKKyAgICBlbGVtZW50c0Zyb21BdHRyaWJ1dGUoZWxlbWVudHMsIGFyaWFfbGFiZWxlZGJ5
QXR0cik7CisgICAgaWYgKCFlbGVtZW50cy5zaXplKCkpCisgICAgICAgIGVsZW1lbnRzRnJvbUF0
dHJpYnV0ZShlbGVtZW50cywgYXJpYV9sYWJlbGxlZGJ5QXR0cik7Cit9CisKKworU3RyaW5nIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRzOworICAgIGFyaWFMYWJlbGVkQnlFbGVtZW50
cyhlbGVtZW50cyk7CisKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxl
bWVudHMoZWxlbWVudHMpOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5T
ZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc1dl
YkFyZWEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzYsNyArMTM5Niw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3UKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBp
ZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICF0b0VsZW1lbnQobm9kZSktPmlzRW5hYmxlZEZv
cm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBub2RlLT5z
dXBwb3J0c0ZvY3VzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCShyZXZpc2lvbiAxMjc5OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDcxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBjYW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FuY2hvcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2woKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGaWVsZHNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0dy
b3VwKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzSGVhZGluZygpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpc0hvdmVyZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGlzSW5wdXRJbWFnZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0xpbmso
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZW51KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGlzTWVudUJhcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01lbnVCdXR0b24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBpc01lbnVSZWxhdGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTXVsdGlTZWxl
Y3RhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlQ2hlY2tib3hPclJhZGlv
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0lu
ZGljYXRvcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
V2ViQXJlYSgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJ
bmRldGVybWluYXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUHJlc3NlZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzUmVxdWlyZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Tm9kZShOb2RlKik7CisgICAgdmly
dHVhbCBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgdmlydHVhbCBE
b2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRGb2N1
c0F0dHJpYnV0ZSgpIGNvbnN0OwotICAgIAorICAgIHZpcnR1YWwgaW50IGhlYWRpbmdMZXZlbCgp
IGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxv
YXQgbWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWluVmFsdWVG
b3JSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgc3RlcFZhbHVlRm9yUmFuZ2UoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogc2VsZWN0ZWRSYWRpb0J1
dHRvbigpOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogc2VsZWN0ZWRUYWJJdGVt
KCk7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlv
VmFsdWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgaGVscFRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRs
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFMYWJl
bGVkQnlBdHRyaWJ1dGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxl
bWVudCgpIGNvbnN0OworICAgIEVsZW1lbnQqIG1vdXNlQnV0dG9uTGlzdGVuZXIoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEVsZW1lbnQqIGFuY2hvckVsZW1lbnQoKSBjb25zdDsKKyAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBtZW51Rm9yTWVudUJ1dHRvbigpIGNvbnN0OworICAgCisgICAgdmlydHVh
bCB2b2lkIGNoYW5nZVZhbHVlQnlQZXJjZW50KGZsb2F0IHBlcmNlbnRDaGFuZ2UpOworIAogICAg
IHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbGFzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKQEAgLTc3LDE0
ICsxNDAsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50T2JqZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnRPYmplY3RJZkV4aXN0cygpIGNvbnN0OwogCi0gICAgdm9pZCBzZXROb2RlKE5vZGUqKTsKLSAg
ICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICB2aXJ0
dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1l
bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CisKICAgICB2aXJ0dWFsIExheW91
dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtOTYsMTEgKzE1OCwy
NiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCk7Cisg
ICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUg
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1p
bmVBcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJlbWFw
QXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CiAgICAgYm9vbCBo
YXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBjb25zdDsKKyAgICBib29sIGlzRGVzY2Vu
ZGFudE9mQmFycmVuUGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBhbHRlclNsaWRlclZhbHVlKGJv
b2wgaW5jcmVhc2UpOworICAgIHZvaWQgY2hhbmdlVmFsdWVCeVN0ZXAoYm9vbCBpbmNyZWFzZSk7
CisgICAgYm9vbCBpc0FSSUFSYW5nZSgpIGNvbnN0OworICAgIGJvb2wgaXNHZW5lcmljRm9jdXNh
YmxlRWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRm9yRWxlbWVu
dChFbGVtZW50KikgY29uc3Q7CisgICAgU3RyaW5nIGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRp
b24oKSBjb25zdDsKKyAgICB2b2lkIGFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0b3I8RWxlbWVu
dCo+JiBlbGVtZW50cykgY29uc3Q7CisgICAgU3RyaW5nIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlv
bkZvckVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25zdDsKKyAgICB2b2lk
IGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cywgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgRWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51
QnV0dG9uKCkgY29uc3Q7CisgICAgRWxlbWVudCogbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNv
bnN0OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1lbnVCdXR0b25Gb3JNZW51KCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgTm9kZSogbV9ub2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMjc5OTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsNjYgKzQ3Nyw3
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICAKICAgICBy
ZXR1cm4gMDsKIH0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1dlYkFyZWEo
KSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBXZWJBcmVhUm9sZTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaXNOYXRpdmVJbWFnZSgpICYmIHJvbGVWYWx1ZSgpID09IEJ1dHRvblJvbGU7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBbmNob3IoKSBjb25zdAot
ewotICAgIHJldHVybiAhaXNOYXRpdmVJbWFnZSgpICYmIGlzTGluaygpOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdAotewot
ICAgIHJldHVybiBtX3JlbmRlcmVyLT5pc1RleHRDb250cm9sKCk7Ci19CiAgICAgCi1ib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAotewotICAgIGlm
ICghbm9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICgh
aW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaW5wdXRFbGVt
ZW50LT5pc1NlYXJjaEZpZWxkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gU29t
ZSB3ZWJzaXRlcyBkb24ndCBsYWJlbCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2
ZXIsIHRoZXkgd2lsbAotICAgIC8vIHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhl
IGZvcm0gb3IgaW5wdXQgdHlwZS4gVGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNlLAotICAgIC8v
IGJ1dCBpdCB3aWxsIGNhdGNoIGdvb2dsZS5jb20gZm9yIGV4YW1wbGUuCi0gICAgCi0gICAgLy8g
Q2hlY2sgdGhlIG5vZGUgbmFtZSBvZiB0aGUgaW5wdXQgdHlwZSwgc29tZXRpbWVzIGl0J3MgInNl
YXJjaCIuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0cmlidXRlID0gZ2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKLSAgICBpZiAobmFtZUF0dHJpYnV0ZS5jb250YWlucygic2VhcmNoIiwg
ZmFsc2UpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGUgZm9y
bSBhY3Rpb24gYW5kIHRoZSBuYW1lLCB3aGljaCB3aWxsIHNvbWV0aW1lcyBiZSAic2VhcmNoIi4K
LSAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1dEVsZW1lbnQtPmZvcm0oKTsKLSAgICBp
ZiAoZm9ybSAmJiAoZm9ybS0+bmFtZSgpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkgfHwgZm9y
bS0+YWN0aW9uKCkuY29udGFpbnMoInNlYXJjaCIsIGZhbHNlKSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aXNOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVu
ZGVyZXItPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVu
ZGVyZXIpLT5pc0ltYWdlKCk7Ci19ICAgIAotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0ltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gSW1h
Z2VSb2xlOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQXR0YWNobWVu
dCgpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVy
Qm94TW9kZWxPYmplY3QoKTsKQEAgLTU0OCwyMSArNDg5LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppc0F0dGFjaAogICAgIHJldHVybiBpc1dpZGdldCAmJiBhcmlhUm9sZUF0
dHJpYnV0ZSgpID09IFVua25vd25Sb2xlOwogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIp
OwotICAgIGlmICghbV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPmlz
SFRNTEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhcmlhUm9sZUF0
dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5w
dXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpOwotfQotICAg
IAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBj
b25zdAogewogICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBtX3Jl
bmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CkBAIC01NzMsMTQ3ICs0OTks
NiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0lucHV0
SW1hZ2UoKSBjb25zdAotewotICAgIE5vZGUqIGVsZW1lbnROb2RlID0gbm9kZSgpOwotICAgIGlm
IChyb2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlICYmIGVsZW1lbnROb2RlICYmIGVsZW1lbnROb2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50Tm9kZSk7Ci0gICAgICAg
IHJldHVybiBpbnB1dC0+aXNJbWFnZUJ1dHRvbigpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNQcm9ncmVzc0lu
ZGljYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFByb2dyZXNzSW5k
aWNhdG9yUm9sZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1NsaWRl
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFNsaWRlclJvbGU7Ci19Ci0K
LWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNZW51UmVsYXRlZCgpIGNvbnN0Ci17
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwotICAgIHJldHVybiBy
b2xlID09IE1lbnVSb2xlIAotICAgICAgICB8fCByb2xlID09IE1lbnVCYXJSb2xlCi0gICAgICAg
IHx8IHJvbGUgPT0gTWVudUJ1dHRvblJvbGUKLSAgICAgICAgfHwgcm9sZSA9PSBNZW51SXRlbVJv
bGU7Ci19ICAgIAotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWVudSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IE1lbnVSb2xlOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWVudUJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJvbGVWYWx1ZSgpID09IE1lbnVCYXJSb2xlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzTWVudUJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgp
ID09IE1lbnVCdXR0b25Sb2xlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmlzTWVudUl0ZW0oKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBNZW51SXRl
bVJvbGU7Ci19Ci0gICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1ByZXNz
ZWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICBpZiAocm9sZVZhbHVl
KCkgIT0gQnV0dG9uUm9sZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZSogbm9k
ZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIElmIHRoaXMgaXMgYW4gQVJJQSBidXR0b24sIGNoZWNrIHRoZSBhcmlh
LXByZXNzZWQgYXR0cmlidXRlIHJhdGhlciB0aGFuIG5vZGUoKS0+YWN0aXZlKCkKLSAgICBpZiAo
YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBCdXR0b25Sb2xlKSB7Ci0gICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciksICJ0cnVlIikpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiBub2RlLT5hY3RpdmUoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsK
LSAgICBpZiAoIW1fcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50
b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRp
bygpIGNvbnN0Ci17Ci0gICAgTm9kZSogZWxlbWVudE5vZGUgPSBub2RlKCk7Ci0gICAgaWYgKGVs
ZW1lbnROb2RlKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZWxlbWVudE5v
ZGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChpbnB1dCkKLSAgICAgICAgICAgIHJl
dHVybiBpbnB1dC0+aXNDaGVja2JveCgpIHx8IGlucHV0LT5pc1JhZGlvQnV0dG9uKCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7
Ci0gICAgCi0gICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVj
a2VkbmVzcyBzZW1hbnRpY3MKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBu
b2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dEVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKTsKLQotICAgIC8vIEVsc2Us
IGlmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywgcmVzcGVjdCB0aGUgYXJpYS1j
aGVja2VkIGF0dHJpYnV0ZQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJv
bGVBdHRyaWJ1dGUoKTsKLSAgICBpZiAoYXJpYVJvbGUgPT0gUmFkaW9CdXR0b25Sb2xlIHx8IGFy
aWFSb2xlID09IENoZWNrQm94Um9sZSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
Z2V0QXR0cmlidXRlKGFyaWFfY2hlY2tlZEF0dHIpLCAidHJ1ZSIpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndp
c2UgaXQncyBub3QgY2hlY2tlZAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc0hvdmVyZWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3Jl
bmRlcmVyKTsKLSAgICByZXR1cm4gbV9yZW5kZXJlci0+bm9kZSgpICYmIG1fcmVuZGVyZXItPm5v
ZGUoKS0+aG92ZXJlZCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0gICAg
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTXVsdGlTZWxlY3RhYmxlID0gZ2V0QXR0cmli
dXRlKGFyaWFfbXVsdGlzZWxlY3RhYmxlQXR0cik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGFyaWFNdWx0aVNlbGVjdGFibGUsICJ0cnVlIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2Rl
bE9iamVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpLT5pc0xpc3RC
b3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3JlbmRlcmVyLT5ub2Rl
KCkgJiYgdG9IVE1MU2VsZWN0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgp
OwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25z
dAogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKQEAgLTczMCwxNSArNTE1LDcgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgICAgICByZXR1cm4gIWRvY3Vt
ZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICB9CiAKLSAgICBpZiAobV9yZW5kZXJlci0+
aXNCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3gg
PSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOwotICAgICAgICBpZiAoYm94LT5p
c1RleHRGaWVsZCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihib3gtPm5vZGUoKSktPnJlYWRPbmx5KCk7Ci0gICAgICAgIGlmIChib3gtPmlzVGV4
dEFyZWEoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50Kj4oYm94LT5ub2RlKCkpLT5yZWFkT25seSgpOwotICAgIH0KLQotICAgIHJldHVybiAhbV9y
ZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJs
ZSgpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZWFkT25seSgpOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKCkgY29uc3QK
QEAgLTc1MSwxMDcgKzUyOCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNP
ZmZTY3IKICAgICByZXR1cm4gdmlld1JlY3QuaXNFbXB0eSgpOwogfQogCi1pbnQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aGVhZGluZ0xldmVsKCkgY29uc3QKLXsKLSAgICAvLyBoZWFkaW5n
cyBjYW4gYmUgaW4gYmxvY2sgZmxvdyBhbmQgbm9uLWJsb2NrIGZsb3cKLSAgICBOb2RlKiBlbGVt
ZW50ID0gbm9kZSgpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBIZWFkaW5nUm9sZSkKLSAgICAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cikudG9JbnQoKTsKLQotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGgxVGFnKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgCi0gICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaDJUYWcpKQotICAgICAgICByZXR1cm4gMjsKLSAgICAKLSAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykpCi0gICAgICAgIHJldHVybiAzOwotICAgIAot
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGg0VGFnKSkKLSAgICAgICAgcmV0dXJuIDQ7Ci0g
ICAgCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaDVUYWcpKQotICAgICAgICByZXR1cm4g
NTsKLSAgICAKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoNlRhZykpCi0gICAgICAgIHJl
dHVybiA2OwotICAgIAotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzSGVhZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09
IEhlYWRpbmdSb2xlOwotfQotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c0xpbmsoKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBXZWJDb3JlTGlua1Jv
bGU7Ci19ICAgIAotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NvbnRy
b2woKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgcmV0dXJu
IG5vZGUgJiYgKChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICB8fCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFDb250cm9sKGFyaWFSb2xlQXR0cmlidXRlKCkpKTsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpZWxkc2V0KCkgY29uc3QK
LXsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9i
amVjdCgpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gcmVuZGVyZXItPmlzRmllbGRzZXQoKTsKLX0KLSAgCi1ib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzR3JvdXAoKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9
PSBHcm91cFJvbGU7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNlbGVjdGVkUmFkaW9CdXR0b24oKQotewotICAgIGlmICghaXNSYWRpb0dyb3Vw
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0K
LSAgICAvLyBGaW5kIHRoZSBjaGlsZCByYWRpbyBidXR0b24gdGhhdCBpcyBzZWxlY3RlZCAoaWUu
IHRoZSBpbnRWYWx1ZSA9PSAxKS4KLSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QgPSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9i
amVjdC0+cm9sZVZhbHVlKCkgPT0gUmFkaW9CdXR0b25Sb2xlICYmIG9iamVjdC0+Y2hlY2tib3hP
clJhZGlvVmFsdWUoKSA9PSBCdXR0b25TdGF0ZU9uKQotICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGFiSXRlbSgpCi17Ci0gICAgaWYgKCFpc1Rh
Ykxpc3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgY2hpbGQg
dGFiIGl0ZW0gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBpbnRWYWx1ZSA9PSAxKS4KLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFiczsKLSAg
ICB0YWJDaGlsZHJlbih0YWJzKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAg
IAotICAgIHNpemVfdCBzaXplID0gdGFicy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0g
Y2hpbGRyZW5baV0uZ2V0KCk7Ci0gICAgICAgIGlmIChvYmplY3QtPmlzVGFiSXRlbSgpICYmIG9i
amVjdC0+aXNDaGVja2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLSAg
ICByZXR1cm4gMDsKLX0KLQogRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5j
aG9yRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtODg0LDE0NSAr
NTYwLDYgQEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaAogICAgIHJl
dHVybiAwOwogfQogCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY3Rpb25F
bGVtZW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAw
OwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKG5v
ZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihub2RlKTsKLSAgICAgICAgICAgIGlmICghaW5wdXQtPmRpc2FibGVkKCkgJiYgKGlzQ2hl
Y2tib3hPclJhZGlvKCkgfHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5wdXQ7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0
b25UYWcpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKLSAgICB9Ci0KLSAg
ICBpZiAoaXNGaWxlVXBsb2FkQnV0dG9uKCkpCi0gICAgICAgIHJldHVybiB0b0VsZW1lbnQobV9y
ZW5kZXJlci0+bm9kZSgpKTsKLSAgICAgICAgICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRv
RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgaWYgKGlzSW1hZ2VCdXR0b24oKSkK
LSAgICAgICAgcmV0dXJuIHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgIAotICAg
IGlmIChtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChtX3JlbmRlcmVyKS0+aXNNZW51TGlzdCgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50
KG1fcmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7Ci0gICAg
Y2FzZSBCdXR0b25Sb2xlOgotICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgotICAgIGNhc2UgVGFi
Um9sZToKLSAgICBjYXNlIE1lbnVJdGVtUm9sZToKLSAgICBjYXNlIExpc3RJdGVtUm9sZToKLSAg
ICAgICAgcmV0dXJuIHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOyAKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgRWxlbWVudCogZWx0ID0gYW5jaG9y
RWxlbWVudCgpOwotICAgIGlmICghZWx0KQotICAgICAgICBlbHQgPSBtb3VzZUJ1dHRvbkxpc3Rl
bmVyKCk7Ci0gICAgcmV0dXJuIGVsdDsKLX0KLQotRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcigpIGNvbnN0Ci17Ci0gICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBidXR0b24gbGlzdGVu
ZXIKLSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIC8vIEZJWE1FOiBEbyB0aGUgY29udGludWF0aW9uIHNlYXJjaCBsaWtlIGFu
Y2hvckVsZW1lbnQgZG9lcwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1l
bnQoKSkgewotICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHx8IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphbHRlclNsaWRlclZhbHVlKGJvb2wgaW5jcmVhc2UpCi17Ci0g
ICAgaWYgKHJvbGVWYWx1ZSgpICE9IFNsaWRlclJvbGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghZ2V0QXR0cmlidXRlKHN0ZXBBdHRyKS5pc0VtcHR5KCkpCi0gICAgICAgIGNoYW5nZVZh
bHVlQnlTdGVwKGluY3JlYXNlKTsKLSAgICBlbHNlCi0gICAgICAgIGNoYW5nZVZhbHVlQnlQZXJj
ZW50KGluY3JlYXNlID8gNSA6IC01KTsKLX0KLSAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aW5jcmVtZW50KCkKLXsKLSAgICBhbHRlclNsaWRlclZhbHVlKHRydWUpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRlY3JlbWVudCgpCi17Ci0gICAgYWx0
ZXJTbGlkZXJWYWx1ZShmYWxzZSk7Ci19Ci0KLXN0YXRpYyBFbGVtZW50KiBzaWJsaW5nV2l0aEFy
aWFSb2xlKFN0cmluZyByb2xlLCBOb2RlKiBub2RlKQotewotICAgIE5vZGUqIHNpYmxpbmcgPSBu
b2RlLT5wYXJlbnROb2RlKCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoc2libGluZykgewot
ICAgICAgICBpZiAoc2libGluZy0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHNpYmxpbmdBcmlhUm9sZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihz
aWJsaW5nKS0+Z2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKLSAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2libGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc2li
bGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAw
OwotfQotCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51RWxlbWVudEZv
ck1lbnVCdXR0b24oKSBjb25zdAotewotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpICE9IE1l
bnVCdXR0b25Sb2xlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzaWJsaW5nV2l0
aEFyaWFSb2xlKCJtZW51IiwgcmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWVudUZvck1lbnVCdXR0b24oKSBj
b25zdAotewotICAgIEVsZW1lbnQqIG1lbnUgPSBtZW51RWxlbWVudEZvck1lbnVCdXR0b24oKTsK
LSAgICBpZiAobWVudSAmJiBtZW51LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtZW51KTsKLSAgICByZXR1cm4gMDsKLX0KLQotRWxlbWVu
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gTWVudVJvbGUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzaWJsaW5nV2l0aEFyaWFSb2xlKCJtZW51aXRl
bSIsIHJlbmRlcmVyKCktPm5vZGUoKSk7ICAgIAotfQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51QnV0dG9uRm9yTWVudSgpIGNvbnN0Ci17Ci0g
ICAgRWxlbWVudCogbWVudUl0ZW0gPSBtZW51SXRlbUVsZW1lbnRGb3JNZW51KCk7Ci0KLSAgICBp
ZiAobWVudUl0ZW0gJiYgbWVudUl0ZW0tPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gQVJJQSBq
dXN0IGhhcyBnZW5lcmljIG1lbnUgaXRlbXMuICBBcHBLaXQgbmVlZHMgdG8ga25vdyBpZiB0aGlz
IGlzIGEgdG9wIGxldmVsIGl0ZW1zIGxpa2UgTWVudUJhckJ1dHRvbiBvciBNZW51QmFySXRlbQot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51SXRlbUFYID0gYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShtZW51SXRlbSk7Ci0gICAgICAgIGlmIChtZW51SXRlbUFYLT5pc01lbnVC
dXR0b24oKSkKLSAgICAgICAgICAgIHJldHVybiBtZW51SXRlbUFYOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0xMDYxLDQwICs1OTgsNiBAQCBTdHJp
bmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGVscFRlCiAgICAgCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQotICAgIAotdW5zaWduZWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGll
cmFyY2hpY2FsTGV2ZWwoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIFN0
cmluZyBhcmlhTGV2ZWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXJpYV9sZXZlbEF0dHIpOwot
ICAgIGlmICghYXJpYUxldmVsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGFyaWFMZXZlbC50
b0ludCgpOwotICAgIAotICAgIC8vIE9ubHkgdHJlZSBpdGVtIHdpbGwgY2FsY3VsYXRlIGl0cyBs
ZXZlbCB0aHJvdWdoIHRoZSBET00gY3VycmVudGx5LgotICAgIGlmIChyb2xlVmFsdWUoKSAhPSBU
cmVlSXRlbVJvbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIEhpZXJhcmNoeSBs
ZXZlbGluZyBzdGFydHMgYXQgMC4KLSAgICAvLyBXZSBtZWFzdXJlIHRyZWUgaGllcmFyY2h5IGJ5
IHRoZSBudW1iZXIgb2YgZ3JvdXBzIHRoYXQgdGhlIGl0ZW0gaXMgd2l0aGluLgotICAgIHVuc2ln
bmVkIGxldmVsID0gMDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRP
YmplY3QoKTsKLSAgICB3aGlsZSAocGFyZW50KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHBhcmVudFJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOwotICAgICAgICBpZiAocGFyZW50Um9s
ZSA9PSBHcm91cFJvbGUpCi0gICAgICAgICAgICBsZXZlbCsrOwotICAgICAgICBlbHNlIGlmIChw
YXJlbnRSb2xlID09IFRyZWVSb2xlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAg
ICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gbGV2ZWw7Ci19CiAKIHN0YXRpYyBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0
b3JCZWhhdmlvckZvclRleHRSYW5nZSgpCiB7CkBAIC0xMTQ2LDU5ICs2NDksNiBAQCBOb2RlKiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlKCkgCiAgICAgcmV0dXJuIG1fcmVuZGVyZXIg
PyBtX3JlbmRlcmVyLT5ub2RlKCkgOiAwOyAKIH0gICAgCiAgICAgCi1BY2Nlc3NpYmlsaXR5QnV0
dG9uU3RhdGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2hlY2tib3hPclJhZGlvVmFsdWUo
KSBjb25zdAotewotICAgIGlmIChpc05hdGl2ZUNoZWNrYm94T3JSYWRpbygpKQotICAgICAgICBy
ZXR1cm4gaXNDaGVja2VkKCkgPyBCdXR0b25TdGF0ZU9uIDogQnV0dG9uU3RhdGVPZmY7Ci0gICAg
Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7
Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2YWx1ZURlc2NyaXB0aW9u
KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyaWFfdmFsdWV0ZXh0QXR0ciku
c3RyaW5nKCk7Ci19Ci0gICAgCi1mbG9hdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdGVw
VmFsdWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzdGVwQXR0
cikudG9GbG9hdCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQVJJ
QVJhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hcmlhUm9sZSA9PSBQcm9ncmVzc0luZGlj
YXRvclJvbGUKLSAgICAgICAgfHwgbV9hcmlhUm9sZSA9PSBTbGlkZXJSb2xlCi0gICAgICAgIHx8
IG1fYXJpYVJvbGUgPT0gU2Nyb2xsQmFyUm9sZQotICAgICAgICB8fCBtX2FyaWFSb2xlID09IFNw
aW5CdXR0b25Sb2xlOwotfQotICAgIAotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
dmFsdWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAg
ICByZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0
dHIpLnRvRmxvYXQoKTsKLX0KLQotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF4
VmFsdWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAg
ICByZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1heEF0
dHIpLnRvRmxvYXQoKTsKLX0KLQotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWlu
VmFsdWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAg
ICByZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1pbkF0
dHIpLnRvRmxvYXQoKTsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0
cmluZ1ZhbHVlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0xMjU3LDk5ICs3
MDcsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nCiAgICAgcmV0
dXJuIFN0cmluZygpOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIEFSSUEg
YWNjZXNzaWJsZSBuYW1lIGFzIGRlc2NyaWJlZCBieSB0aGUgTW96aWxsYQotLy8gQVJJQSBJbXBs
ZW1lbnRlcidzIEd1aWRlLgotc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9k
ZSogbm9kZSkKLXsKLSAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4g
dG9UZXh0KG5vZGUpLT5kYXRhKCk7Ci0KLSAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRh
ZykpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSkt
PnZhbHVlKCk7Ci0KLSAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRl
KGFsdEF0dHIpOwotICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1
cm4gYWx0OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRz
KFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICB1bnNpZ25lZCBzaXplID0gZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRWxlbWVudCogaWRFbGVt
ZW50ID0gZWxlbWVudHNbaV07Ci0KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5h
bWVGb3JOb2RlKGlkRWxlbWVudCkpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBpZEVsZW1lbnQt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoaWRFbGVtZW50KSkKLSAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShuKSk7Ci0KLSAg
ICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcp
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVu
dCo+JiBlbGVtZW50cywgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdAotewot
ICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRyZWVTY29wZSog
c2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKTsKLSAgICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgU3RyaW5nIGlkTGlzdCA9IGdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLnN0
cmluZygpOwotICAgIGlmIChpZExpc3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWRMaXN0LnJlcGxhY2UoJ1xuJywgJyAnKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBpZFZl
Y3RvcjsKLSAgICBpZExpc3Quc3BsaXQoJyAnLCBpZFZlY3Rvcik7Ci0gICAgCi0gICAgdW5zaWdu
ZWQgc2l6ZSA9IGlkVmVjdG9yLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBpZE5hbWUoaWRWZWN0b3JbaV0pOwot
ICAgICAgICBFbGVtZW50KiBpZEVsZW1lbnQgPSBzY29wZS0+Z2V0RWxlbWVudEJ5SWQoaWROYW1l
KTsKLSAgICAgICAgaWYgKGlkRWxlbWVudCkKLSAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChp
ZEVsZW1lbnQpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25z
dAotewotICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9sYWJlbGVkYnlB
dHRyKTsKLSAgICBpZiAoIWVsZW1lbnRzLnNpemUoKSkKLSAgICAgICAgZWxlbWVudHNGcm9tQXR0
cmlidXRlKGVsZW1lbnRzLCBhcmlhX2xhYmVsbGVkYnlBdHRyKTsKLX0KLSAgIAotU3RyaW5nIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdAot
ewotICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7Ci0gICAgYXJpYUxhYmVsZWRCeUVsZW1l
bnRzKGVsZW1lbnRzKTsKLSAgICAKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
Rm9yRWxlbWVudHMoZWxlbWVudHMpOwotfQotCi1zdGF0aWMgSFRNTExhYmVsRWxlbWVudCogbGFi
ZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBs
aXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7
Ci0gICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdO
YW1lKGxhYmVsVGFnKSkgewotICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBz
dGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAg
ICBpZiAobGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBsYWJlbDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLSAgICAK
IEhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxhYmVsRWxlbWVu
dENvbnRhaW5lcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtMTM2OCw1NSAr
NzI1LDYgQEAgSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iagogICAgIHJl
dHVybiAwOwogfQogCi1TdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKSBj
b25zdAotewotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSByb2xlVmFsdWUoKTsKLSAgICAK
LSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5v
ZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgYm9vbCBpc0lucHV0VGFnID0gbm9kZS0+aGFzVGFn
TmFtZShpbnB1dFRhZyk7Ci0gICAgaWYgKGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7Ci0g
ICAgICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5w
dXQtPnZhbHVlV2l0aERlZmF1bHQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzSW5wdXRUYWcg
fHwgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBUklBSW5wdXQoYXJpYVJvbGVBdHRyaWJ1dGUoKSkg
fHwgaXNDb250cm9sKCkpIHsKLSAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJl
bEZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKLSAgICAgICAgaWYgKGxh
YmVsICYmICFleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBsYWJl
bC0+aW5uZXJUZXh0KCk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNh
c2UgQnV0dG9uUm9sZToKLSAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgotICAgIGNhc2UgTWVu
dUl0ZW1Sb2xlOgotICAgIGNhc2UgTWVudUJ1dHRvblJvbGU6Ci0gICAgY2FzZSBSYWRpb0J1dHRv
blJvbGU6Ci0gICAgY2FzZSBDaGVja0JveFJvbGU6Ci0gICAgY2FzZSBUYWJSb2xlOgotICAgIGNh
c2UgUG9wVXBCdXR0b25Sb2xlOgotICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgIAotICAgIGlmIChpc0hlYWRp
bmcoKSB8fCBpc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQoKTsKLQot
ICAgIC8vIElmIGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIG9y
IGEga25vd24gY29udHJvbCB0eXBlLCB0aGVuIGl0IHdpbGwgYXBwZWFyIHRvCi0gICAgLy8gdGhl
IHVzZXIgYXMgYSBzaW5nbGUgYXRvbWljIG9iamVjdCwgc28gd2Ugc2hvdWxkIHVzZSBpdHMgdGV4
dCBhcyB0aGUgZGVmYXVsdCB0aXRsZS4KLSAgICBpZiAoaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwotCi0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYURlc2Ny
aWJlZEJ5QXR0cmlidXRlKCkgY29uc3QKIHsKICAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRz
OwpAQCAtMTQyNSwxOSArNzMzLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFyaWFEZQogICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyhl
bGVtZW50cyk7CiB9CiAgICAgCi1TdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJp
YUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGFyaWFMYWJl
bGVkQnkgPSBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCk7Ci0gICAgaWYgKCFhcmlhTGFiZWxlZEJ5
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGFyaWFMYWJlbGVkQnk7Ci0KLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IGdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7Ci0g
ICAgaWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwot
ICAgIAotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OndlYkFyZWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAogewogICAg
IC8vIFRoZSBXZWJBcmVhIGRlc2NyaXB0aW9uIHNob3VsZCBmb2xsb3cgdGhpcyBvcmRlcjoKQEAg
LTE0OTAsNDAgKzc4NSwxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNj
ZXNzCiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAg
ICAvLyBTdGF0aWMgdGV4dCBzaG91bGQgbm90IGhhdmUgYSBkZXNjcmlwdGlvbiwgaXQgc2hvdWxk
IG9ubHkgaGF2ZSBhIHN0cmluZ1ZhbHVlLgotICAgIGlmIChyb2xlVmFsdWUoKSA9PSBTdGF0aWNU
ZXh0Um9sZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIFN0cmluZyBhcmlh
RGVzY3JpcHRpb24gPSBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCFh
cmlhRGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYURlc2NyaXB0aW9u
OwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKGlz
SW1hZ2UoKSB8fCBpc0lucHV0SW1hZ2UoKSB8fCBpc05hdGl2ZUltYWdlKCkgfHwgaXNDYW52YXMo
KSkgewotICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0
QXR0cmlidXRlKGFsdEF0dHIpOwotICAgICAgICAgICAgaWYgKGFsdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICAgICAgcmV0dXJuIGFsdDsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSNpZiBFTkFCTEUoTUFUSE1MKQotICAgIGlmIChub2RlICYm
IG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlz
TWF0aE1MRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKE1hdGhNTE5hbWVz
OjphbHR0ZXh0QXR0cik7Ci0jZW5kaWYKLSAgICAKICAgICBpZiAoaXNXZWJBcmVhKCkpCiAgICAg
ICAgIHJldHVybiB3ZWJBcmVhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgCi0gICAg
Ly8gQW4gZWxlbWVudCdzIGRlc2NyaXB0aXZlIHRleHQgaXMgY29tcHJpc2VkIG9mIHRpdGxlKCkg
KHdoYXQncyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4pIGFuZCBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRp
b24oKSAob3RoZXIgZGVzY3JpcHRpdmUgdGV4dCkuCi0gICAgLy8gQm90aCBhcmUgdXNlZCB0byBn
ZW5lcmF0ZSB3aGF0IGEgc2NyZWVuIHJlYWRlciBzcGVha3MuCi0gICAgLy8gSWYgdGhpcyBwb2lu
dCBpcyByZWFjaGVkIChpLmUuIHRoZXJlJ3Mgbm8gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKSBh
bmQgdGhlcmUncyBubyB0aXRsZSgpLCB3ZSBzaG91bGQgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIHRp
dGxlIGF0dHJpYnV0ZS4KLSAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG5vcm1hbGx5IHVz
ZWQgYXMgaGVscCB0ZXh0IChiZWNhdXNlIGl0IGlzIGEgdG9vbHRpcCksIGJ1dCBpZiB0aGVyZSBp
cyBub3RoaW5nIGVsc2UgYXZhaWxhYmxlLCB0aGlzIHNob3VsZCBiZSB1c2VkIChhY2NvcmRpbmcg
dG8gQVJJQSkuCi0gICAgaWYgKHRpdGxlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHRpdGxlQXR0cik7Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KTsKIH0KIAogTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZGluZ0Jv
eFJlY3QoKSBjb25zdApAQCAtMTgxMCwxNiArMTA3NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6YXJpYUlzSGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdAot
ewotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gcGFyZW50T2JqZWN0KCk7
IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAo
IW9iamVjdC0+Y2FuSGF2ZUNoaWxkcmVuKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppc0FsbG93ZWRDaGlsZE9mVHJlZSgpIGNvbnN0CiB7CiAgICAgLy8gRGV0
ZXJtaW5lIGlmIHRoaXMgaXMgaW4gYSB0cmVlLiBJZiBzbywgd2UgYXBwbHkgc3BlY2lhbCBiZWhh
dmlvciB0byBtYWtlIGl0IHdvcmsgbGlrZSBhbiBBWE91dGxpbmUuCkBAIC0yMDU5LDI3ICsxMzE0
LDEwIEBAIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3UKIAogU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHQoKSBjb25zdAogewotICAgIC8vIElmIHRo
aXMgaXMgYSB1c2VyIGRlZmluZWQgc3RhdGljIHRleHQsIHVzZSB0aGUgYWNjZXNzaWJsZSBuYW1l
IGNvbXB1dGF0aW9uLgotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IFN0YXRpY1RleHRS
b2xlKQotICAgICAgICByZXR1cm4gYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAg
IAotICAgIGlmICghaXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
ICAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBwYXNzd29yZEZpZWxk
VmFsdWUoKTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNOYXRpdmVUZXh0
Q29udHJvbCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVy
KS0+dGV4dEZvcm1Db250cm9sRWxlbWVudCgpLT52YWx1ZSgpOwotCi0gICAgaWYgKCFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pbm5lclRleHQoKTsKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHQoKTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKQEAgLTIyMzcsMTggKzE0NzUsNiBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRBCiAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSwgInRydWUiKTsKIH0K
ICAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0
Ci17Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX3JlcXVpcmVk
QXR0ciksICJ0cnVlIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIE5vZGUqIG4g
PSBub2RlKCk7Ci0gICAgaWYgKG4gJiYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG4pLT5yZXF1aXJlZCgpOwotICAg
IAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojppc1NlbGVjdGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0yMzQ1LDI5
ICsxNTcxLDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1cwogICAg
IH0KIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5U3Rl
cChib29sIGluY3JlYXNlKQotewotICAgIGZsb2F0IHN0ZXAgPSBzdGVwVmFsdWVGb3JSYW5nZSgp
OwotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOwotICAgIAotICAgIHZhbHVlICs9
IGluY3JlYXNlID8gc3RlcCA6IC1zdGVwOwotCi0gICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIo
dmFsdWUpKTsKLSAgICAKLSAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9y
ZW5kZXJlciwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwotfQotICAgIAot
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5UGVyY2VudChmbG9h
dCBwZXJjZW50Q2hhbmdlKQotewotICAgIGZsb2F0IHJhbmdlID0gbWF4VmFsdWVGb3JSYW5nZSgp
IC0gbWluVmFsdWVGb3JSYW5nZSgpOwotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgp
OwotICAgIAotICAgIHZhbHVlICs9IHJhbmdlICogKHBlcmNlbnRDaGFuZ2UgLyAxMDApOwotICAg
IHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0gICAgCi0gICAgYXhPYmplY3RDYWNo
ZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1fcmVuZGVyZXIsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVD
aGFuZ2VkLCB0cnVlKTsKLX0KLQogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRT
ZWxlY3RlZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWxlY3RlZFJvd3MpCiB7
CiAgICAgLy8gU2V0dGluZyBzZWxlY3RlZCBvbmx5IG1ha2VzIHNlbnNlIGluIHRyZWVzIGFuZCB0
YWJsZXMgKGFuZCB0cmVlLXRhYmxlcykuCkBAIC0yNDI3LDIwICsxNjMwLDYgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0cwogICAgIHJldHVybiAhYXJpYU93bnMuaXNF
bXB0eSgpOwogfQogICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0VuYWJs
ZWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICAKLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfZGlzYWJsZWRBdHRyKSwgInRydWUiKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVy
LT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKLX0KLQogUmVuZGVyVmlldyogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dG9wUmVuZGVyZXIoKSBjb25zdAogewogICAgIERvY3VtZW50KiB0b3BE
b2MgPSB0b3BEb2N1bWVudCgpOwpAQCAtMzEzOCwzNSArMjMyNyw2IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNEZXNjZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBJZiBpdCdzIGEgY29udHJvbCwgaXQncyBub3QgZ2VuZXJpYy4KLSAg
ICBpZiAoaXNDb250cm9sKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIGl0
IGhhcyBhbiBhcmlhIHJvbGUsIGl0J3Mgbm90IGdlbmVyaWMuCi0gICAgaWYgKG1fYXJpYVJvbGUg
IT0gVW5rbm93blJvbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBj
b250ZW50IGVkaXRhYmxlIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhpcyBlbGVtZW50LCB0aGF0J3Mg
dGhlIHJlYXNvbgotICAgIC8vIGl0J3MgZm9jdXNhYmxlLCBhbmQgZXhpc3RpbmcgbG9naWMgc2hv
dWxkIGhhbmRsZSB0aGlzIGNhc2UgYWxyZWFkeSAtIHNvIGl0J3Mgbm90IGEKLSAgICAvLyBnZW5l
cmljIGZvY3VzYWJsZSBlbGVtZW50LgotICAgIGlmIChoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1
dGVTZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHdlYiBhcmVhIGFu
ZCBib2R5IGVsZW1lbnQgYXJlIGJvdGggZm9jdXNhYmxlLCBidXQgZXhpc3RpbmcgbG9naWMgaGFu
ZGxlcyB0aGVzZQotICAgIC8vIGNhc2VzIGFscmVhZHksIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5j
bHVkZSB0aGVtIGhlcmUuCi0gICAgaWYgKHJvbGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUo
Ym9keVRhZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAogQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJt
aW5lQWNjZXNzaWJpbGl0eVJvbGUoKQogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTM0MzUs
MjggKzI1OTUsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbnRlbnRDCiAg
ICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihyZW5kZXJQYXJlbnQsIEFYT2JqZWN0
Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKICAgICB9CiB9Ci0gICAgCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gRWxlbWVu
dHMgdGhhdCBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4KLSAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgp
KSB7Ci0gICAgY2FzZSBJbWFnZVJvbGU6Ci0gICAgY2FzZSBCdXR0b25Sb2xlOgotICAgIGNhc2Ug
UG9wVXBCdXR0b25Sb2xlOgotICAgIGNhc2UgQ2hlY2tCb3hSb2xlOgotICAgIGNhc2UgUmFkaW9C
dXR0b25Sb2xlOgotICAgIGNhc2UgVGFiUm9sZToKLSAgICBjYXNlIFN0YXRpY1RleHRSb2xlOgot
ICAgIGNhc2UgTGlzdEJveE9wdGlvblJvbGU6Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsZWFyQ2hpbGRyZW4o
KQogewpAQCAtMzU5NCw3ICsyNzMyLDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YWRkQ2hpbGQKICAgICB1cGRhdGVBdHRhY2htZW50Vmlld1BhcmVudHMoKTsKICNlbmRpZgog
fQotICAgICAgICAKKworYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRy
ZW4oKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphcmlhTGl2ZVJlZ2lvblN0YXR1cygpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIGxpdmVSZWdpb25TdGF0dXNBc3NlcnRpdmUsICgiYXNzZXJ0
aXZlIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw0NCArNjYsMTYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGluaXQoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNBbmNob3IoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSGVh
ZGluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0xpbmsoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNJbWFnZUJ1dHRvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTmF0aXZlSW1hZ2UoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
TmF0aXZlVGV4dENvbnRyb2woKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVs
ZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1dlYkFyZWEoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNGaWxlVXBsb2FkQnV0dG9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
SW5wdXRJbWFnZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyZXNzSW5kaWNhdG9y
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGlzTWVudVJlbGF0ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW51KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTWVudUJhcigpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc01lbnVCdXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW51SXRlbSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2woKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNGaWVsZHNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0dyb3VwKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzU2VsZWN0ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2VkKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0hvdmVyZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT2ZmU2Ny
ZWVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJlc3NlZCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVW52aXNp
dGVkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVmlzaXRlZCgpIGNvbnN0OyAgICAgICAg
Ci0gICAgdmlydHVhbCBib29sIGlzUmVxdWlyZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNMaW5rZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQm9sZEZvbnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0OwpAQCAtMTIzLDE1ICs5NSw2
IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRCYXNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGludCBoZWFkaW5nTGV2ZWwoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9yUmFk
aW9WYWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGZsb2F0IG1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IG1p
blZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHN0ZXBWYWx1ZUZvclJh
bmdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFJh
ZGlvQnV0dG9uKCk7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFRh
Ykl0ZW0oKTsKICAgICB2aXJ0dWFsIGludCBsYXlvdXRDb3VudCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgZG91YmxlIGVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0OwogICAgIApAQCAtMTU2
LDEyICsxMTksOCBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcm9v
dCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhpdCB0ZXN0LgogICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0
OwotICAgIEVsZW1lbnQqIG1vdXNlQnV0dG9uTGlzdGVuZXIoKSBjb25zdDsKICAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlld0lmUmVuZGVyVmlldygpIGNvbnN0OwogICAgIHZpcnR1YWwgRWxlbWVudCog
YW5jaG9yRWxlbWVudCgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1lbnVGb3JN
ZW51QnV0dG9uKCkgY29uc3Q7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWVudUJ1dHRvbkZv
ck1lbnUoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgYm91bmRpbmdCb3hS
ZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7
CkBAIC0xODQsOCArMTQzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGxhaW5UZXh0UmFuZ2Ug
c2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBhcmlh
RGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBoZWxwVGV4dCgp
IGNvbnN0OwpAQCAtMTk5LDcgKzE1Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdpZGdldCog
d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RG9j
dW1lbnRMaW5rcyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKICAgICB2aXJ0dWFsIEZy
YW1lVmlldyogZG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IGhpZXJhcmNoaWNhbExldmVsKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDaGls
ZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CkBA
IC0yMDgsMTAgKzE2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRU
ZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlVmFsdWVC
eVBlcmNlbnQoZmxvYXQgcGVyY2VudENoYW5nZSk7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVt
ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudCgpOwogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKQEAgLTI2
Myw3ICsyMTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwog
ICAgIAogICAgIHZvaWQgc2V0UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsg
bV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9Ci0gICAgdm9pZCBhcmlhTGFiZWxlZEJ5RWxlbWVudHMo
VmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpIGNvbnN0OwogICAgIGJvb2wgbmVlZHNUb1VwZGF0
ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbkRpcnR5OyB9CiAgICAgU2Nyb2xs
YWJsZUFyZWEqIGdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMjc2LDcgKzIyOCw2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhcmlhTGlzdGJveFNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJik7CiAgICAgdm9pZCBhcmlhTGlzdGJveFZpc2libGVDaGlsZHJlbihB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKICAgICBib29sIGFyaWFJc0hpZGRlbigpIGNv
bnN0OwotICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdDsKICAgICBi
b29sIGlzQWxsb3dlZENoaWxkT2ZUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNUZXh0QWx0ZXJu
YXRpdmUoKSBjb25zdDsKICAgICBTdHJpbmcgcG9zaXRpb25hbERlc2NyaXB0aW9uRm9yTVNBQSgp
IGNvbnN0OwpAQCAtMjg1LDEzICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbm9kZUlzVGV4
dENvbnRyb2woY29uc3QgTm9kZSopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Rv
VXBkYXRlQ2hpbGRyZW4oKSB7IG1fY2hpbGRyZW5EaXJ0eSA9IHRydWU7IH0KIAotICAgIEVsZW1l
bnQqIG1lbnVFbGVtZW50Rm9yTWVudUJ1dHRvbigpIGNvbnN0OwotICAgIEVsZW1lbnQqIG1lbnVJ
dGVtRWxlbWVudEZvck1lbnUoKSBjb25zdDsKLQogICAgIGJvb2wgaXNUYWJJdGVtU2VsZWN0ZWQo
KSBjb25zdDsKLSAgICB2b2lkIGFsdGVyU2xpZGVyVmFsdWUoYm9vbCBpbmNyZWFzZSk7Ci0gICAg
dm9pZCBjaGFuZ2VWYWx1ZUJ5U3RlcChib29sIGluY3JlYXNlKTsKLSAgICBib29sIGlzTmF0aXZl
Q2hlY2tib3hPclJhZGlvKCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjaGVja2JveE9yUmFkaW9S
ZWN0KCkgY29uc3Q7CiAgICAgdm9pZCBhZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGxpbmtlZFVJRWxlbWVudHMpIGNvbnN0OwogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdDsKQEAgLTMwMSw4ICsy
NDYsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyUGFyZW50T2JqZWN0KCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0J3Mg
Zm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5vdCBhIGNv
bnRyb2wgb3IgQVJJQSBjb250cm9sLgotICAgIGJvb2wgaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVu
dCgpIGNvbnN0OwotICAgIGJvb2wgaXNBUklBUmFuZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgYWRk
VGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKQEAg
LTMxNyw5ICsyNjAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgZWxlbWVudEF0dHJpYnV0ZVZhbHVl
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIHNldEVsZW1lbnRBdHRyaWJ1
dGVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCk7CiAgICAgCi0gICAgU3RyaW5nIGFj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1l
bnRzKSBjb25zdDsKLSAgICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVu
dCo+JiBlbGVtZW50cywgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIFN0cmluZyBh
cmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgU3RyaW5nIHdlYkFyZWFB
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgRVNwZWFrIHNw
ZWFrUHJvcGVydHkoKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODEyMCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA5
LTEwICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFY
OiBSZWZhY3RvciBtb3N0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgY29kZSBpbnRvIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NjMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5ldyB0ZXN0IHRoYXQgY29tcGFyZXMgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVz
IG9mIGxvdHMgb2YgZWxlbWVudHMKKyAgICAgICAgaW5zaWRlIGFuZCBvdXRzaWRlIG9mIGNhbnZh
cyBmYWxsYmFjayBjb250ZW50LCB0byBtYWtlIHN1cmUgdGhleSdyZQorICAgICAgICB0aGUgc2Ft
ZS4gRGVzaWduZWQgdG8gYmUgY3Jvc3MtcGxhdGZvcm0gYmVjYXVzZSBpdCBqdXN0IGFzc2VydHMg
dGhlCisgICAgICAgIGF0dHJpYnV0ZXMgYXJlIHRoZSBzYW1lIGluIGJvdGggY29udGV4dHMsIHJh
dGhlciB0aGFuIGV4cGVjdGluZyBzcGVjaWZpYworICAgICAgICB2YWx1ZXMuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTIu
aHRtbDogQWRkZWQuCisKIDIwMTItMDktMTAgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBzdHJheSBDaGFuZ2Vsb2cgbWVzc2FnZS4KSW5kZXg6IExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2st
Y29udGVudC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzc2IEBACitMaW5rICBCdXR0b24gIEJ1dHRvbiAgQnV0dG9uICAgICAg
ICAgICAgICAgICAKK0ZvY3VzYWJsZQorSGVhZGluZworCitBUklBIGJ1dHRvbgorQVJJQSBkaXNh
YmxlZCBidXR0b24KK0FSSUEgZW5hYmxlZCBidXR0b24KK0FSSUEgcmVxdWlyZWQgYnV0dG9uCitB
UklBIHRvZ2dsZSBidXR0b24KK0FSSUEgbGluaworVGhpcyB0ZXN0cyBhIG51bWJlciBvZiBkaWZm
ZXJlbnQgZWxlbWVudHMgaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQgdG8gbWFrZSBzdXJlIHRo
ZWlyIGFjY2Vzc2libGUgYXR0cmlidXRlcyBhcmUgZXNzZW50aWFsbHkgaWRlbnRpY2FsIHRvIHRo
ZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG91dHNpZGUgb2YgY2FudmFzIGZhbGxiYWNrIGNvbnRl
bnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitsaW5rMQorUEFTUyBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2xpbmsyCitQQVNTIGRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUg
aXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4
RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVt
ZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVz
Y3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0
CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQor
UEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBh
eEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxl
bWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIu
aW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVl
IGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVs
ZW1lbnQxLm1heFZhbHVlCisKK2J1dHRvbjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBlbGVtZW50MSBpcyB0cnVlCitidXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
PT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5y
b2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURl
c2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFT
UyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1Mg
YXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVu
dDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQy
LmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVx
dWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2Vk
IGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhF
bGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEu
bWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVl
CisKK2xhYmVsZWQtYnV0dG9uMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1l
bnQxIGlzIHRydWUKK2xhYmVsZWQtYnV0dG9uMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50
ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEu
cm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVE
ZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BB
U1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNT
IGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1l
bnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50
Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1Jl
cXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tl
ZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4
RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQx
Lm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1
ZQorCitidXR0b24td2l0aC10aXRsZTEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBl
bGVtZW50MSBpcyB0cnVlCitidXR0b24td2l0aC10aXRsZTIKK1BBU1MgZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVs
ZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50
MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRp
dGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlv
bgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1Mg
YXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4
RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVu
dDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5p
c0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1
ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhF
bGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEu
bWF4VmFsdWUKKwordGV4dDEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50
MSBpcyB0cnVlCit0ZXh0MgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQy
IGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBh
eEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgor
UEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50
Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIu
aGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1Zh
bHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQg
aXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4
RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1l
bnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50
VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQ
QVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitjaGVja2Jv
eDEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitjaGVj
a2JveDIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQ
QVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5y
b2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVt
ZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRp
b24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlz
IGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVs
ZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVu
dDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlz
UmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNr
ZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNT
IGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1l
bnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworbnVtYmVyMQorUEFTUyBkb2N1
bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK251bWJlcjIKK1BBU1MgZG9j
dW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIu
cm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24g
aXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBh
eEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50
MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVs
cFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1Zh
bHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQ
QVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVt
ZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWlu
VmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlz
IGF4RWxlbWVudDEubWF4VmFsdWUKKworcmFkaW8xCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorcmFkaW8yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50
MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9s
ZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQor
UEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BB
U1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxl
bWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1l
bnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlz
UmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVj
a2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMg
YXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVu
dDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZh
bHVlCisKK3NsaWRlcjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBp
cyB0cnVlCitzbGlkZXIyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIg
aXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4
RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQ
QVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQy
LmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5o
ZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFs
dWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBp
cyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhF
bGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVu
dDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRW
YWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BB
U1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK3N1Ym1pdDEK
K1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitzdWJtaXQy
CitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBh
eEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURl
c2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIu
dGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlz
IGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVs
ZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50
MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlz
RW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVp
cmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQ
QVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVs
ZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5t
YXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2NvbWJvYm94MQorUEFTUyBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2NvbWJvYm94MgorUEFTUyBkb2N1
bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5y
b2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBp
cyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4
RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQx
LmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxw
VGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFs
dWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BB
U1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBh
eEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1l
bnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5W
YWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMg
YXhFbGVtZW50MS5tYXhWYWx1ZQorCitsaXN0Ym94MQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2xpc3Rib3gyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVt
ZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEu
cm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRs
ZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24K
K1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4
RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVs
ZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQy
LmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXND
aGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUg
aXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxl
bWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1h
eFZhbHVlCisKK3RleHRhcmVhMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1l
bnQxIGlzIHRydWUKK3RleHRhcmVhMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVs
ZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQor
UEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlw
dGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhF
bGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxl
bWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0
cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0Vu
YWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVk
IGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBh
eEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVu
dDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZh
bHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitm
b2N1c2FibGUxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1
ZQorZm9jdXNhYmxlMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlz
IHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVs
ZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFT
UyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5k
ZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVs
cFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVl
IGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMg
YXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxl
bWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQx
LmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFs
dWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNT
IGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitoZWFkaW5nMQor
UEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2hlYWRpbmcy
CitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBh
eEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURl
c2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIu
dGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlz
IGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVs
ZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50
MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlz
RW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVp
cmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQ
QVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVs
ZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5t
YXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2FyaWEtYnV0dG9uMQorUEFTUyBkb2N1
bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2FyaWEtYnV0dG9uMgorUEFT
UyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVt
ZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlw
dGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxl
IGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVs
ZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50
MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3Ry
aW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJs
ZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAor
UEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBh
eEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50
Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFs
dWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCithcmlhLWRpc2FibGVkYnV0dG9uMQorUEFTUyBk
b2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2FyaWEtZGlzYWJsZWRi
dXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQor
UEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIu
cm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxl
bWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0
aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBp
cyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhF
bGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1l
bnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5p
c1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVj
a2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFT
UyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVt
ZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2FyaWEtZW5hYmxlZGJ1dHRv
bjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCithcmlh
LWVuYWJsZWRidXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIg
aXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4
RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQ
QVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQy
LmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5o
ZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFs
dWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBp
cyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhF
bGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVu
dDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRW
YWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BB
U1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK2FyaWEtcmVx
dWlyZWRidXR0b24xCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMg
dHJ1ZQorYXJpYS1yZXF1aXJlZGJ1dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJv
bGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVz
Y3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNT
IGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBh
eEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50
Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIu
aXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1
aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQg
aXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVs
ZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5t
aW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUK
KworYXJpYS10b2dnbGVidXR0b24xCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxl
bWVudDEgaXMgdHJ1ZQorYXJpYS10b2dnbGVidXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVt
ZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEu
cm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRs
ZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24K
K1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4
RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVs
ZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQy
LmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXND
aGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUg
aXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxl
bWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1h
eFZhbHVlCisKK2FyaWEtbGluazEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVt
ZW50MSBpcyB0cnVlCithcmlhLWxpbmsyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0g
ZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xl
CitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2Ny
aXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBh
eEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhF
bGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIu
c3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlz
RW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWly
ZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlz
IGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVt
ZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWlu
VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFj
ay1jb250ZW50LTItZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNr
LWNvbnRlbnQtMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
Y2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTE2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorCis8ZGl2PgorICA8YSBpZD0ibGluazEiIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24g
aWQ9ImJ1dHRvbjEiPkJ1dHRvbjwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJsYWJlbGVkLWJ1dHRv
bjEiIGFyaWEtbGFiZWw9IkxhYmVsIj5CdXR0b248L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0iYnV0
dG9uLXdpdGgtdGl0bGUxIiB0aXRsZT0iVGl0bGUiPkJ1dHRvbjwvYnV0dG9uPgorICA8aW5wdXQg
aWQ9InRleHQxIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iVmFsdWUiPgorICA8aW5wdXQgaWQ9ImNoZWNr
Ym94MSIgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ+CisgIDxpbnB1dCBpZD0ibnVtYmVyMSIgdHlw
ZT0ibnVtYmVyIiB2YWx1ZT0iMTIzIj4KKyAgPGlucHV0IGlkPSJyYWRpbzEiIHR5cGU9InJhZGlv
IiBjaGVja2VkPgorICA8aW5wdXQgaWQ9InNsaWRlcjEiIHR5cGU9InJhbmdlIiBtaW49IjEiIG1h
eD0iMTAiIHZhbHVlPSI1Ij4KKyAgPGlucHV0IGlkPSJzdWJtaXQxIiB0eXBlPSJzdWJtaXQiPgor
ICA8c2VsZWN0IGlkPSJjb21ib2JveDEiPjxvcHRpb24+MTxvcHRpb24gc2VsZWN0ZWQ+Mjwvc2Vs
ZWN0PgorICA8c2VsZWN0IG11bHRpcGxlIGlkPSJsaXN0Ym94MSI+PG9wdGlvbj4xPG9wdGlvbiBz
ZWxlY3RlZD4yPC9zZWxlY3Q+CisgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWExIj5UZXh0YXJlYTwv
dGV4dGFyZWE+CisgIDxkaXYgaWQ9ImZvY3VzYWJsZTEiIHRhYmluZGV4PSIwIj5Gb2N1c2FibGU8
L2Rpdj4KKyAgPGg1IGlkPSJoZWFkaW5nMSIgdGFiaW5kZXg9IjAiPkhlYWRpbmc8L2g1PgorICA8
ZGl2IGlkPSJhcmlhLWJ1dHRvbjEiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iPkFSSUEgYnV0
dG9uPC9kaXY+CisgIDxkaXYgaWQ9ImFyaWEtZGlzYWJsZWRidXR0b24xIiB0YWJpbmRleD0iMCIg
cm9sZT0iYnV0dG9uIiBhcmlhLWRpc2FibGVkPSJ0cnVlIj5BUklBIGRpc2FibGVkIGJ1dHRvbjwv
ZGl2PgorICA8ZGl2IGlkPSJhcmlhLWVuYWJsZWRidXR0b24xIiB0YWJpbmRleD0iMCIgcm9sZT0i
YnV0dG9uIiBhcmlhLWRpc2FibGVkPSJmYWxzZSI+QVJJQSBlbmFibGVkIGJ1dHRvbjwvZGl2Pgor
ICA8ZGl2IGlkPSJhcmlhLXJlcXVpcmVkYnV0dG9uMSIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRv
biIgYXJpYS1yZXF1aXJlZD0idHJ1ZSI+QVJJQSByZXF1aXJlZCBidXR0b248L2Rpdj4KKyAgPGRp
diBpZD0iYXJpYS10b2dnbGVidXR0b24xIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBhcmlh
LXByZXNzZWQ9ImZhbHNlIj5BUklBIHRvZ2dsZSBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJp
YS1saW5rMSIgdGFiaW5kZXg9IjAiIHJvbGU9ImxpbmsiPkFSSUEgbGluazwvZGl2PgorPC9kaXY+
CisKKzxjYW52YXMgaWQ9Im15Q2FudmFzIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCI+CisgIDxh
IGlkPSJsaW5rMiIgaHJlZj0iIyI+TGluazwvYT4KKyAgPGJ1dHRvbiBpZD0iYnV0dG9uMiI+QnV0
dG9uPC9idXR0b24+CisgIDxidXR0b24gaWQ9ImxhYmVsZWQtYnV0dG9uMiIgYXJpYS1sYWJlbD0i
TGFiZWwiPkJ1dHRvbjwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJidXR0b24td2l0aC10aXRsZTIi
IHRpdGxlPSJUaXRsZSI+QnV0dG9uPC9idXR0b24+CisgIDxpbnB1dCBpZD0idGV4dDIiIHR5cGU9
InRleHQiIHZhbHVlPSJWYWx1ZSI+CisgIDxpbnB1dCBpZD0iY2hlY2tib3gyIiB0eXBlPSJjaGVj
a2JveCIgY2hlY2tlZD4KKyAgPGlucHV0IGlkPSJudW1iZXIyIiB0eXBlPSJudW1iZXIiIHZhbHVl
PSIxMjMiPgorICA8aW5wdXQgaWQ9InJhZGlvMiIgdHlwZT0icmFkaW8iIGNoZWNrZWQ+CisgIDxp
bnB1dCBpZD0ic2xpZGVyMiIgdHlwZT0icmFuZ2UiIG1pbj0iMSIgbWF4PSIxMCIgdmFsdWU9IjUi
PgorICA8aW5wdXQgaWQ9InN1Ym1pdDIiIHR5cGU9InN1Ym1pdCI+CisgIDxzZWxlY3QgaWQ9ImNv
bWJvYm94MiI+PG9wdGlvbj4xPG9wdGlvbiBzZWxlY3RlZD4yPC9zZWxlY3Q+CisgIDxzZWxlY3Qg
bXVsdGlwbGUgaWQ9Imxpc3Rib3gyIj48b3B0aW9uPjE8b3B0aW9uIHNlbGVjdGVkPjI8L3NlbGVj
dD4KKyAgPHRleHRhcmVhIGlkPSJ0ZXh0YXJlYTIiPlRleHRhcmVhPC90ZXh0YXJlYT4KKyAgPGRp
diBpZD0iZm9jdXNhYmxlMiIgdGFiaW5kZXg9IjAiPkZvY3VzYWJsZTwvZGl2PgorICA8aDUgaWQ9
ImhlYWRpbmcyIiB0YWJpbmRleD0iMCI+SGVhZGluZzwvaDU+CisgIDxkaXYgaWQ9ImFyaWEtYnV0
dG9uMiIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiI+QVJJQSBidXR0b248L2Rpdj4KKyAgPGRp
diBpZD0iYXJpYS1kaXNhYmxlZGJ1dHRvbjIiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFy
aWEtZGlzYWJsZWQ9InRydWUiPkFSSUEgZGlzYWJsZWQgYnV0dG9uPC9kaXY+CisgIDxkaXYgaWQ9
ImFyaWEtZW5hYmxlZGJ1dHRvbjIiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFyaWEtZGlz
YWJsZWQ9ImZhbHNlIj5BUklBIGVuYWJsZWQgYnV0dG9uPC9kaXY+CisgIDxkaXYgaWQ9ImFyaWEt
cmVxdWlyZWRidXR0b24yIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBhcmlhLXJlcXVpcmVk
PSJ0cnVlIj5BUklBIHJlcXVpcmVkIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlkPSJhcmlhLXRvZ2ds
ZWJ1dHRvbjIiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFyaWEtcHJlc3NlZD0iZmFsc2Ui
PkFSSUEgdG9nZ2xlIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlkPSJhcmlhLWxpbmsyIiB0YWJpbmRl
eD0iMCIgcm9sZT0ibGluayI+QVJJQSBsaW5rPC9kaXY+Cis8L2NhbnZhcz4KKworPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgYSBudW1i
ZXIgb2YgZGlmZmVyZW50IGVsZW1lbnRzIGluIGNhbnZhcyBmYWxsYmFjayBjb250ZW50IHRvIG1h
a2Ugc3VyZSB0aGVpciBhY2Nlc3NpYmxlIGF0dHJpYnV0ZXMgYXJlIGVzc2VudGlhbGx5IGlkZW50
aWNhbCB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvdXRzaWRlIG9mIGNhbnZhcyBmYWxs
YmFjayBjb250ZW50LiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworCisgICAgZnVuY3Rpb24gY2hlY2soaWQxLCBpZDIpIHsKKyAgICAgICAgZGVidWcoaWQxKTsK
KyAgICAgICAgd2luZG93LmVsZW1lbnQxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQxKTsK
KyAgICAgICAgZWxlbWVudDEuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmUoImRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEiLCAidHJ1ZSIpOworICAgICAgICB3aW5kb3cuYXhFbGVt
ZW50MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAg
IGRlYnVnKGlkMik7CisgICAgICAgIHdpbmRvdy5lbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkMik7CisgICAgICAgIGVsZW1lbnQyLmZvY3VzKCk7CisgICAgICAgIHNob3VsZEJl
KCJkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIiwgInRydWUiKTsKKyAgICAgICAg
d2luZG93LmF4RWxlbWVudDIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dDsKKworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5yb2xlIiwgImF4RWxlbWVudDEucm9s
ZSIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24iLCAiYXhF
bGVtZW50MS5yb2xlRGVzY3JpcHRpb24iKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIu
dGl0bGUiLCAiYXhFbGVtZW50MS50aXRsZSIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50
Mi5kZXNjcmlwdGlvbiIsICJheEVsZW1lbnQxLmRlc2NyaXB0aW9uIik7CisgICAgICAgIHNob3Vs
ZEJlKCJheEVsZW1lbnQyLmhlbHBUZXh0IiwgImF4RWxlbWVudDEuaGVscFRleHQiKTsKKyAgICAg
ICAgc2hvdWxkQmUoImF4RWxlbWVudDIuc3RyaW5nVmFsdWUiLCAiYXhFbGVtZW50MS5zdHJpbmdW
YWx1ZSIpOworICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5pc0VuYWJsZWQiLCAiYXhFbGVt
ZW50MS5pc0VuYWJsZWQiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIuaXNSZXF1aXJl
ZCIsICJheEVsZW1lbnQxLmlzUmVxdWlyZWQiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVu
dDIuaXNDaGVja2VkIiwgImF4RWxlbWVudDEuaXNDaGVja2VkIik7CisgICAgICAgIHNob3VsZEJl
KCJheEVsZW1lbnQyLmludFZhbHVlIiwgImF4RWxlbWVudDEuaW50VmFsdWUiKTsKKyAgICAgICAg
c2hvdWxkQmUoImF4RWxlbWVudDIubWluVmFsdWUiLCAiYXhFbGVtZW50MS5taW5WYWx1ZSIpOwor
ICAgICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5tYXhWYWx1ZSIsICJheEVsZW1lbnQxLm1heFZh
bHVlIik7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICB9CisKKyAgICBjaGVjaygibGluazEiLCAi
bGluazIiKTsKKyAgICBjaGVjaygiYnV0dG9uMSIsICJidXR0b24yIik7CisgICAgY2hlY2soImxh
YmVsZWQtYnV0dG9uMSIsICJsYWJlbGVkLWJ1dHRvbjIiKTsKKyAgICBjaGVjaygiYnV0dG9uLXdp
dGgtdGl0bGUxIiwgImJ1dHRvbi13aXRoLXRpdGxlMiIpOworICAgIGNoZWNrKCJ0ZXh0MSIsICJ0
ZXh0MiIpOworICAgIGNoZWNrKCJjaGVja2JveDEiLCAiY2hlY2tib3gyIik7CisgICAgY2hlY2so
Im51bWJlcjEiLCAibnVtYmVyMiIpOworICAgIGNoZWNrKCJyYWRpbzEiLCAicmFkaW8yIik7Cisg
ICAgY2hlY2soInNsaWRlcjEiLCAic2xpZGVyMiIpOworICAgIGNoZWNrKCJzdWJtaXQxIiwgInN1
Ym1pdDIiKTsKKyAgICBjaGVjaygiY29tYm9ib3gxIiwgImNvbWJvYm94MiIpOworICAgIGNoZWNr
KCJsaXN0Ym94MSIsICJsaXN0Ym94MiIpOworICAgIGNoZWNrKCJ0ZXh0YXJlYTEiLCAidGV4dGFy
ZWEyIik7CisgICAgY2hlY2soImZvY3VzYWJsZTEiLCAiZm9jdXNhYmxlMiIpOworICAgIGNoZWNr
KCJoZWFkaW5nMSIsICJoZWFkaW5nMiIpOworICAgIGNoZWNrKCJhcmlhLWJ1dHRvbjEiLCAiYXJp
YS1idXR0b24yIik7CisgICAgY2hlY2soImFyaWEtZGlzYWJsZWRidXR0b24xIiwgImFyaWEtZGlz
YWJsZWRidXR0b24yIik7CisgICAgY2hlY2soImFyaWEtZW5hYmxlZGJ1dHRvbjEiLCAiYXJpYS1l
bmFibGVkYnV0dG9uMiIpOworICAgIGNoZWNrKCJhcmlhLXJlcXVpcmVkYnV0dG9uMSIsICJhcmlh
LXJlcXVpcmVkYnV0dG9uMiIpOworICAgIGNoZWNrKCJhcmlhLXRvZ2dsZWJ1dHRvbjEiLCAiYXJp
YS10b2dnbGVidXR0b24yIik7CisgICAgY2hlY2soImFyaWEtbGluazEiLCAiYXJpYS1saW5rMiIp
OworfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50
LTIuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163629</attachid>
            <date>2012-09-12 07:59:34 -0700</date>
            <delta_ts>2012-09-12 08:49:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96323-20120912075947.patch</filename>
            <type>text/plain</type>
            <size>104348</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODMwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxMi0wOS0xMiAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogUmVmYWN0b3Ig
bW9zdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IGNvZGUgaW50byBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTYzMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGlzIGxhcmdlLCBidXQgaXQncyBhdCBsZWFzdCA3NSUgY3V0LWFuZC1wYXN0ZS4K
KworICAgICAgICBBbGwgaXQgZG9lcyBpcyBtb3ZlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGxh
cmdlIGNodW5rIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgbWV0aG9kcyB0
byBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdAorICAgICAgICBpbnN0ZWFkLiBUaGlzIGFsbG93cyB0
aGVtIHRvIG9wZXJhdGUgb24gZWxlbWVudHMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMsIHN1
Y2ggYXMgdGhvc2UgaW4gY2FudmFzIGZhbGxiYWNrIGNvbnRlbnQuIEl0IGFsc28KKyAgICAgICAg
bW92ZXMgdXMgdG93YXJkcyB0aGUgZ29hbCB3aGVyZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
CisgICAgICAgIG9ubHkgaGFzIGNvZGUgdGhhdCdzIHNwZWNpZmljIHRvIHJlbmRlcmVycyBhbmQg
bm90IGp1c3Qgbm9kZXMuCisKKyAgICAgICAgSGFsZiBvZiB0aGUgbWV0aG9kcyBjdXQgYW5kIHBh
c3RlIHdpdGggZXNzZW50aWFsbHkgbm8gY2hhbmdlcy4KKyAgICAgICAgU29tZSByZXF1aXJlZCBq
dXN0IHRpbnkgY2hhbmdlcyB0byBhY2Nlc3MgYW4gYXR0cmlidXRlIHZpYSB0aGUKKyAgICAgICAg
ZWxlbWVudCAoZS5nLiBIVE1MU2VsZWN0RWxlbWVudCkgcmF0aGVyIHRoYW4gaXRzIGFzc29jaWF0
ZWQKKyAgICAgICAgcmVuZGVyZXIgKGUuZy4gUmVuZGVyTWVudUxpc3QpLiBBIGZldyB3ZXJlIGEg
bGl0dGxlIHRyaWNraWVyLAorICAgICAgICBhcyB0aGUgYmVoYXZpb3IgbmVlZHMgdG8gYmUgc2xp
Z2h0bHkgZGlmZmVyZW50IHdoZW4gdGhlcmUncyBhCisgICAgICAgIHJlbmRlcmVyLiBJbiB0aG9z
ZSBsYXN0IGNhc2VzLCBhcyBtdWNoIG9mIHRoZSBjb2RlIGFzIHBvc3NpYmxlIGlzCisgICAgICAg
IGluIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGFuZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
IG92ZXJyaWRlcworICAgICAgICBpdCBhcyBuZWNlc3NhcnkuCisKKyAgICAgICAgVGVzdDogYWNj
ZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJhY2stY29udGVudC0yLmh0bWwKKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNXZWJBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0FuY2hvcik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVUZXh0Q29udHJvbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNOYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNQYXNzd29yZEZpZWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0lucHV0SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJvZ3Jlc3NJbmRp
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzU2xp
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVS
ZWxhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01l
bnUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTWVudUJh
cik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2
ZUNoZWNrYm94T3JSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzUHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc0hvdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpoZWFkaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnZhbHVlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQVJJQVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzdGVwVmFsdWVGb3JSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIZWFkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0xpbmspOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzQ29udHJvbCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNGaWVsZHNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNHcm91cCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRSYWRpb0J1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0ZWRUYWJJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2Jv
eE9yUmFkaW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFsdGVyU2xpZGVyVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluY3JlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGVjcmVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5U3RlcCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hhbmdlVmFsdWVC
eVBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
R2VuZXJpY0ZvY3VzYWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmxhYmVsRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpzaWJsaW5nV2l0aEFyaWFSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjptZW51RWxlbWVudEZvck1lbnVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVGb3JNZW51QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51SXRlbUVsZW1lbnRG
b3JNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptZW51
QnV0dG9uRm9yTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aGllcmFyY2hpY2FsTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3Np
YmxlTmFtZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50c0Zyb21BdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFyaWFMYWJlbGVkQnlFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUxh
YmVsZWRCeUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpub2RlKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpoZWxwVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4pOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJPYmplY3QpOgorCiAyMDEyLTA5LTEyICBQYXRyaWNrIEdh
bnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBsYXN0IGNhbGwg
dG8gbnVtYmVyVG9TdHJpbmcoKSBmcm9tIFdlYkNvcmUgY29kZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5j
cHAJKHJldmlzaW9uIDEyODMwMykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksMTIgKzI1OSwy
NCBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjCiAgICAgICAgICAg
ICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOwogICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvblJvbGVUeXBlKCk7CisgICAgICAgIGlmIChp
bnB1dC0+aXNSYW5nZUNvbnRyb2woKSkKKyAgICAgICAgICAgIHJldHVybiBTbGlkZXJSb2xlOwog
ICAgICAgICByZXR1cm4gVGV4dEZpZWxkUm9sZTsKICAgICB9CiAgICAgaWYgKG5vZGUoKS0+aGFz
VGFnTmFtZShzZWxlY3RUYWcpKSB7CiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RF
bGVtZW50ID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpOwotICAgICAgICByZXR1cm4gc2Vs
ZWN0RWxlbWVudC0+bXVsdGlwbGUoKSA/IExpc3RSb2xlIDogUG9wVXBCdXR0b25Sb2xlOworICAg
ICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+bXVsdGlwbGUoKSA/IExpc3RCb3hSb2xlIDogUG9w
VXBCdXR0b25Sb2xlOwogICAgIH0KKyAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHRleHRhcmVh
VGFnKSkKKyAgICAgICAgcmV0dXJuIFRleHRBcmVhUm9sZTsKKyAgICBpZiAoaGVhZGluZ0xldmVs
KCkpCisgICAgICAgIHJldHVybiBIZWFkaW5nUm9sZTsKKyAgICBpZiAobm9kZSgpLT5oYXNUYWdO
YW1lKGRpdlRhZykpCisgICAgICAgIHJldHVybiBEaXZSb2xlOworICAgIGlmIChub2RlKCktPmhh
c1RhZ05hbWUocFRhZykpCisgICAgICAgIHJldHVybiBQYXJhZ3JhcGhSb2xlOworICAgIGlmIChu
b2RlKCktPmhhc1RhZ05hbWUobGFiZWxUYWcpKQorICAgICAgICByZXR1cm4gTGFiZWxSb2xlOwog
ICAgIGlmIChub2RlKCktPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgIHJldHVybiBHcm91cFJvbGU7
CiAgICAgCkBAIC0zMDEsOCArMzEzLDM4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmFkZENoaWxkcmUKICAgICB9CiB9CiAKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNh
bkhhdmVDaGlsZHJlbigpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhpcyBpcyBhbiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LCB0aGVuIGl0J3Mgb2theSBpZiB0aGlzIG9iamVjdAorICAgIC8vIGRv
ZXNuJ3QgaGF2ZSBhIG5vZGUgLSB0aGVyZSBhcmUgc29tZSByZW5kZXJlcnMgdGhhdCBkb24ndCBo
YXZlIGFzc29jaWF0ZWQKKyAgICAvLyBub2RlcywgbGlrZSBzY3JvbGwgYXJlYXMgYW5kIGNzcy1n
ZW5lcmF0ZWQgdGV4dC4KKyAgICBpZiAoIW5vZGUoKSAmJiAhaXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEVsZW1lbnRzIHRoYXQg
c2hvdWxkIG5vdCBoYXZlIGNoaWxkcmVuCisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAg
IGNhc2UgSW1hZ2VSb2xlOgorICAgIGNhc2UgQnV0dG9uUm9sZToKKyAgICBjYXNlIFBvcFVwQnV0
dG9uUm9sZToKKyAgICBjYXNlIENoZWNrQm94Um9sZToKKyAgICBjYXNlIFJhZGlvQnV0dG9uUm9s
ZToKKyAgICBjYXNlIFRhYlJvbGU6CisgICAgY2FzZSBUb2dnbGVCdXR0b25Sb2xlOgorICAgIGNh
c2UgU3RhdGljVGV4dFJvbGU6CisgICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKKyAgICBjYXNl
IFNjcm9sbEJhclJvbGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogeworICAgIC8vIElmIHRoaXMgZWxl
bWVudCBpcyB3aXRoaW4gYSBwYXJlbnQgdGhhdCBjYW5ub3QgaGF2ZSBjaGlsZHJlbiwgaXQgc2hv
dWxkIG5vdCBiZSBleHBvc2VkLgorICAgIGlmIChpc0Rlc2NlbmRhbnRPZkJhcnJlblBhcmVudCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIHJldHVybiBtX3JvbGUgPT0gVW5rbm93blJv
bGU7CiB9CiAKQEAgLTMyMyw5ICszNjUsMTAyNiBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpjYW52YXNIYXNGCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc1dlYkFyZWEoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUo
KSA9PSBXZWJBcmVhUm9sZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJ
bWFnZUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmF0aXZlSW1hZ2UoKSAmJiByb2xl
VmFsdWUoKSA9PSBCdXR0b25Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojppc0FuY2hvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpc05hdGl2ZUltYWdlKCkgJiYgaXNM
aW5rKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlVGV4dENv
bnRyb2woKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZSh0ZXh0YXJlYVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpOworICAgICAgICByZXR1cm4gaW5w
dXQtPmlzVGV4dCgpIHx8IGlucHV0LT5pc051bWJlckZpZWxkKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1NlYXJjaEZp
ZWxkKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlucHV0RWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlucHV0RWxlbWVudC0+aXNTZWFy
Y2hGaWVsZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFNvbWUgd2Vic2l0ZXMg
ZG9uJ3QgbGFiZWwgdGhlaXIgc2VhcmNoIGZpZWxkcyBhcyBzdWNoLiBIb3dldmVyLCB0aGV5IHdp
bGwKKyAgICAvLyB1c2UgdGhlIHdvcmQgInNlYXJjaCIgaW4gZWl0aGVyIHRoZSBmb3JtIG9yIGlu
cHV0IHR5cGUuIFRoaXMgd29uJ3QgY2F0Y2ggZXZlcnkgY2FzZSwKKyAgICAvLyBidXQgaXQgd2ls
bCBjYXRjaCBnb29nbGUuY29tIGZvciBleGFtcGxlLgorCisgICAgLy8gQ2hlY2sgdGhlIG5vZGUg
bmFtZSBvZiB0aGUgaW5wdXQgdHlwZSwgc29tZXRpbWVzIGl0J3MgInNlYXJjaCIuCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0cmlidXRlID0gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsK
KyAgICBpZiAobmFtZUF0dHJpYnV0ZS5jb250YWlucygic2VhcmNoIiwgZmFsc2UpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENoZWNrIHRoZSBmb3JtIGFjdGlvbiBhbmQgdGhlIG5h
bWUsIHdoaWNoIHdpbGwgc29tZXRpbWVzIGJlICJzZWFyY2giLgorICAgIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSA9IGlucHV0RWxlbWVudC0+Zm9ybSgpOworICAgIGlmIChmb3JtICYmIChmb3JtLT5u
YW1lKCkuY29udGFpbnMoInNlYXJjaCIsIGZhbHNlKSB8fCBmb3JtLT5hY3Rpb24oKS5jb250YWlu
cygic2VhcmNoIiwgZmFsc2UpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlSW1hZ2Uo
KSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbWdU
YWcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFw
cGxldFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0
LT5pc0ltYWdlQnV0dG9uKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0ltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cm9sZVZhbHVlKCkgPT0gSW1hZ2VSb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5u
b2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25S
b2xlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOworICAgIGlmICghaW5wdXRFbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1Bh
c3N3b3JkRmllbGQoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbnB1
dEltYWdlKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgIGlmIChyb2xlVmFsdWUoKSA9
PSBCdXR0b25Sb2xlICYmIG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUpOworICAgICAgICByZXR1cm4gaW5wdXQtPmlzSW1hZ2VCdXR0b24oKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJv
Z3Jlc3NJbmRpY2F0b3IoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBQcm9n
cmVzc0luZGljYXRvclJvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
U2xpZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gU2xpZGVyUm9sZTsK
K30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51UmVsYXRlZCgpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAgIGNhc2UgTWVudVJvbGU6CisgICAg
Y2FzZSBNZW51QmFyUm9sZToKKyAgICBjYXNlIE1lbnVCdXR0b25Sb2xlOgorICAgIGNhc2UgTWVu
dUl0ZW1Sb2xlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c01lbnUoKSBjb25zdAoreworICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBNZW51Um9sZTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNZW51QmFyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTWVudUJhclJvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzTWVudUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJvbGVW
YWx1ZSgpID09IE1lbnVCdXR0b25Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc01lbnVJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gTWVu
dUl0ZW1Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc05hdGl2ZUNo
ZWNrYm94T3JSYWRpbygpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5wdXQpCisg
ICAgICAgIHJldHVybiBpbnB1dC0+aXNDaGVja2JveCgpIHx8IGlucHV0LT5pc1JhZGlvQnV0dG9u
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0
dHJpYnV0ZShhcmlhX2Rpc2FibGVkQXR0ciksICJ0cnVlIikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IHRvRWxlbWVudChub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKK3sKKyAgICBOb2Rl
KiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1
dEVsZW1lbnQoKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCk7Cit9CisKK2Jv
b2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzUHJlc3NlZCgpIGNvbnN0Cit7CisgICAgaWYg
KHJvbGVWYWx1ZSgpICE9IEJ1dHRvblJvbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGlzIGlzIGFuIEFSSUEgYnV0dG9uLCBjaGVjayB0aGUg
YXJpYS1wcmVzc2VkIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiBub2RlKCktPmFjdGl2ZSgpCisgICAg
aWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQnV0dG9uUm9sZSkgeworICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfcHJlc3NlZEF0dHIpLCAidHJ1ZSIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbm9kZS0+YWN0aXZlKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZpcnN0
IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2VkbmVzcyBzZW1hbnRpY3MKKyAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOworICAgIGlmIChpbnB1
dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNr
ZWQoKTsKKworICAgIC8vIEVsc2UsIGlmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRp
bywgcmVzcGVjdCB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZQorICAgIEFjY2Vzc2liaWxpdHlS
b2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsKKyAgICBpZiAoYXJpYVJvbGUgPT0g
UmFkaW9CdXR0b25Sb2xlIHx8IGFyaWFSb2xlID09IENoZWNrQm94Um9sZSkgeworICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfY2hlY2tlZEF0dHIpLCAidHJ1
ZSIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBub3QgY2hlY2tlZAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNIb3ZlcmVkKCkgY29uc3QK
K3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG5vZGUtPmhvdmVyZWQoKTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAorewor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYU11bHRpU2VsZWN0YWJsZSA9IGdldEF0dHJpYnV0
ZShhcmlhX211bHRpc2VsZWN0YWJsZUF0dHIpOworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShh
cmlhTXVsdGlTZWxlY3RhYmxlLCAidHJ1ZSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXJpYU11bHRpU2VsZWN0YWJsZSwgImZhbHNlIikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbm9kZSgpICYmIHRvSFRNTFNlbGVj
dEVsZW1lbnQobm9kZSgpKS0+bXVsdGlwbGUoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTFRleHRBcmVhRWxlbWVudCo+KG5vZGUpLT5yZWFkT25seSgpOworCisgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG5vZGUpLT5yZWFkT25seSgpOworCisgICAgcmV0dXJuICFub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNS
ZXF1aXJlZCgpIGNvbnN0Cit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0
ZShhcmlhX3JlcXVpcmVkQXR0ciksICJ0cnVlIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgTm9kZSogbiA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAobiAmJiAobi0+aXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChuKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obiktPnJlcXVpcmVkKCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
aGVhZGluZ0xldmVsKCkgY29uc3QKK3sKKyAgICAvLyBoZWFkaW5ncyBjYW4gYmUgaW4gYmxvY2sg
ZmxvdyBhbmQgbm9uLWJsb2NrIGZsb3cKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGFyaWFSb2xl
QXR0cmlidXRlKCkgPT0gSGVhZGluZ1JvbGUpCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
YXJpYV9sZXZlbEF0dHIpLnRvSW50KCk7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoMVRh
ZykpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDJUYWcp
KQorICAgICAgICByZXR1cm4gMjsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGgzVGFnKSkK
KyAgICAgICAgcmV0dXJuIDM7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoNFRhZykpCisg
ICAgICAgIHJldHVybiA0OworCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaDVUYWcpKQorICAg
ICAgICByZXR1cm4gNTsKKworICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGg2VGFnKSkKKyAgICAg
ICAgcmV0dXJuIDY7CisKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzQVJJQVJh
bmdlKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoYXJpYV92YWx1ZXRleHRBdHRyKS5zdHJpbmcoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNBUklBUmFuZ2UoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9hcmlhUm9s
ZSkgeworICAgIGNhc2UgUHJvZ3Jlc3NJbmRpY2F0b3JSb2xlOgorICAgIGNhc2UgU2xpZGVyUm9s
ZToKKyAgICBjYXNlIFNjcm9sbEJhclJvbGU6CisgICAgY2FzZSBTcGluQnV0dG9uUm9sZToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2Uo
KSBjb25zdAoreworICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGlucHV0VGFn
KSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgICAgICBpZiAoaW5wdXQtPmlzUmFuZ2VDb250cm9s
KCkpCisgICAgICAgICAgICByZXR1cm4gaW5wdXQtPnZhbHVlQXNOdW1iZXIoKTsKKyAgICB9CisK
KyAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cikudG9GbG9hdCgpOworfQorCitmbG9h
dCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KG5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC0+aXNSYW5nZUNvbnRyb2woKSkKKyAgICAgICAg
ICAgIHJldHVybiBpbnB1dC0+bWF4aW11bSgpOworICAgIH0KKworICAgIGlmICghaXNBUklBUmFu
Z2UoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFy
aWFfdmFsdWVtYXhBdHRyKS50b0Zsb2F0KCk7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAobm9kZSgpICYmIG5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAg
aWYgKGlucHV0LT5pc1JhbmdlQ29udHJvbCgpKQorICAgICAgICAgICAgcmV0dXJuIGlucHV0LT5t
aW5pbXVtKCk7CisgICAgfQorCisgICAgaWYgKCFpc0FSSUFSYW5nZSgpKQorICAgICAgICByZXR1
cm4gMC4wZjsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1pbkF0dHIpLnRv
RmxvYXQoKTsKK30KKworZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0ZXBWYWx1ZUZv
clJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHN0ZXBBdHRyKS50b0Zs
b2F0KCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSGVhZGluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IEhlYWRpbmdSb2xlOworfQorCitib29s
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0xpbmsoKSBjb25zdAoreworICAgIHJldHVybiBy
b2xlVmFsdWUoKSA9PSBXZWJDb3JlTGlua1JvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzQ29udHJvbCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biAoKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCisgICAgICAgIHx8IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUNvbnRy
b2woYXJpYVJvbGVBdHRyaWJ1dGUoKSkpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0Ojppc0ZpZWxkc2V0KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgp
OworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG5v
ZGUtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojppc0dyb3VwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gR3Jv
dXBSb2xlOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6c2VsZWN0ZWRSYWRpb0J1dHRvbigpCit7CisgICAgaWYgKCFpc1JhZGlvR3JvdXAoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworCisgICAgLy8gRmlu
ZCB0aGUgY2hpbGQgcmFkaW8gYnV0dG9uIHRoYXQgaXMgc2VsZWN0ZWQgKGllLiB0aGUgaW50VmFs
dWUgPT0gMSkuCisgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0ID0gY2hpbGRyZW5baV0uZ2V0KCk7CisgICAgICAgIGlmIChvYmplY3QtPnJvbGVW
YWx1ZSgpID09IFJhZGlvQnV0dG9uUm9sZSAmJiBvYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVl
KCkgPT0gQnV0dG9uU3RhdGVPbikKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6c2VsZWN0ZWRUYWJJdGVtKCkKK3sKKyAgICBpZiAoIWlzVGFiTGlzdCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIEZpbmQgdGhlIGNoaWxkIHRhYiBpdGVtIHRoYXQgaXMg
c2VsZWN0ZWQgKGllLiB0aGUgaW50VmFsdWUgPT0gMSkuCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYnM7CisgICAgdGFiQ2hpbGRyZW4odGFi
cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIHNpemVfdCBzaXplID0gdGFicy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gY2hpbGRyZW5baV0uZ2V0KCk7CisgICAgICAg
IGlmIChvYmplY3QtPmlzVGFiSXRlbSgpICYmIG9iamVjdC0+aXNDaGVja2VkKCkpCisgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJp
bGl0eUJ1dHRvblN0YXRlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2JveE9yUmFkaW9W
YWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkpCisgICAg
ICAgIHJldHVybiBpc0NoZWNrZWQoKSA/IEJ1dHRvblN0YXRlT24gOiBCdXR0b25TdGF0ZU9mZjsK
KworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGVja2JveE9yUmFkaW9WYWx1ZSgp
OworfQorCitFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YW5jaG9yRWxlbWVudCgp
IGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVj
dENhY2hlKCk7CisKKyAgICAvLyBzZWFyY2ggdXAgdGhlIERPTSB0cmVlIGZvciBhbiBhbmNob3Ig
ZWxlbWVudAorICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGFueSBub24taW1hZ2Ugd2l0
aCBhbiBhbmNob3IgaXMgYW4gSFRNTEFuY2hvckVsZW1lbnQKKyAgICBmb3IgKCA7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
YVRhZykgfHwgKG5vZGUtPnJlbmRlcmVyKCkgJiYgY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpLT5pc0FuY2hvcigpKSkKKyAgICAgICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjphY3Rpb25FbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
ICghaW5wdXQtPmRpc2FibGVkKCkgJiYgKGlzQ2hlY2tib3hPclJhZGlvKCkgfHwgaW5wdXQtPmlz
VGV4dEJ1dHRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICB9IGVsc2UgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVudChu
b2RlKTsKKworICAgIGlmIChpc0ZpbGVVcGxvYWRCdXR0b24oKSkKKyAgICAgICAgcmV0dXJuIHRv
RWxlbWVudChub2RlKTsKKyAgICAgICAgICAgIAorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSkKKyAgICAgICAgcmV0dXJuIHRvRWxl
bWVudChub2RlKTsKKworICAgIGlmIChpc0ltYWdlQnV0dG9uKCkpCisgICAgICAgIHJldHVybiB0
b0VsZW1lbnQobm9kZSk7CisgICAgCisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFn
KSkKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKKworICAgIHN3aXRjaCAocm9sZVZh
bHVlKCkpIHsKKyAgICBjYXNlIEJ1dHRvblJvbGU6CisgICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6
CisgICAgY2FzZSBUYWJSb2xlOgorICAgIGNhc2UgTWVudUl0ZW1Sb2xlOgorICAgIGNhc2UgTGlz
dEl0ZW1Sb2xlOgorICAgICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBFbGVtZW50KiBlbHQgPSBhbmNob3JF
bGVtZW50KCk7CisgICAgaWYgKCFlbHQpCisgICAgICAgIGVsdCA9IG1vdXNlQnV0dG9uTGlzdGVu
ZXIoKTsKKyAgICByZXR1cm4gZWx0OworfQorCitFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcigpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
Y2hlY2sgaWYgb3VyIHBhcmVudCBpcyBhIG1vdXNlIGJ1dHRvbiBsaXN0ZW5lcgorICAgIHdoaWxl
IChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gRklYTUU6IERvIHRoZSBjb250aW51YXRpb24gc2VhcmNoIGxpa2UgYW5jaG9yRWxlbWVudCBk
b2VzCisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOyBlbGVtZW50
OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KSB8
fCBlbGVtZW50LT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCkgfHwgZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0Rlc2Nl
bmRhbnRPZkJhcnJlblBhcmVudCgpIGNvbnN0Cit7CisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QgPSBwYXJlbnRPYmplY3QoKTsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnBh
cmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmICghb2JqZWN0LT5jYW5IYXZlQ2hpbGRyZW4oKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWx0ZXJTbGlkZXJWYWx1ZShib29sIGlu
Y3JlYXNlKQoreworICAgIGlmIChyb2xlVmFsdWUoKSAhPSBTbGlkZXJSb2xlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWdldEF0dHJpYnV0ZShzdGVwQXR0cikuaXNFbXB0eSgpKQorICAg
ICAgICBjaGFuZ2VWYWx1ZUJ5U3RlcChpbmNyZWFzZSk7CisgICAgZWxzZQorICAgICAgICBjaGFu
Z2VWYWx1ZUJ5UGVyY2VudChpbmNyZWFzZSA/IDUgOiAtNSk7Cit9CisgICAgCit2b2lkIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjppbmNyZW1lbnQoKQoreworICAgIGFsdGVyU2xpZGVyVmFsdWUo
dHJ1ZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRlY3JlbWVudCgpCit7
CisgICAgYWx0ZXJTbGlkZXJWYWx1ZShmYWxzZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmNoYW5nZVZhbHVlQnlTdGVwKGJvb2wgaW5jcmVhc2UpCit7CisgICAgZmxvYXQg
c3RlcCA9IHN0ZXBWYWx1ZUZvclJhbmdlKCk7CisgICAgZmxvYXQgdmFsdWUgPSB2YWx1ZUZvclJh
bmdlKCk7CisKKyAgICB2YWx1ZSArPSBpbmNyZWFzZSA/IHN0ZXAgOiAtc3RlcDsKKworICAgIHNl
dFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisKKyAgICBheE9iamVjdENhY2hlKCktPnBv
c3ROb3RpZmljYXRpb24obm9kZSgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1
ZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoYW5nZVZhbHVlQnlQZXJj
ZW50KGZsb2F0IHBlcmNlbnRDaGFuZ2UpCit7CisgICAgZmxvYXQgcmFuZ2UgPSBtYXhWYWx1ZUZv
clJhbmdlKCkgLSBtaW5WYWx1ZUZvclJhbmdlKCk7CisgICAgZmxvYXQgdmFsdWUgPSB2YWx1ZUZv
clJhbmdlKCk7CisKKyAgICB2YWx1ZSArPSByYW5nZSAqIChwZXJjZW50Q2hhbmdlIC8gMTAwKTsK
KyAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworCisgICAgYXhPYmplY3RDYWNo
ZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG5vZGUoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5n
ZWQsIHRydWUpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0dlbmVyaWNG
b2N1c2FibGVFbGVtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIWNhblNldEZvY3VzQXR0cmlidXRl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAvLyBJZiBpdCdzIGEgY29udHJvbCwg
aXQncyBub3QgZ2VuZXJpYy4KKyAgICAgaWYgKGlzQ29udHJvbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJZiBpdCBoYXMgYW4gYXJpYSByb2xlLCBpdCdzIG5vdCBnZW5lcmlj
LgorICAgIGlmIChtX2FyaWFSb2xlICE9IFVua25vd25Sb2xlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBJZiB0aGUgY29udGVudCBlZGl0YWJsZSBhdHRyaWJ1dGUgaXMgc2V0IG9u
IHRoaXMgZWxlbWVudCwgdGhhdCdzIHRoZSByZWFzb24KKyAgICAvLyBpdCdzIGZvY3VzYWJsZSwg
YW5kIGV4aXN0aW5nIGxvZ2ljIHNob3VsZCBoYW5kbGUgdGhpcyBjYXNlIGFscmVhZHkgLSBzbyBp
dCdzIG5vdCBhCisgICAgLy8gZ2VuZXJpYyBmb2N1c2FibGUgZWxlbWVudC4KKworICAgIGlmICho
YXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gVGhlIHdlYiBhcmVhIGFuZCBib2R5IGVsZW1lbnQgYXJlIGJvdGggZm9jdXNhYmxl
LCBidXQgZXhpc3RpbmcgbG9naWMgaGFuZGxlcyB0aGVzZQorICAgIC8vIGNhc2VzIGFscmVhZHks
IHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVtIGhlcmUuCisgICAgaWYgKHJvbGVWYWx1
ZSgpID09IFdlYkFyZWFSb2xlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG5vZGUo
KSAmJiBub2RlKCktPmhhc1RhZ05hbWUoYm9keVRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitIVE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dHNCeVRhZ05hbWUoImxhYmVsIik7CisgICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGlmIChs
aXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgeworICAgICAgICAgICAgSFRNTExh
YmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+
aXRlbShpKSk7CisgICAgICAgICAgICBpZiAobGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFyaWFBY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZyBhcmlhTGFiZWxlZEJ5ID0g
YXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpOworICAgIGlmICghYXJpYUxhYmVsZWRCeS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBhcmlhTGFiZWxlZEJ5OworCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhcmlhTGFiZWwgPSBnZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgIGlmICgh
YXJpYUxhYmVsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGFyaWFMYWJlbDsKKworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdXaXRoQXJpYVJvbGUo
U3RyaW5nIHJvbGUsIE5vZGUqIG5vZGUpCit7CisgICAgZm9yIChOb2RlKiBzaWJsaW5nID0gbm9k
ZS0+cGFyZW50Tm9kZSgpLT5maXJzdENoaWxkKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5n
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2libGluZ0FyaWFSb2xlID0gdG9F
bGVtZW50KHNpYmxpbmcpLT5nZXRBdHRyaWJ1dGUocm9sZUF0dHIpOworICAgICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHNpYmxpbmdBcmlhUm9sZSwgcm9sZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRvRWxlbWVudChzaWJsaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gMDsKK30KKworRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVF
bGVtZW50Rm9yTWVudUJ1dHRvbigpIGNvbnN0Cit7CisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRl
KCkgIT0gTWVudUJ1dHRvblJvbGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNp
YmxpbmdXaXRoQXJpYVJvbGUoIm1lbnUiLCBub2RlKCkpOworfQorCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWVudUZvck1lbnVCdXR0b24oKSBjb25zdAor
eworICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG1lbnVFbGVtZW50Rm9y
TWVudUJ1dHRvbigpKTsKK30KKworRWxlbWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1l
bnVJdGVtRWxlbWVudEZvck1lbnUoKSBjb25zdAoreworICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0
ZSgpICE9IE1lbnVSb2xlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gc2li
bGluZ1dpdGhBcmlhUm9sZSgibWVudWl0ZW0iLCBub2RlKCkpOyAgICAKK30KKworQWNjZXNzaWJp
bGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1lbnVCdXR0b25Gb3JNZW51KCkg
Y29uc3QKK3sKKyAgICBFbGVtZW50KiBtZW51SXRlbSA9IG1lbnVJdGVtRWxlbWVudEZvck1lbnUo
KTsKKworICAgIGlmIChtZW51SXRlbSkgeworICAgICAgICAvLyBBUklBIGp1c3QgaGFzIGdlbmVy
aWMgbWVudSBpdGVtcy4gQXBwS2l0IG5lZWRzIHRvIGtub3cgaWYgdGhpcyBpcyBhIHRvcCBsZXZl
bCBpdGVtcyBsaWtlIE1lbnVCYXJCdXR0b24gb3IgTWVudUJhckl0ZW0KKyAgICAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogbWVudUl0ZW1BWCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
bWVudUl0ZW0pOworICAgICAgICBpZiAobWVudUl0ZW1BWC0+aXNNZW51QnV0dG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gbWVudUl0ZW1BWDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK1N0
cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkg
Y29uc3QKK3sKKyAgICAvLyBTdGF0aWMgdGV4dCBzaG91bGQgbm90IGhhdmUgYSBkZXNjcmlwdGlv
biwgaXQgc2hvdWxkIG9ubHkgaGF2ZSBhIHN0cmluZ1ZhbHVlLgorICAgIGlmIChyb2xlVmFsdWUo
KSA9PSBTdGF0aWNUZXh0Um9sZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3Ry
aW5nIGFyaWFEZXNjcmlwdGlvbiA9IGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKKyAg
ICBpZiAoIWFyaWFEZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBhcmlhRGVz
Y3JpcHRpb247CisKKyAgICBpZiAoaXNJbWFnZSgpIHx8IGlzSW5wdXRJbWFnZSgpIHx8IGlzTmF0
aXZlSW1hZ2UoKSB8fCBpc0NhbnZhcygpKSB7CisgICAgICAgIC8vIEltYWdlcyBzaG91bGQgdXNl
IGFsdCBhcyBsb25nIGFzIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgZXZlbiBpZiBlbXB0eS4g
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBPdGhlcndpc2UsIGl0IHNob3VsZCBmYWxs
YmFjayB0byBvdGhlciBtZXRob2RzLCBsaWtlIHRoZSB0aXRsZSBhdHRyaWJ1dGUuICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQgPSBnZXRBdHRyaWJ1
dGUoYWx0QXR0cik7CisgICAgICAgIGlmICghYWx0LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGFsdDsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUFUSE1MKQorICAgIE5vZGUqIG5vZGUgPSB0
aGlzLT5ub2RlKCk7CisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudChub2RlKS0+aXNNYXRoTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoTWF0aE1MTmFtZXM6OmFsdHRleHRBdHRyKTsKKyNlbmRpZgorCisgICAgLy8gQW4gZWxl
bWVudCdzIGRlc2NyaXB0aXZlIHRleHQgaXMgY29tcHJpc2VkIG9mIHRpdGxlKCkgKHdoYXQncyB2
aXNpYmxlIG9uIHRoZSBzY3JlZW4pIGFuZCBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSAob3Ro
ZXIgZGVzY3JpcHRpdmUgdGV4dCkuCisgICAgLy8gQm90aCBhcmUgdXNlZCB0byBnZW5lcmF0ZSB3
aGF0IGEgc2NyZWVuIHJlYWRlciBzcGVha3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBJZiB0aGlzIHBvaW50IGlzIHJl
YWNoZWQgKGkuZS4gdGhlcmUncyBubyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pIGFuZCB0aGVy
ZSdzIG5vIHRpdGxlKCksIHdlIHNob3VsZCBmYWxsYmFjayB0byB1c2luZyB0aGUgdGl0bGUgYXR0
cmlidXRlLgorICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgaXMgbm9ybWFsbHkgdXNlZCBhcyBo
ZWxwIHRleHQgKGJlY2F1c2UgaXQgaXMgYSB0b29sdGlwKSwgYnV0IGlmIHRoZXJlIGlzIG5vdGhp
bmcgZWxzZSBhdmFpbGFibGUsIHRoaXMgc2hvdWxkIGJlIHVzZWQgKGFjY29yZGluZyB0byBBUklB
KS4KKyAgICBpZiAodGl0bGUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUodGl0bGVBdHRyKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9
IHRoaXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIZWxwID0gZ2V0QXR0cmlidXRlKGFy
aWFfaGVscEF0dHIpOworICAgIGlmICghYXJpYUhlbHAuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gYXJpYUhlbHA7CisgICAgCisgICAgU3RyaW5nIGRlc2NyaWJlZEJ5ID0gYXJpYURlc2NyaWJl
ZEJ5QXR0cmlidXRlKCk7CisgICAgaWYgKCFkZXNjcmliZWRCeS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBkZXNjcmliZWRCeTsKKyAgICAKKyAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBhY2Nl
c3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKKyAgICBmb3IgKE5vZGUqIGN1cnIgPSBub2RlOyBjdXJy
OyBjdXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3VtbWFyeSA9IHRv
RWxlbWVudChjdXJyKS0+Z2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICAgICAgICAgIGlm
ICghc3VtbWFyeS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1bW1hcnk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSB0aXRsZSBhdHRyaWJ1dGUgc2hvdWxkIGJl
IHVzZWQgYXMgaGVscCB0ZXh0IHVubGVzcyBpdCBpcyBhbHJlYWR5IGJlaW5nIHVzZWQgYXMgZGVz
Y3JpcHRpdmUgdGV4dC4KKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSB0
b0VsZW1lbnQoY3VyciktPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAgaWYg
KCF0aXRsZS5pc0VtcHR5KCkgJiYgZGVzY3JpcHRpb24gIT0gdGl0bGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRpdGxlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPbmx5IHRh
a2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBvciBh
biB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAorICAgICAgICAvLyBhZGRlZCB0byB0aG9zZSBr
aW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdhcyBtZWFudCBmb3IgYSBjaGlsZCBl
bGVtZW50LgorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iaiA9IGF4T2JqZWN0Q2Fj
aGUoKS0+Z2V0T3JDcmVhdGUoY3Vycik7CisgICAgICAgIGlmIChheE9iaikgeworICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGF4T2JqLT5yb2xlVmFsdWUoKTsKKyAgICAgICAg
ICAgIGlmIChyb2xlICE9IEdyb3VwUm9sZSAmJiByb2xlICE9IFVua25vd25Sb2xlKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKyAgICAKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVyYXJj
aGljYWxMZXZlbCgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICBTdHJpbmcgYXJp
YUxldmVsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKTsKKyAgICBpZiAo
IWFyaWFMZXZlbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBhcmlhTGV2ZWwudG9JbnQoKTsK
KyAgICAKKyAgICAvLyBPbmx5IHRyZWUgaXRlbSB3aWxsIGNhbGN1bGF0ZSBpdHMgbGV2ZWwgdGhy
b3VnaCB0aGUgRE9NIGN1cnJlbnRseS4KKyAgICBpZiAocm9sZVZhbHVlKCkgIT0gVHJlZUl0ZW1S
b2xlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBIaWVyYXJjaHkgbGV2ZWxpbmcg
c3RhcnRzIGF0IDAuCisgICAgLy8gV2UgbWVhc3VyZSB0cmVlIGhpZXJhcmNoeSBieSB0aGUgbnVt
YmVyIG9mIGdyb3VwcyB0aGF0IHRoZSBpdGVtIGlzIHdpdGhpbi4KKyAgICB1bnNpZ25lZCBsZXZl
bCA9IDA7CisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmpl
Y3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAg
IEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudFJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOworICAg
ICAgICBpZiAocGFyZW50Um9sZSA9PSBHcm91cFJvbGUpCisgICAgICAgICAgICBsZXZlbCsrOwor
ICAgICAgICBlbHNlIGlmIChwYXJlbnRSb2xlID09IFRyZWVSb2xlKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBsZXZlbDsKK30KKworU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2RlKiBu
b2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgLy8gTm90ZTogVGV4dEl0ZXJhdG9yIGRvZXNuJ3QgcmV0dXJuIGFueSB0ZXh0
IGZvciBub2RlcyB0aGF0IGRvbid0IGhhdmUgcmVuZGVyZXJzLgorICAgIC8vIElmIHRoaXMgY291
bGQgYmUgZml4ZWQsIGl0J2QgYmUgbW9yZSBhY2N1cmF0ZSB1c2UgVGV4dEl0ZXJhdG9yIGhlcmUu
CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRvRWxlbWVu
dChub2RlKS0+aW5uZXJUZXh0KCk7CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAoreworICAgIE5vZGUqIG5v
ZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBib29sIGlzSW5wdXRUYWcgPSBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKTsK
KyAgICBpZiAoaXNJbnB1dFRhZykgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGlucHV0
LT5pc1RleHRCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVXaXRoRGVm
YXVsdCgpOworICAgIH0KKworICAgIGlmIChpc0lucHV0VGFnIHx8IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmlidXRlKCkpIHx8IGlzQ29udHJvbCgpKSB7Cisg
ICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHRvRWxlbWVu
dChub2RlKSk7CisgICAgICAgIGlmIChsYWJlbCAmJiAhZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkp
CisgICAgICAgICAgICByZXR1cm4gbGFiZWwtPmlubmVyVGV4dCgpOworICAgIH0KKworICAgIC8v
IElmIHRoaXMgbm9kZSBpc24ndCByZW5kZXJlZCwgdGhlcmUncyBubyBpbm5lciB0ZXh0IHdlIGNh
biBleHRyYWN0IGZyb20gYSBzZWxlY3QgZWxlbWVudC4KKyAgICBpZiAoIWlzQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpICYmIG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgc3dpdGNoIChyb2xlVmFsdWUoKSkgeworICAgIGNhc2Ug
UG9wVXBCdXR0b25Sb2xlOgorICAgIGNhc2UgQnV0dG9uUm9sZToKKyAgICBjYXNlIENoZWNrQm94
Um9sZToKKyAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgorICAgIGNhc2UgTWVudUJ1dHRvblJv
bGU6CisgICAgY2FzZSBNZW51SXRlbVJvbGU6CisgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6Cisg
ICAgY2FzZSBUYWJSb2xlOgorICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChpc0hlYWRpbmcoKSB8
fCBpc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQoKTsKKworICAgIC8v
IElmIGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIG9yIGEga25v
d24gY29udHJvbCB0eXBlLCB0aGVuIGl0IHdpbGwgYXBwZWFyIHRvICAgICAgICAgICAgICAgICAg
CisgICAgLy8gdGhlIHVzZXIgYXMgYSBzaW5nbGUgYXRvbWljIG9iamVjdCwgc28gd2Ugc2hvdWxk
IHVzZSBpdHMgdGV4dCBhcyB0aGUgZGVmYXVsdCB0aXRsZS4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICBpZiAoaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpKQorICAgICAgICBy
ZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOworCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHQoKSBjb25zdAoreworICAgIC8vIElm
IHRoaXMgaXMgYSB1c2VyIGRlZmluZWQgc3RhdGljIHRleHQsIHVzZSB0aGUgYWNjZXNzaWJsZSBu
YW1lIGNvbXB1dGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgPT0gU3RhdGljVGV4dFJvbGUpCisgICAgICAgIHJl
dHVybiBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7CisKKyAgICBpZiAoIWlzVGV4dENv
bnRyb2woKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxU
ZXh0QXJlYUVsZW1lbnQqPihub2RlKS0+dmFsdWUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUoaW5wdXRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnRvSW5wdXRFbGVtZW50
KCktPnZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSktPmlu
bmVyVGV4dCgpOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0cmluZ1Zh
bHVlKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKGFyaWFSb2xlQXR0cmli
dXRlKCkgPT0gU3RhdGljVGV4dFJvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0YXRpY1RleHQgPSB0
ZXh0KCk7CisgICAgICAgIGlmICghc3RhdGljVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0
YXRpY1RleHQgPSB0ZXh0VW5kZXJFbGVtZW50KCk7CisgICAgICAgIHJldHVybiBzdGF0aWNUZXh0
OworICAgIH0KKworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0
ZXh0VW5kZXJFbGVtZW50KCk7CisKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcp
KSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1MU2Vs
ZWN0RWxlbWVudChub2RlKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVt
ZW50LT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+
IGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQtPmxpc3RJdGVtcygpOworICAgICAgICBpZiAoc2Vs
ZWN0ZWRJbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHNpemVfdD4oc2VsZWN0ZWRJbmRleCkgPCBs
aXN0SXRlbXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJy
aWRkZW5EZXNjcmlwdGlvbiA9IGxpc3RJdGVtc1tzZWxlY3RlZEluZGV4XS0+ZmFzdEdldEF0dHJp
YnV0ZShhcmlhX2xhYmVsQXR0cik7CisgICAgICAgICAgICBpZiAoIW92ZXJyaWRkZW5EZXNjcmlw
dGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkRlc2NyaXB0
aW9uOworICAgICAgICB9CisgICAgICAgIGlmICghc2VsZWN0RWxlbWVudC0+bXVsdGlwbGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT52YWx1ZSgpOworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKGlzVGV4dENvbnRyb2woKSkKKyAgICAgICAg
cmV0dXJuIHRleHQoKTsKKworICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIGltcGxlbWVu
dCBhIHZhbHVlIGhlcmUgZm9yIG1vcmUgdHlwZXMKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
YmV0dGVyIG5vdCB0byBhZHZlcnRpc2UgYSB2YWx1ZSBhdCBhbGwgZm9yIHRoZSB0eXBlcyBmb3Ig
d2hpY2ggd2UgZG9uJ3QgaW1wbGVtZW50IG9uZTsKKyAgICAvLyB0aGlzIHdvdWxkIHJlcXVpcmUg
c3ViY2xhc3Npbmcgb3IgbWFraW5nIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyBkbyBzb21l
dGhpbmcgb3RoZXIgdGhhbiByZXR1cm4gYQorICAgIC8vIHNpbmdsZSBzdGF0aWMgYXJyYXkuCisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhl
IEFSSUEgYWNjZXNzaWJsZSBuYW1lIGFzIGRlc2NyaWJlZCBieSB0aGUgTW96aWxsYSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIEFSSUEgSW1wbGVtZW50ZXIncyBH
dWlkZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGljIFN0cmluZyBh
Y2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNUZXh0
Tm9kZSgpKQorICAgICAgICByZXR1cm4gdG9UZXh0KG5vZGUpLT5kYXRhKCk7CisKKyAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4obm9kZSktPnZhbHVlKCk7CisKKyAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1MRWxl
bWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgICAgICBpZiAoIWFsdC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gYWx0OworICAgIH0KKworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb25Gb3JFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+ICZlbGVtZW50cykgY29uc3QK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgdW5zaWduZWQgc2l6ZSA9IGVsZW1l
bnRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IGVsZW1lbnRzW2ldOworCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShpZEVsZW1lbnQpKTsKKyAgICAgICAgZm9y
IChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKGlkRWxlbWVudCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChhY2Nlc3NpYmxl
TmFtZUZvck5vZGUobikpOworCisgICAgICAgIGlmIChpICE9IHNpemUgLSAxKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZWxlbWVudHNGcm9tQXR0
cmlidXRlKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGUpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVHJlZVNjb3BlKiBzY29wZSA9IG5vZGUtPnRyZWVTY29wZSgpOworICAgIGlmICghc2NvcGUp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBpZExpc3QgPSBnZXRBdHRyaWJ1dGUoYXR0
cmlidXRlKS5zdHJpbmcoKTsKKyAgICBpZiAoaWRMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWRMaXN0LnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiBpZFZlY3RvcjsKKyAgICBpZExpc3Quc3BsaXQoJyAnLCBpZFZlY3Rvcik7CisKKyAgICB1bnNp
Z25lZCBzaXplID0gaWRWZWN0b3Iuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGlkTmFtZShpZFZlY3RvcltpXSk7
CisgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IHNjb3BlLT5nZXRFbGVtZW50QnlJZChpZE5h
bWUpOworICAgICAgICBpZiAoaWRFbGVtZW50KQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5k
KGlkRWxlbWVudCk7CisgICAgfQorfQorCisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29uc3QK
K3sKKyAgICBlbGVtZW50c0Zyb21BdHRyaWJ1dGUoZWxlbWVudHMsIGFyaWFfbGFiZWxlZGJ5QXR0
cik7CisgICAgaWYgKCFlbGVtZW50cy5zaXplKCkpCisgICAgICAgIGVsZW1lbnRzRnJvbUF0dHJp
YnV0ZShlbGVtZW50cywgYXJpYV9sYWJlbGxlZGJ5QXR0cik7Cit9CisKKworU3RyaW5nIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjphcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRzOworICAgIGFyaWFMYWJlbGVkQnlFbGVtZW50cyhl
bGVtZW50cyk7CisKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVu
dHMoZWxlbWVudHMpOworfQorCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5TZXRG
b2N1c0F0dHJpYnV0ZSgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc1dlYkFy
ZWEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzYsNyArMTM5NSw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldEZvY3UKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKKyAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICF0b0VsZW1lbnQobm9kZSktPmlzRW5hYmxlZEZvcm1D
b250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBub2RlLT5zdXBw
b3J0c0ZvY3VzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCShyZXZpc2lvbiAxMjgzMDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDggKzY4LDcxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBj
YW52YXNIYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc0Fu
Y2hvcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2woKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNGaWVsZHNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0dyb3Vw
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzSGVhZGluZygpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc0hvdmVyZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzSW5wdXRJbWFnZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0xpbmsoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZW51KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzTWVudUJhcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01lbnVCdXR0b24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc01lbnVSZWxhdGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTXVsdGlTZWxlY3Rh
YmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNOYXRpdmVUZXh0Q29udHJvbCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBp
c1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0luZGlj
YXRvcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzV2Vi
QXJlYSgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRl
dGVybWluYXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzUHJlc3NlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlz
UmVxdWlyZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Tm9kZShOb2RlKik7CisgICAgdmlydHVh
bCBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgdmlydHVhbCBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRGb2N1c0F0
dHJpYnV0ZSgpIGNvbnN0OwotICAgIAorICAgIHZpcnR1YWwgaW50IGhlYWRpbmdMZXZlbCgpIGNv
bnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0OworICAg
IHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQg
bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWluVmFsdWVGb3JS
YW5nZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgc3RlcFZhbHVlRm9yUmFuZ2UoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogc2VsZWN0ZWRSYWRpb0J1dHRv
bigpOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogc2VsZWN0ZWRUYWJJdGVtKCk7
CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUgY2hlY2tib3hPclJhZGlvVmFs
dWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgaGVscFRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFMYWJlbGVk
QnlBdHRyaWJ1dGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxlbWVu
dCgpIGNvbnN0OworICAgIEVsZW1lbnQqIG1vdXNlQnV0dG9uTGlzdGVuZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEVsZW1lbnQqIGFuY2hvckVsZW1lbnQoKSBjb25zdDsKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBtZW51Rm9yTWVudUJ1dHRvbigpIGNvbnN0OworICAgCisgICAgdmlydHVhbCB2
b2lkIGNoYW5nZVZhbHVlQnlQZXJjZW50KGZsb2F0IHBlcmNlbnRDaGFuZ2UpOworIAogICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbGFzdENoaWxkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKQEAgLTc3LDE0ICsx
NDAsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
T2JqZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRP
YmplY3RJZkV4aXN0cygpIGNvbnN0OwogCi0gICAgdm9pZCBzZXROb2RlKE5vZGUqKTsKLSAgICB2
aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICB2aXJ0dWFs
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CisKICAgICB2aXJ0dWFsIExheW91dFJl
Y3QgZWxlbWVudFJlY3QoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtOTYsMTEgKzE1OCwyNiBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCk7CisgICAg
dmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBh
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJp
YVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVB
cmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJlbWFwQXJp
YVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CiAgICAgYm9vbCBoYXND
b250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQoKSBjb25zdDsKKyAgICBib29sIGlzRGVzY2VuZGFu
dE9mQmFycmVuUGFyZW50KCkgY29uc3Q7CisgICAgdm9pZCBhbHRlclNsaWRlclZhbHVlKGJvb2wg
aW5jcmVhc2UpOworICAgIHZvaWQgY2hhbmdlVmFsdWVCeVN0ZXAoYm9vbCBpbmNyZWFzZSk7Cisg
ICAgYm9vbCBpc0FSSUFSYW5nZSgpIGNvbnN0OworICAgIGJvb2wgaXNHZW5lcmljRm9jdXNhYmxl
RWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRm9yRWxlbWVudChF
bGVtZW50KikgY29uc3Q7CisgICAgU3RyaW5nIGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdDsKKyAgICB2b2lkIGFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+
JiBlbGVtZW50cykgY29uc3Q7CisgICAgU3RyaW5nIGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZv
ckVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25zdDsKKyAgICB2b2lkIGVs
ZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cywgY29uc3QgUXVh
bGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgRWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0
dG9uKCkgY29uc3Q7CisgICAgRWxlbWVudCogbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0
OworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1lbnVCdXR0b25Gb3JNZW51KCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgTm9kZSogbV9ub2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMjgzMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsNjYgKzQ3Nyw3IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICAKICAgICByZXR1
cm4gMDsKIH0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1dlYkFyZWEoKSBj
b25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBXZWJBcmVhUm9sZTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ltYWdlQnV0dG9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXNOYXRpdmVJbWFnZSgpICYmIHJvbGVWYWx1ZSgpID09IEJ1dHRvblJvbGU7Ci19
Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNBbmNob3IoKSBjb25zdAotewot
ICAgIHJldHVybiAhaXNOYXRpdmVJbWFnZSgpICYmIGlzTGluaygpOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTmF0aXZlVGV4dENvbnRyb2woKSBjb25zdAotewotICAg
IHJldHVybiBtX3JlbmRlcmVyLT5pc1RleHRDb250cm9sKCk7Ci19CiAgICAgCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAotewotICAgIGlmICgh
bm9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5w
dXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50
LT5pc1NlYXJjaEZpZWxkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gU29tZSB3
ZWJzaXRlcyBkb24ndCBsYWJlbCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2ZXIs
IHRoZXkgd2lsbAotICAgIC8vIHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhlIGZv
cm0gb3IgaW5wdXQgdHlwZS4gVGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNlLAotICAgIC8vIGJ1
dCBpdCB3aWxsIGNhdGNoIGdvb2dsZS5jb20gZm9yIGV4YW1wbGUuCi0gICAgCi0gICAgLy8gQ2hl
Y2sgdGhlIG5vZGUgbmFtZSBvZiB0aGUgaW5wdXQgdHlwZSwgc29tZXRpbWVzIGl0J3MgInNlYXJj
aCIuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0cmlidXRlID0gZ2V0QXR0cmlidXRl
KG5hbWVBdHRyKTsKLSAgICBpZiAobmFtZUF0dHJpYnV0ZS5jb250YWlucygic2VhcmNoIiwgZmFs
c2UpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBDaGVjayB0aGUgZm9ybSBh
Y3Rpb24gYW5kIHRoZSBuYW1lLCB3aGljaCB3aWxsIHNvbWV0aW1lcyBiZSAic2VhcmNoIi4KLSAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBpbnB1dEVsZW1lbnQtPmZvcm0oKTsKLSAgICBpZiAo
Zm9ybSAmJiAoZm9ybS0+bmFtZSgpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkgfHwgZm9ybS0+
YWN0aW9uKCkuY29udGFpbnMoInNlYXJjaCIsIGZhbHNlKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVuZGVy
ZXItPmlzQm94TW9kZWxPYmplY3QoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVy
ZXIpLT5pc0ltYWdlKCk7Ci19ICAgIAotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc0ltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm9sZVZhbHVlKCkgPT0gSW1hZ2VS
b2xlOwotfQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQXR0YWNobWVudCgp
IGNvbnN0CiB7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVyQm94
TW9kZWxPYmplY3QoKTsKQEAgLTU0OCwyMSArNDg5LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc0F0dGFjaAogICAgIHJldHVybiBpc1dpZGdldCAmJiBhcmlhUm9sZUF0dHJp
YnV0ZSgpID09IFVua25vd25Sb2xlOwogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmVuZGVyZXIpOwot
ICAgIGlmICghbV9yZW5kZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPmlzSFRN
TEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhcmlhUm9sZUF0dHJp
YnV0ZSgpICE9IFVua25vd25Sb2xlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRF
bGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpOwotfQotICAgIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpbGVVcGxvYWRCdXR0b24oKSBjb25z
dAogewogICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPm5vZGUoKSAmJiBtX3JlbmRl
cmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CkBAIC01NzMsMTQ3ICs0OTksNiBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRmlsZVVwCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0lucHV0SW1h
Z2UoKSBjb25zdAotewotICAgIE5vZGUqIGVsZW1lbnROb2RlID0gbm9kZSgpOwotICAgIGlmIChy
b2xlVmFsdWUoKSA9PSBCdXR0b25Sb2xlICYmIGVsZW1lbnROb2RlICYmIGVsZW1lbnROb2RlLT5o
YXNUYWdOYW1lKGlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50Tm9kZSk7Ci0gICAgICAgIHJl
dHVybiBpbnB1dC0+aXNJbWFnZUJ1dHRvbigpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNQcm9ncmVzc0luZGlj
YXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFByb2dyZXNzSW5kaWNh
dG9yUm9sZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1NsaWRlcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IFNsaWRlclJvbGU7Ci19Ci0KLWJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNZW51UmVsYXRlZCgpIGNvbnN0Ci17Ci0g
ICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwotICAgIHJldHVybiByb2xl
ID09IE1lbnVSb2xlIAotICAgICAgICB8fCByb2xlID09IE1lbnVCYXJSb2xlCi0gICAgICAgIHx8
IHJvbGUgPT0gTWVudUJ1dHRvblJvbGUKLSAgICAgICAgfHwgcm9sZSA9PSBNZW51SXRlbVJvbGU7
Ci19ICAgIAotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWVudSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IE1lbnVSb2xlOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWVudUJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJv
bGVWYWx1ZSgpID09IE1lbnVCYXJSb2xlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzTWVudUJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09
IE1lbnVCdXR0b25Sb2xlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TWVudUl0ZW0oKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBNZW51SXRlbVJv
bGU7Ci19Ci0gICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1ByZXNzZWQo
KSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICBpZiAocm9sZVZhbHVlKCkg
IT0gQnV0dG9uUm9sZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIElmIHRoaXMgaXMgYW4gQVJJQSBidXR0b24sIGNoZWNrIHRoZSBhcmlhLXBy
ZXNzZWQgYXR0cmlidXRlIHJhdGhlciB0aGFuIG5vZGUoKS0+YWN0aXZlKCkKLSAgICBpZiAoYXJp
YVJvbGVBdHRyaWJ1dGUoKSA9PSBCdXR0b25Sb2xlKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShnZXRBdHRyaWJ1dGUoYXJpYV9wcmVzc2VkQXR0ciksICJ0cnVlIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiBub2RlLT5hY3RpdmUoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAg
ICBpZiAoIW1fcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lu
cHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRpbygp
IGNvbnN0Ci17Ci0gICAgTm9kZSogZWxlbWVudE5vZGUgPSBub2RlKCk7Ci0gICAgaWYgKGVsZW1l
bnROb2RlKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZWxlbWVudE5vZGUt
PnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChpbnB1dCkKLSAgICAgICAgICAgIHJldHVy
biBpbnB1dC0+aXNDaGVja2JveCgpIHx8IGlucHV0LT5pc1JhZGlvQnV0dG9uKCk7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0g
ICAgCi0gICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2Vk
bmVzcyBzZW1hbnRpY3MKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2Rl
LT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKTsKLQotICAgIC8vIEVsc2UsIGlm
IHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywgcmVzcGVjdCB0aGUgYXJpYS1jaGVj
a2VkIGF0dHJpYnV0ZQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVB
dHRyaWJ1dGUoKTsKLSAgICBpZiAoYXJpYVJvbGUgPT0gUmFkaW9CdXR0b25Sb2xlIHx8IGFyaWFS
b2xlID09IENoZWNrQm94Um9sZSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0
QXR0cmlidXRlKGFyaWFfY2hlY2tlZEF0dHIpLCAidHJ1ZSIpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2Ug
aXQncyBub3QgY2hlY2tlZAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc0hvdmVyZWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRl
cmVyKTsKLSAgICByZXR1cm4gbV9yZW5kZXJlci0+bm9kZSgpICYmIG1fcmVuZGVyZXItPm5vZGUo
KS0+aG92ZXJlZCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTXVs
dGlTZWxlY3RhYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJlcik7Ci0gICAgCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTXVsdGlTZWxlY3RhYmxlID0gZ2V0QXR0cmlidXRl
KGFyaWFfbXVsdGlzZWxlY3RhYmxlQXR0cik7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFy
aWFNdWx0aVNlbGVjdGFibGUsICJ0cnVlIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShhcmlhTXVsdGlTZWxlY3RhYmxlLCAiZmFsc2UiKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghbV9yZW5kZXJlci0+aXNCb3hNb2RlbE9i
amVjdCgpIHx8ICF0b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpLT5pc0xpc3RCb3go
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3JlbmRlcmVyLT5ub2RlKCkg
JiYgdG9IVE1MU2VsZWN0RWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpLT5tdWx0aXBsZSgpOwot
fQotCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUmVhZE9ubHkoKSBjb25zdAog
ewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKQEAgLTczMCwxNSArNTE1LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1JlYWRPbgogICAgICAgICByZXR1cm4gIWRvY3VtZW50
LT5yZW5kZXJlcklzRWRpdGFibGUoKTsKICAgICB9CiAKLSAgICBpZiAobV9yZW5kZXJlci0+aXNC
b3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOwotICAgICAgICBpZiAoYm94LT5pc1Rl
eHRGaWVsZCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihib3gtPm5vZGUoKSktPnJlYWRPbmx5KCk7Ci0gICAgICAgIGlmIChib3gtPmlzVGV4dEFy
ZWEoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
Kj4oYm94LT5ub2RlKCkpLT5yZWFkT25seSgpOwotICAgIH0KLQotICAgIHJldHVybiAhbV9yZW5k
ZXJlci0+bm9kZSgpIHx8ICFtX3JlbmRlcmVyLT5ub2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgp
OworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZWFkT25seSgpOwogfQog
CiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyZWVuKCkgY29uc3QKQEAg
LTc1MSwxMDcgKzUyOCw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNPZmZT
Y3IKICAgICByZXR1cm4gdmlld1JlY3QuaXNFbXB0eSgpOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aGVhZGluZ0xldmVsKCkgY29uc3QKLXsKLSAgICAvLyBoZWFkaW5ncyBj
YW4gYmUgaW4gYmxvY2sgZmxvdyBhbmQgbm9uLWJsb2NrIGZsb3cKLSAgICBOb2RlKiBlbGVtZW50
ID0gbm9kZSgpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBIZWFkaW5nUm9sZSkKLSAgICAgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cikudG9JbnQoKTsKLQotICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKGgxVGFnKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgCi0gICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoaDJUYWcpKQotICAgICAgICByZXR1cm4gMjsKLSAgICAKLSAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykpCi0gICAgICAgIHJldHVybiAzOwotICAgIAotICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGg0VGFnKSkKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAg
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaDVUYWcpKQotICAgICAgICByZXR1cm4gNTsK
LSAgICAKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoNlRhZykpCi0gICAgICAgIHJldHVy
biA2OwotICAgIAotICAgIHJldHVybiAwOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzSGVhZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJvbGVWYWx1ZSgpID09IEhl
YWRpbmdSb2xlOwotfQotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0xp
bmsoKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBXZWJDb3JlTGlua1JvbGU7
Ci19ICAgIAotICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NvbnRyb2wo
KSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgcmV0dXJuIG5v
ZGUgJiYgKChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICB8fCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFDb250cm9sKGFyaWFSb2xlQXR0cmlidXRlKCkpKTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0ZpZWxkc2V0KCkgY29uc3QKLXsK
LSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gcmVuZGVyZXItPmlzRmllbGRzZXQoKTsKLX0KLSAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzR3JvdXAoKSBjb25zdAotewotICAgIHJldHVybiByb2xlVmFsdWUoKSA9PSBH
cm91cFJvbGU7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNlbGVjdGVkUmFkaW9CdXR0b24oKQotewotICAgIGlmICghaXNSYWRpb0dyb3VwKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0KLSAg
ICAvLyBGaW5kIHRoZSBjaGlsZCByYWRpbyBidXR0b24gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRo
ZSBpbnRWYWx1ZSA9PSAxKS4KLSAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QgPSBjaGlsZHJlbltpXS5nZXQoKTsKLSAgICAgICAgaWYgKG9iamVj
dC0+cm9sZVZhbHVlKCkgPT0gUmFkaW9CdXR0b25Sb2xlICYmIG9iamVjdC0+Y2hlY2tib3hPclJh
ZGlvVmFsdWUoKSA9PSBCdXR0b25TdGF0ZU9uKQotICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVGFiSXRlbSgpCi17Ci0gICAgaWYgKCFpc1RhYkxp
c3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgY2hpbGQgdGFi
IGl0ZW0gdGhhdCBpcyBzZWxlY3RlZCAoaWUuIHRoZSBpbnRWYWx1ZSA9PSAxKS4KLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFiczsKLSAgICB0
YWJDaGlsZHJlbih0YWJzKTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIAot
ICAgIHNpemVfdCBzaXplID0gdGFicy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gY2hp
bGRyZW5baV0uZ2V0KCk7Ci0gICAgICAgIGlmIChvYmplY3QtPmlzVGFiSXRlbSgpICYmIG9iamVj
dC0+aXNDaGVja2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQogRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaG9y
RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtODg0LDE0NSArNTYw
LDYgQEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaAogICAgIHJldHVy
biAwOwogfQogCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY3Rpb25FbGVt
ZW50KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKG5vZGUp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pihub2RlKTsKLSAgICAgICAgICAgIGlmICghaW5wdXQtPmRpc2FibGVkKCkgJiYgKGlzQ2hlY2ti
b3hPclJhZGlvKCkgfHwgaW5wdXQtPmlzVGV4dEJ1dHRvbigpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5wdXQ7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShidXR0b25U
YWcpKQotICAgICAgICAgICAgcmV0dXJuIHRvRWxlbWVudChub2RlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoaXNGaWxlVXBsb2FkQnV0dG9uKCkpCi0gICAgICAgIHJldHVybiB0b0VsZW1lbnQobV9yZW5k
ZXJlci0+bm9kZSgpKTsKLSAgICAgICAgICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojppc0FSSUFJbnB1dChhcmlhUm9sZUF0dHJpYnV0ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRvRWxl
bWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgaWYgKGlzSW1hZ2VCdXR0b24oKSkKLSAg
ICAgICAgcmV0dXJuIHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOwotICAgIAotICAgIGlm
IChtX3JlbmRlcmVyLT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChtX3JlbmRlcmVyKS0+aXNNZW51TGlzdCgpKQotICAgICAgICByZXR1cm4gdG9FbGVtZW50KG1f
cmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7Ci0gICAgY2Fz
ZSBCdXR0b25Sb2xlOgotICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgotICAgIGNhc2UgVGFiUm9s
ZToKLSAgICBjYXNlIE1lbnVJdGVtUm9sZToKLSAgICBjYXNlIExpc3RJdGVtUm9sZToKLSAgICAg
ICAgcmV0dXJuIHRvRWxlbWVudChtX3JlbmRlcmVyLT5ub2RlKCkpOyAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgRWxlbWVudCogZWx0ID0gYW5jaG9yRWxl
bWVudCgpOwotICAgIGlmICghZWx0KQotICAgICAgICBlbHQgPSBtb3VzZUJ1dHRvbkxpc3RlbmVy
KCk7Ci0gICAgcmV0dXJuIGVsdDsKLX0KLQotRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcigpIGNvbnN0Ci17Ci0gICAgTm9kZSogbm9kZSA9IG1f
cmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIC8vIGNoZWNrIGlmIG91ciBwYXJlbnQgaXMgYSBtb3VzZSBidXR0b24gbGlzdGVuZXIK
LSAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIEZJWE1FOiBEbyB0aGUgY29udGludWF0aW9uIHNlYXJjaCBsaWtlIGFuY2hv
ckVsZW1lbnQgZG9lcwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKTsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCkgfHwgZWxlbWVudC0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpIHx8IGVsZW1lbnQtPmdldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkpCi0gICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphbHRlclNsaWRlclZhbHVlKGJvb2wgaW5jcmVhc2UpCi17Ci0gICAg
aWYgKHJvbGVWYWx1ZSgpICE9IFNsaWRlclJvbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZ2V0QXR0cmlidXRlKHN0ZXBBdHRyKS5pc0VtcHR5KCkpCi0gICAgICAgIGNoYW5nZVZhbHVl
QnlTdGVwKGluY3JlYXNlKTsKLSAgICBlbHNlCi0gICAgICAgIGNoYW5nZVZhbHVlQnlQZXJjZW50
KGluY3JlYXNlID8gNSA6IC01KTsKLX0KLSAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aW5jcmVtZW50KCkKLXsKLSAgICBhbHRlclNsaWRlclZhbHVlKHRydWUpOwotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRlY3JlbWVudCgpCi17Ci0gICAgYWx0ZXJT
bGlkZXJWYWx1ZShmYWxzZSk7Ci19Ci0KLXN0YXRpYyBFbGVtZW50KiBzaWJsaW5nV2l0aEFyaWFS
b2xlKFN0cmluZyByb2xlLCBOb2RlKiBub2RlKQotewotICAgIE5vZGUqIHNpYmxpbmcgPSBub2Rl
LT5wYXJlbnROb2RlKCktPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoc2libGluZykgewotICAg
ICAgICBpZiAoc2libGluZy0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNpYmxpbmdBcmlhUm9sZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzaWJs
aW5nKS0+Z2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4oc2libGluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgc2libGlu
ZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwot
fQotCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51RWxlbWVudEZvck1l
bnVCdXR0b24oKSBjb25zdAotewotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpICE9IE1lbnVC
dXR0b25Sb2xlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzaWJsaW5nV2l0aEFy
aWFSb2xlKCJtZW51IiwgcmVuZGVyZXIoKS0+bm9kZSgpKTsKLX0KLQotQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWVudUZvck1lbnVCdXR0b24oKSBjb25z
dAotewotICAgIEVsZW1lbnQqIG1lbnUgPSBtZW51RWxlbWVudEZvck1lbnVCdXR0b24oKTsKLSAg
ICBpZiAobWVudSAmJiBtZW51LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShtZW51KTsKLSAgICByZXR1cm4gMDsKLX0KLQotRWxlbWVudCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0
Ci17Ci0gICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gTWVudVJvbGUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIHJldHVybiBzaWJsaW5nV2l0aEFyaWFSb2xlKCJtZW51aXRlbSIs
IHJlbmRlcmVyKCktPm5vZGUoKSk7ICAgIAotfQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptZW51QnV0dG9uRm9yTWVudSgpIGNvbnN0Ci17Ci0gICAg
RWxlbWVudCogbWVudUl0ZW0gPSBtZW51SXRlbUVsZW1lbnRGb3JNZW51KCk7Ci0KLSAgICBpZiAo
bWVudUl0ZW0gJiYgbWVudUl0ZW0tPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgLy8gQVJJQSBqdXN0
IGhhcyBnZW5lcmljIG1lbnUgaXRlbXMuICBBcHBLaXQgbmVlZHMgdG8ga25vdyBpZiB0aGlzIGlz
IGEgdG9wIGxldmVsIGl0ZW1zIGxpa2UgTWVudUJhckJ1dHRvbiBvciBNZW51QmFySXRlbQotICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51SXRlbUFYID0gYXhPYmplY3RDYWNoZSgpLT5n
ZXRPckNyZWF0ZShtZW51SXRlbSk7Ci0gICAgICAgIGlmIChtZW51SXRlbUFYLT5pc01lbnVCdXR0
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBtZW51SXRlbUFYOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0xMDYxLDQwICs1OTgsNiBAQCBTdHJpbmcg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGVscFRlCiAgICAgCiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQotICAgIAotdW5zaWduZWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGllcmFy
Y2hpY2FsTGV2ZWwoKSBjb25zdAotewotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIFN0cmlu
ZyBhcmlhTGV2ZWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXJpYV9sZXZlbEF0dHIpOwotICAg
IGlmICghYXJpYUxldmVsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGFyaWFMZXZlbC50b0lu
dCgpOwotICAgIAotICAgIC8vIE9ubHkgdHJlZSBpdGVtIHdpbGwgY2FsY3VsYXRlIGl0cyBsZXZl
bCB0aHJvdWdoIHRoZSBET00gY3VycmVudGx5LgotICAgIGlmIChyb2xlVmFsdWUoKSAhPSBUcmVl
SXRlbVJvbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIC8vIEhpZXJhcmNoeSBsZXZl
bGluZyBzdGFydHMgYXQgMC4KLSAgICAvLyBXZSBtZWFzdXJlIHRyZWUgaGllcmFyY2h5IGJ5IHRo
ZSBudW1iZXIgb2YgZ3JvdXBzIHRoYXQgdGhlIGl0ZW0gaXMgd2l0aGluLgotICAgIHVuc2lnbmVk
IGxldmVsID0gMDsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmpl
Y3QoKTsKLSAgICB3aGlsZSAocGFyZW50KSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBh
cmVudFJvbGUgPSBwYXJlbnQtPnJvbGVWYWx1ZSgpOwotICAgICAgICBpZiAocGFyZW50Um9sZSA9
PSBHcm91cFJvbGUpCi0gICAgICAgICAgICBsZXZlbCsrOwotICAgICAgICBlbHNlIGlmIChwYXJl
bnRSb2xlID09IFRyZWVSb2xlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAg
ICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbGV2ZWw7Ci19CiAKIHN0YXRpYyBUZXh0SXRlcmF0b3JCZWhhdmlvciB0ZXh0SXRlcmF0b3JC
ZWhhdmlvckZvclRleHRSYW5nZSgpCiB7CkBAIC0xMTQ2LDU5ICs2NDksNiBAQCBOb2RlKiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlKCkgCiAgICAgcmV0dXJuIG1fcmVuZGVyZXIgPyBt
X3JlbmRlcmVyLT5ub2RlKCkgOiAwOyAKIH0gICAgCiAgICAgCi1BY2Nlc3NpYmlsaXR5QnV0dG9u
U3RhdGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2hlY2tib3hPclJhZGlvVmFsdWUoKSBj
b25zdAotewotICAgIGlmIChpc05hdGl2ZUNoZWNrYm94T3JSYWRpbygpKQotICAgICAgICByZXR1
cm4gaXNDaGVja2VkKCkgPyBCdXR0b25TdGF0ZU9uIDogQnV0dG9uU3RhdGVPZmY7Ci0gICAgCi0g
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7Ci19
Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2YWx1ZURlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICBpZiAoIWlzQVJJQVJhbmdlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICAKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyaWFfdmFsdWV0ZXh0QXR0cikuc3Ry
aW5nKCk7Ci19Ci0gICAgCi1mbG9hdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdGVwVmFs
dWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzdGVwQXR0ciku
dG9GbG9hdCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQVJJQVJh
bmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hcmlhUm9sZSA9PSBQcm9ncmVzc0luZGljYXRv
clJvbGUKLSAgICAgICAgfHwgbV9hcmlhUm9sZSA9PSBTbGlkZXJSb2xlCi0gICAgICAgIHx8IG1f
YXJpYVJvbGUgPT0gU2Nyb2xsQmFyUm9sZQotICAgICAgICB8fCBtX2FyaWFSb2xlID09IFNwaW5C
dXR0b25Sb2xlOwotfQotICAgIAotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmFs
dWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAgICBy
ZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0dHIp
LnRvRmxvYXQoKTsKLX0KLQotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF4VmFs
dWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAgICBy
ZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1heEF0dHIp
LnRvRmxvYXQoKTsKLX0KLQotZmxvYXQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWluVmFs
dWVGb3JSYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0FSSUFSYW5nZSgpKQotICAgICAgICBy
ZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1pbkF0dHIp
LnRvRmxvYXQoKTsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmlu
Z1ZhbHVlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0xMjU3LDk5ICs3MDcs
NiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nCiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIEFSSUEgYWNj
ZXNzaWJsZSBuYW1lIGFzIGRlc2NyaWJlZCBieSB0aGUgTW96aWxsYQotLy8gQVJJQSBJbXBsZW1l
bnRlcidzIEd1aWRlLgotc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZSog
bm9kZSkKLXsKLSAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gdG9U
ZXh0KG5vZGUpLT5kYXRhKCk7Ci0KLSAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSktPnZh
bHVlKCk7Ci0KLSAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFs
dEF0dHIpOwotICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4g
YWx0OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKFZl
Y3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICB1bnNpZ25lZCBzaXplID0gZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRWxlbWVudCogaWRFbGVtZW50
ID0gZWxlbWVudHNbaV07Ci0KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5hbWVG
b3JOb2RlKGlkRWxlbWVudCkpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBpZEVsZW1lbnQtPmZp
cnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoaWRFbGVtZW50KSkKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShuKSk7Ci0KLSAgICAg
ICAgaWYgKGkgIT0gc2l6ZSAtIDEpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwot
ICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+
JiBlbGVtZW50cywgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdAotewotICAg
IE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRyZWVTY29wZSogc2Nv
cGUgPSBub2RlLT50cmVlU2NvcGUoKTsKLSAgICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGlkTGlzdCA9IGdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLnN0cmlu
ZygpOwotICAgIGlmIChpZExpc3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaWRMaXN0LnJlcGxhY2UoJ1xuJywgJyAnKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBpZFZlY3Rv
cjsKLSAgICBpZExpc3Quc3BsaXQoJyAnLCBpZFZlY3Rvcik7Ci0gICAgCi0gICAgdW5zaWduZWQg
c2l6ZSA9IGlkVmVjdG9yLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBpZE5hbWUoaWRWZWN0b3JbaV0pOwotICAg
ICAgICBFbGVtZW50KiBpZEVsZW1lbnQgPSBzY29wZS0+Z2V0RWxlbWVudEJ5SWQoaWROYW1lKTsK
LSAgICAgICAgaWYgKGlkRWxlbWVudCkKLSAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChpZEVs
ZW1lbnQpOwotICAgIH0KLX0KLSAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKSBjb25zdAot
ewotICAgIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShlbGVtZW50cywgYXJpYV9sYWJlbGVkYnlBdHRy
KTsKLSAgICBpZiAoIWVsZW1lbnRzLnNpemUoKSkKLSAgICAgICAgZWxlbWVudHNGcm9tQXR0cmli
dXRlKGVsZW1lbnRzLCBhcmlhX2xhYmVsbGVkYnlBdHRyKTsKLX0KLSAgIAotU3RyaW5nIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBjb25zdAotewot
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7Ci0gICAgYXJpYUxhYmVsZWRCeUVsZW1lbnRz
KGVsZW1lbnRzKTsKLSAgICAKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9y
RWxlbWVudHMoZWxlbWVudHMpOwotfQotCi1zdGF0aWMgSFRNTExhYmVsRWxlbWVudCogbGFiZWxG
b3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0g
ICAgdW5zaWduZWQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1l
KGxhYmVsVGFnKSkgewotICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0
aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBp
ZiAobGFiZWwtPmNvbnRyb2woKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBs
YWJlbDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLSAgICAKIEhU
TUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxhYmVsRWxlbWVudENv
bnRhaW5lcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtMTM2OCw1NSArNzI1
LDYgQEAgSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iagogICAgIHJldHVy
biAwOwogfQogCi1TdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGUoKSBjb25z
dAotewotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSByb2xlVmFsdWUoKTsKLSAgICAKLSAg
ICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5vZGUq
IG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgYm9vbCBpc0lucHV0VGFnID0gbm9kZS0+aGFzVGFnTmFt
ZShpbnB1dFRhZyk7Ci0gICAgaWYgKGlzSW5wdXRUYWcpIHsKLSAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSk7Ci0gICAg
ICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXQt
PnZhbHVlV2l0aERlZmF1bHQoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzSW5wdXRUYWcgfHwg
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBUklBSW5wdXQoYXJpYVJvbGVBdHRyaWJ1dGUoKSkgfHwg
aXNDb250cm9sKCkpIHsKLSAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZv
ckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKLSAgICAgICAgaWYgKGxhYmVs
ICYmICFleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBsYWJlbC0+
aW5uZXJUZXh0KCk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAocm9sZSkgewotICAgIGNhc2Ug
QnV0dG9uUm9sZToKLSAgICBjYXNlIExpc3RCb3hPcHRpb25Sb2xlOgotICAgIGNhc2UgTWVudUl0
ZW1Sb2xlOgotICAgIGNhc2UgTWVudUJ1dHRvblJvbGU6Ci0gICAgY2FzZSBSYWRpb0J1dHRvblJv
bGU6Ci0gICAgY2FzZSBDaGVja0JveFJvbGU6Ci0gICAgY2FzZSBUYWJSb2xlOgotICAgIGNhc2Ug
UG9wVXBCdXR0b25Sb2xlOgotICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgIAotICAgIGlmIChpc0hlYWRpbmco
KSB8fCBpc0xpbmsoKSkKLSAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQoKTsKLQotICAg
IC8vIElmIGl0J3MgZm9jdXNhYmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIG9yIGEg
a25vd24gY29udHJvbCB0eXBlLCB0aGVuIGl0IHdpbGwgYXBwZWFyIHRvCi0gICAgLy8gdGhlIHVz
ZXIgYXMgYSBzaW5nbGUgYXRvbWljIG9iamVjdCwgc28gd2Ugc2hvdWxkIHVzZSBpdHMgdGV4dCBh
cyB0aGUgZGVmYXVsdCB0aXRsZS4KLSAgICBpZiAoaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgp
KQotICAgICAgICByZXR1cm4gdGV4dFVuZGVyRWxlbWVudCgpOwotCi0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYURlc2NyaWJl
ZEJ5QXR0cmlidXRlKCkgY29uc3QKIHsKICAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRzOwpA
QCAtMTQyNSwxOSArNzMzLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFy
aWFEZQogICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyhlbGVt
ZW50cyk7CiB9CiAgICAgCi1TdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYUFj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGFyaWFMYWJlbGVk
QnkgPSBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCk7Ci0gICAgaWYgKCFhcmlhTGFiZWxlZEJ5Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGFyaWFMYWJlbGVkQnk7Ci0KLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFyaWFMYWJlbCA9IGdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7Ci0gICAg
aWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwotICAg
IAotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OndlYkFyZWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIC8v
IFRoZSBXZWJBcmVhIGRlc2NyaXB0aW9uIHNob3VsZCBmb2xsb3cgdGhpcyBvcmRlcjoKQEAgLTE0
OTAsNDAgKzc4NSwxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNz
CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICAv
LyBTdGF0aWMgdGV4dCBzaG91bGQgbm90IGhhdmUgYSBkZXNjcmlwdGlvbiwgaXQgc2hvdWxkIG9u
bHkgaGF2ZSBhIHN0cmluZ1ZhbHVlLgotICAgIGlmIChyb2xlVmFsdWUoKSA9PSBTdGF0aWNUZXh0
Um9sZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIFN0cmluZyBhcmlhRGVz
Y3JpcHRpb24gPSBhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCFhcmlh
RGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYURlc2NyaXB0aW9uOwot
ICAgIAotICAgIGlmIChpc0ltYWdlKCkgfHwgaXNJbnB1dEltYWdlKCkgfHwgaXNOYXRpdmVJbWFn
ZSgpIHx8IGlzQ2FudmFzKCkpIHsKLQotICAgICAgICAvLyBJbWFnZXMgc2hvdWxkIHVzZSBhbHQg
YXMgbG9uZyBhcyB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQsIGV2ZW4gaWYgZW1wdHkuCi0gICAg
ICAgIC8vIE90aGVyd2lzZSwgaXQgc2hvdWxkIGZhbGxiYWNrIHRvIG90aGVyIG1ldGhvZHMsIGxp
a2UgdGhlIHRpdGxlIGF0dHJpYnV0ZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQg
PSBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7Ci0gICAgICAgIGlmICghYWx0LmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGFsdDsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAg
ICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwotICAgIGlmIChub2RlICYmIG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzTWF0aE1M
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjphbHR0
ZXh0QXR0cik7Ci0jZW5kaWYKLSAgICAKICAgICBpZiAoaXNXZWJBcmVhKCkpCiAgICAgICAgIHJl
dHVybiB3ZWJBcmVhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCk7Ci0gICAgCi0gICAgLy8gQW4g
ZWxlbWVudCdzIGRlc2NyaXB0aXZlIHRleHQgaXMgY29tcHJpc2VkIG9mIHRpdGxlKCkgKHdoYXQn
cyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4pIGFuZCBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSAo
b3RoZXIgZGVzY3JpcHRpdmUgdGV4dCkuCi0gICAgLy8gQm90aCBhcmUgdXNlZCB0byBnZW5lcmF0
ZSB3aGF0IGEgc2NyZWVuIHJlYWRlciBzcGVha3MuCi0gICAgLy8gSWYgdGhpcyBwb2ludCBpcyBy
ZWFjaGVkIChpLmUuIHRoZXJlJ3Mgbm8gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKSBhbmQgdGhl
cmUncyBubyB0aXRsZSgpLCB3ZSBzaG91bGQgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIHRpdGxlIGF0
dHJpYnV0ZS4KLSAgICAvLyBUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG5vcm1hbGx5IHVzZWQgYXMg
aGVscCB0ZXh0IChiZWNhdXNlIGl0IGlzIGEgdG9vbHRpcCksIGJ1dCBpZiB0aGVyZSBpcyBub3Ro
aW5nIGVsc2UgYXZhaWxhYmxlLCB0aGlzIHNob3VsZCBiZSB1c2VkIChhY2NvcmRpbmcgdG8gQVJJ
QSkuCi0gICAgaWYgKHRpdGxlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHRpdGxlQXR0cik7Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKIH0K
IAogTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZGluZ0JveFJlY3Qo
KSBjb25zdApAQCAtMTgxMCwxNiArMTA3NSw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YXJpYUlzSGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdAotewotICAg
IGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gcGFyZW50T2JqZWN0KCk7IG9iamVj
dDsgb2JqZWN0ID0gb2JqZWN0LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoIW9iamVj
dC0+Y2FuSGF2ZUNoaWxkcmVuKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0FsbG93ZWRDaGlsZE9mVHJlZSgpIGNvbnN0CiB7CiAgICAgLy8gRGV0ZXJtaW5l
IGlmIHRoaXMgaXMgaW4gYSB0cmVlLiBJZiBzbywgd2UgYXBwbHkgc3BlY2lhbCBiZWhhdmlvciB0
byBtYWtlIGl0IHdvcmsgbGlrZSBhbiBBWE91dGxpbmUuCkBAIC0yMDU5LDI3ICsxMzE0LDEwIEBA
IGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXlvdXRDb3UKIAogU3RyaW5nIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHQoKSBjb25zdAogewotICAgIC8vIElmIHRoaXMgaXMg
YSB1c2VyIGRlZmluZWQgc3RhdGljIHRleHQsIHVzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIGNvbXB1
dGF0aW9uLgotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpID09IFN0YXRpY1RleHRSb2xlKQot
ICAgICAgICByZXR1cm4gYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpOwotICAgIAotICAg
IGlmICghaXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICBp
ZiAoaXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybiBwYXNzd29yZEZpZWxkVmFsdWUo
KTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNOYXRpdmVUZXh0Q29udHJv
bCgpKQotICAgICAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChtX3JlbmRlcmVyKS0+dGV4
dEZvcm1Db250cm9sRWxlbWVudCgpLT52YWx1ZSgpOwotCi0gICAgaWYgKCFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pbm5lclRleHQoKTsKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OnRleHQoKTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKQEAgLTIyMzcsMTggKzE0NzUsNiBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmVsZW1lbnRBCiAgICAgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSwgInRydWUiKTsKIH0KICAgICAK
LWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX3JlcXVpcmVkQXR0ciks
ICJ0cnVlIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIE5vZGUqIG4gPSBub2Rl
KCk7Ci0gICAgaWYgKG4gJiYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG4pLT5yZXF1aXJlZCgpOwotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Nl
bGVjdGVkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCkBAIC0yMzQ1LDI5ICsxNTcx
LDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRGb2N1cwogICAgIH0KIH0K
IAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5U3RlcChib29s
IGluY3JlYXNlKQotewotICAgIGZsb2F0IHN0ZXAgPSBzdGVwVmFsdWVGb3JSYW5nZSgpOwotICAg
IGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOwotICAgIAotICAgIHZhbHVlICs9IGluY3Jl
YXNlID8gc3RlcCA6IC1zdGVwOwotCi0gICAgc2V0VmFsdWUoU3RyaW5nOjpudW1iZXIodmFsdWUp
KTsKLSAgICAKLSAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9yZW5kZXJl
ciwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwotfQotICAgIAotdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGFuZ2VWYWx1ZUJ5UGVyY2VudChmbG9hdCBwZXJj
ZW50Q2hhbmdlKQotewotICAgIGZsb2F0IHJhbmdlID0gbWF4VmFsdWVGb3JSYW5nZSgpIC0gbWlu
VmFsdWVGb3JSYW5nZSgpOwotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOwotICAg
IAotICAgIHZhbHVlICs9IHJhbmdlICogKHBlcmNlbnRDaGFuZ2UgLyAxMDApOwotICAgIHNldFZh
bHVlKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0gICAgCi0gICAgYXhPYmplY3RDYWNoZSgpLT5w
b3N0Tm90aWZpY2F0aW9uKG1fcmVuZGVyZXIsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2Vk
LCB0cnVlKTsKLX0KLQogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBzZWxlY3RlZFJvd3MpCiB7CiAgICAg
Ly8gU2V0dGluZyBzZWxlY3RlZCBvbmx5IG1ha2VzIHNlbnNlIGluIHRyZWVzIGFuZCB0YWJsZXMg
KGFuZCB0cmVlLXRhYmxlcykuCkBAIC0yNDI3LDIwICsxNjMwLDYgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzdXBwb3J0cwogICAgIHJldHVybiAhYXJpYU93bnMuaXNFbXB0eSgp
OwogfQogICAgIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0VuYWJsZWQoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICAKLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGFyaWFfZGlzYWJsZWRBdHRyKSwgInRydWUiKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNF
bmFibGVkRm9ybUNvbnRyb2woKTsKLX0KLQogUmVuZGVyVmlldyogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6dG9wUmVuZGVyZXIoKSBjb25zdAogewogICAgIERvY3VtZW50KiB0b3BEb2MgPSB0
b3BEb2N1bWVudCgpOwpAQCAtMzEzOCwzNSArMjMyNyw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNEZXNjZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBJZiBpdCdzIGEgY29udHJvbCwgaXQncyBub3QgZ2VuZXJpYy4KLSAgICBpZiAo
aXNDb250cm9sKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIGl0IGhhcyBh
biBhcmlhIHJvbGUsIGl0J3Mgbm90IGdlbmVyaWMuCi0gICAgaWYgKG1fYXJpYVJvbGUgIT0gVW5r
bm93blJvbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBjb250ZW50
IGVkaXRhYmxlIGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhpcyBlbGVtZW50LCB0aGF0J3MgdGhlIHJl
YXNvbgotICAgIC8vIGl0J3MgZm9jdXNhYmxlLCBhbmQgZXhpc3RpbmcgbG9naWMgc2hvdWxkIGhh
bmRsZSB0aGlzIGNhc2UgYWxyZWFkeSAtIHNvIGl0J3Mgbm90IGEKLSAgICAvLyBnZW5lcmljIGZv
Y3VzYWJsZSBlbGVtZW50LgotICAgIGlmIChoYXNDb250ZW50RWRpdGFibGVBdHRyaWJ1dGVTZXQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHdlYiBhcmVhIGFuZCBib2R5
IGVsZW1lbnQgYXJlIGJvdGggZm9jdXNhYmxlLCBidXQgZXhpc3RpbmcgbG9naWMgaGFuZGxlcyB0
aGVzZQotICAgIC8vIGNhc2VzIGFscmVhZHksIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0
aGVtIGhlcmUuCi0gICAgaWYgKHJvbGVWYWx1ZSgpID09IFdlYkFyZWFSb2xlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoYm9keVRh
ZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotICAgIAog
QWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0ZXJtaW5lQWNj
ZXNzaWJpbGl0eVJvbGUoKQogewogICAgIGlmICghbV9yZW5kZXJlcikKQEAgLTM0MzcsMjggKzI1
OTcsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbnRlbnRDCiAgICAgICAg
ICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihyZW5kZXJQYXJlbnQsIEFYT2JqZWN0Q2FjaGU6
OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKICAgICB9CiB9Ci0gICAgCi1ib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gRWxlbWVudHMgdGhh
dCBzaG91bGQgbm90IGhhdmUgY2hpbGRyZW4KLSAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7Ci0g
ICAgY2FzZSBJbWFnZVJvbGU6Ci0gICAgY2FzZSBCdXR0b25Sb2xlOgotICAgIGNhc2UgUG9wVXBC
dXR0b25Sb2xlOgotICAgIGNhc2UgQ2hlY2tCb3hSb2xlOgotICAgIGNhc2UgUmFkaW9CdXR0b25S
b2xlOgotICAgIGNhc2UgVGFiUm9sZToKLSAgICBjYXNlIFN0YXRpY1RleHRSb2xlOgotICAgIGNh
c2UgTGlzdEJveE9wdGlvblJvbGU6Ci0gICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
fQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsZWFyQ2hpbGRyZW4oKQogewpA
QCAtMzU5Niw3ICsyNzM0LDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2hpbGQKICAgICB1cGRhdGVBdHRhY2htZW50Vmlld1BhcmVudHMoKTsKICNlbmRpZgogfQotICAg
ICAgICAKKworYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4o
KSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKTsK
K30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojphcmlh
TGl2ZVJlZ2lvblN0YXR1cygpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGxpdmVSZWdpb25TdGF0dXNBc3NlcnRpdmUsICgiYXNzZXJ0aXZlIikp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEyODMwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw0NCArNjYsMTYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGluaXQo
KTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNBbmNob3IoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNBdHRhY2htZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSGVhZGluZygp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0xpbmsoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNJbWFnZUJ1dHRvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTmF0aXZlSW1hZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTmF0aXZl
VGV4dENvbnRyb2woKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1dlYkFyZWEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNGaWxlVXBsb2FkQnV0dG9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSW5wdXRJ
bWFnZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyZXNzSW5kaWNhdG9yKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzTWVudVJlbGF0ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW51KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzTWVudUJhcigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c01lbnVCdXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW51SXRlbSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2woKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNGaWVsZHNldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0dyb3VwKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
U2VsZWN0ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0hv
dmVyZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
TXVsdGlTZWxlY3RhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzT2ZmU2NyZWVuKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJlc3NlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWRPbmx5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVW52aXNpdGVkKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVmlzaXRlZCgpIGNvbnN0OyAgICAgICAgCi0gICAg
dmlydHVhbCBib29sIGlzUmVxdWlyZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNMaW5r
ZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQm9sZEZvbnQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0OwpAQCAtMTIzLDE1ICs5NSw2IEBAIHB1
YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGFjY2Vzc2liaWxpdHlJc0ln
bm9yZWRCYXNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGludCBoZWFkaW5nTGV2ZWwoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja2JveE9yUmFkaW9WYWx1
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24oKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGZsb2F0IHZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZs
b2F0IG1heFZhbHVlRm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IG1pblZhbHVl
Rm9yUmFuZ2UoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHN0ZXBWYWx1ZUZvclJhbmdlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFJhZGlvQnV0
dG9uKCk7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzZWxlY3RlZFRhYkl0ZW0o
KTsKICAgICB2aXJ0dWFsIGludCBsYXlvdXRDb3VudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91
YmxlIGVzdGltYXRlZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0OwogICAgIApAQCAtMTU2LDEyICsx
MTksOCBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcm9vdCBhY2Nl
c3NpYmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhpdCB0ZXN0LgogICAgIHZpcnR1YWwgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0OwotICAg
IEVsZW1lbnQqIG1vdXNlQnV0dG9uTGlzdGVuZXIoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIGZy
YW1lVmlld0lmUmVuZGVyVmlldygpIGNvbnN0OwogICAgIHZpcnR1YWwgRWxlbWVudCogYW5jaG9y
RWxlbWVudCgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1lbnVGb3JNZW51QnV0
dG9uKCkgY29uc3Q7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWVudUJ1dHRvbkZvck1lbnUo
KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIExheW91dFJlY3QgYm91bmRpbmdCb3hSZWN0KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7CkBAIC0x
ODQsOCArMTQzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGxhaW5UZXh0UmFuZ2Ugc2VsZWN0
ZWRUZXh0UmFuZ2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBhcmlhRGVzY3Jp
YmVkQnlBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NpYmlsaXR5
RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0
OwpAQCAtMTk5LDcgKzE1Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdpZGdldCogd2lkZ2V0
Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RG9jdW1lbnRM
aW5rcyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKICAgICB2aXJ0dWFsIEZyYW1lVmll
dyogZG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGhpZXJh
cmNoaWNhbExldmVsKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDaGlsZHJlbigp
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDaGlsZHJlbklmTmVjZXNzYXJ5KCk7CkBAIC0yMDgs
MTAgKzE2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkUm93cyhBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlVmFsdWVCeVBlcmNl
bnQoZmxvYXQgcGVyY2VudENoYW5nZSk7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKQEAgLTI2Myw3ICsy
MTYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogICAgIAog
ICAgIHZvaWQgc2V0UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5k
ZXJlciA9IHJlbmRlcmVyOyB9Ci0gICAgdm9pZCBhcmlhTGFiZWxlZEJ5RWxlbWVudHMoVmVjdG9y
PEVsZW1lbnQqPiYgZWxlbWVudHMpIGNvbnN0OwogICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUNoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbkRpcnR5OyB9CiAgICAgU2Nyb2xsYWJsZUFy
ZWEqIGdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3Q7CiAgICAgdm9pZCBzY3Jv
bGxUbyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMjc2LDcgKzIyOCw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBhcmlhTGlzdGJveFNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJik7CiAgICAgdm9pZCBhcmlhTGlzdGJveFZpc2libGVDaGlsZHJlbihBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKICAgICBib29sIGFyaWFJc0hpZGRlbigpIGNvbnN0Owot
ICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZCYXJyZW5QYXJlbnQoKSBjb25zdDsKICAgICBib29sIGlz
QWxsb3dlZENoaWxkT2ZUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNUZXh0QWx0ZXJuYXRpdmUo
KSBjb25zdDsKICAgICBTdHJpbmcgcG9zaXRpb25hbERlc2NyaXB0aW9uRm9yTVNBQSgpIGNvbnN0
OwpAQCAtMjg1LDEzICsyMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbm9kZUlzVGV4dENvbnRy
b2woY29uc3QgTm9kZSopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1RvVXBkYXRl
Q2hpbGRyZW4oKSB7IG1fY2hpbGRyZW5EaXJ0eSA9IHRydWU7IH0KIAotICAgIEVsZW1lbnQqIG1l
bnVFbGVtZW50Rm9yTWVudUJ1dHRvbigpIGNvbnN0OwotICAgIEVsZW1lbnQqIG1lbnVJdGVtRWxl
bWVudEZvck1lbnUoKSBjb25zdDsKLQogICAgIGJvb2wgaXNUYWJJdGVtU2VsZWN0ZWQoKSBjb25z
dDsKLSAgICB2b2lkIGFsdGVyU2xpZGVyVmFsdWUoYm9vbCBpbmNyZWFzZSk7Ci0gICAgdm9pZCBj
aGFuZ2VWYWx1ZUJ5U3RlcChib29sIGluY3JlYXNlKTsKLSAgICBib29sIGlzTmF0aXZlQ2hlY2ti
b3hPclJhZGlvKCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBjaGVja2JveE9yUmFkaW9SZWN0KCkg
Y29uc3Q7CiAgICAgdm9pZCBhZGRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGxpbmtlZFVJRWxlbWVudHMpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIGludGVybmFsTGlua0VsZW1lbnQoKSBjb25zdDsKQEAgLTMwMSw4ICsyNDYsNiBA
QCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyUGFyZW50T2JqZWN0KCkgY29uc3Q7
CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUpIGNvbnN0OwogICAgIC8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIGl0J3MgZm9jdXNh
YmxlIGJ1dCBpdCdzIG5vdCBjb250ZW50IGVkaXRhYmxlIGFuZCBpdCdzIG5vdCBhIGNvbnRyb2wg
b3IgQVJJQSBjb250cm9sLgotICAgIGJvb2wgaXNHZW5lcmljRm9jdXNhYmxlRWxlbWVudCgpIGNv
bnN0OwotICAgIGJvb2wgaXNBUklBUmFuZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgYWRkVGV4dEZp
ZWxkQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKQEAgLTMxNyw5
ICsyNjAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgZWxlbWVudEF0dHJpYnV0ZVZhbHVlKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIHNldEVsZW1lbnRBdHRyaWJ1dGVWYWx1
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCk7CiAgICAgCi0gICAgU3RyaW5nIGFjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbkZvckVsZW1lbnRzKFZlY3RvcjxFbGVtZW50Kj4gJmVsZW1lbnRzKSBj
b25zdDsKLSAgICB2b2lkIGVsZW1lbnRzRnJvbUF0dHJpYnV0ZShWZWN0b3I8RWxlbWVudCo+JiBl
bGVtZW50cywgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIFN0cmluZyBhcmlhQWNj
ZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgU3RyaW5nIHdlYkFyZWFBY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgRVNwZWFrIHNwZWFrUHJv
cGVydHkoKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODMwMykKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA5LTEyICBE
b21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBSZWZh
Y3RvciBtb3N0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgY29kZSBpbnRvIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NjMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5ldyB0ZXN0IHRoYXQgY29tcGFyZXMgYWNjZXNzaWJpbGl0eSBhdHRyaWJ1dGVzIG9mIGxv
dHMgb2YgZWxlbWVudHMKKyAgICAgICAgaW5zaWRlIGFuZCBvdXRzaWRlIG9mIGNhbnZhcyBmYWxs
YmFjayBjb250ZW50LCB0byBtYWtlIHN1cmUgdGhleSdyZQorICAgICAgICB0aGUgc2FtZS4gRGVz
aWduZWQgdG8gYmUgY3Jvc3MtcGxhdGZvcm0gYmVjYXVzZSBpdCBqdXN0IGFzc2VydHMgdGhlCisg
ICAgICAgIGF0dHJpYnV0ZXMgYXJlIHRoZSBzYW1lIGluIGJvdGggY29udGV4dHMsIHJhdGhlciB0
aGFuIGV4cGVjdGluZyBzcGVjaWZpYworICAgICAgICB2YWx1ZXMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTIuaHRtbDog
QWRkZWQuCisKIDIwMTItMDktMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjgyMjEuCkluZGV4
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFz
LWZhbGxiYWNrLWNvbnRlbnQtMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3NiBAQAorTGluayAgQnV0dG9uICBCdXR0b24gIEJ1
dHRvbiAgICAgICAgICAgICAgICAgCitGb2N1c2FibGUKK0hlYWRpbmcKKworQVJJQSBidXR0b24K
K0FSSUEgZGlzYWJsZWQgYnV0dG9uCitBUklBIGVuYWJsZWQgYnV0dG9uCitBUklBIHJlcXVpcmVk
IGJ1dHRvbgorQVJJQSB0b2dnbGUgYnV0dG9uCitBUklBIGxpbmsKK1RoaXMgdGVzdHMgYSBudW1i
ZXIgb2YgZGlmZmVyZW50IGVsZW1lbnRzIGluIGNhbnZhcyBmYWxsYmFjayBjb250ZW50IHRvIG1h
a2Ugc3VyZSB0aGVpciBhY2Nlc3NpYmxlIGF0dHJpYnV0ZXMgYXJlIGVzc2VudGlhbGx5IGlkZW50
aWNhbCB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvdXRzaWRlIG9mIGNhbnZhcyBmYWxs
YmFjayBjb250ZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworbGluazEKK1BB
U1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitsaW5rMgorUEFT
UyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVt
ZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlw
dGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxl
IGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVs
ZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50
MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3Ry
aW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJs
ZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAor
UEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBh
eEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50
Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFs
dWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitidXR0b24xCitQQVNTIGRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorYnV0dG9uMgorUEFTUyBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4
RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1l
bnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEu
dGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0
aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFT
UyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1Mg
YXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVt
ZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQy
LmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZh
bHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBh
eEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50
MS5tYXhWYWx1ZQorCitsYWJlbGVkLWJ1dHRvbjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PSBlbGVtZW50MSBpcyB0cnVlCitsYWJlbGVkLWJ1dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0
aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBh
eEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVt
ZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQx
LnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlw
dGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BB
U1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNT
IGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxl
bWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50
Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRW
YWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMg
YXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVu
dDEubWF4VmFsdWUKKworYnV0dG9uLXdpdGgtdGl0bGUxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorYnV0dG9uLXdpdGgtdGl0bGUyCitQQVNTIGRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJv
bGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlz
IGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhF
bGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEu
ZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBU
ZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1
ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFT
UyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4
RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVu
dDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZh
bHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBh
eEVsZW1lbnQxLm1heFZhbHVlCisKK3RleHQxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
PT0gZWxlbWVudDEgaXMgdHJ1ZQordGV4dDIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJv
bGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVz
Y3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNT
IGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBh
eEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50
Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIu
aXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1
aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQg
aXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVs
ZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5t
aW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUK
KworY2hlY2tib3gxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMg
dHJ1ZQorY2hlY2tib3gyCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIg
aXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4
RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQ
QVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQy
LmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5o
ZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFs
dWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBp
cyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhF
bGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVu
dDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRW
YWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BB
U1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK251bWJlcjEK
K1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitudW1iZXIy
CitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBh
eEVsZW1lbnQyLnJvbGUgaXMgYXhFbGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURl
c2NyaXB0aW9uIGlzIGF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIu
dGl0bGUgaXMgYXhFbGVtZW50MS50aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlz
IGF4RWxlbWVudDEuZGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVs
ZW1lbnQxLmhlbHBUZXh0CitQQVNTIGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50
MS5zdHJpbmdWYWx1ZQorUEFTUyBheEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlz
RW5hYmxlZAorUEFTUyBheEVsZW1lbnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVp
cmVkCitQQVNTIGF4RWxlbWVudDIuaXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQ
QVNTIGF4RWxlbWVudDIuaW50VmFsdWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVs
ZW1lbnQyLm1pblZhbHVlIGlzIGF4RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5t
YXhWYWx1ZSBpcyBheEVsZW1lbnQxLm1heFZhbHVlCisKK3JhZGlvMQorUEFTUyBkb2N1bWVudC5h
Y3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK3JhZGlvMgorUEFTUyBkb2N1bWVudC5h
Y3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlz
IGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVs
ZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVu
dDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2Ny
aXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAor
UEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BB
U1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhF
bGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1l
bnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmlu
dFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBp
cyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVt
ZW50MS5tYXhWYWx1ZQorCitzbGlkZXIxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0g
ZWxlbWVudDEgaXMgdHJ1ZQorc2xpZGVyMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09
IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9s
ZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNj
cmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1Mg
YXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4
RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQy
LnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5p
c0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVp
cmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBp
cyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxl
bWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1p
blZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQor
CitzdWJtaXQxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMgdHJ1
ZQorc3VibWl0MgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRy
dWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1l
bnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBh
eEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNj
cmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRl
eHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlz
IGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhF
bGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVu
dDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlz
Q2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4
RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCitjb21ib2JveDEKK1BB
U1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitjb21ib2JveDIK
K1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4
RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVz
Y3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50
aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMg
YXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxl
bWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQx
LnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNF
bmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWly
ZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BB
U1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxl
bWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1h
eFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworbGlzdGJveDEKK1BBU1MgZG9jdW1lbnQu
YWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCitsaXN0Ym94MgorUEFTUyBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xl
IGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBh
eEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxl
bWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRl
c2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4
dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVs
ZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQy
LmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1
ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhF
bGVtZW50MS5tYXhWYWx1ZQorCit0ZXh0YXJlYTEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCA9PSBlbGVtZW50MSBpcyB0cnVlCit0ZXh0YXJlYTIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1l
bnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5y
b2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxl
CitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgor
UEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhF
bGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxl
bWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIu
aXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0No
ZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBp
cyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVt
ZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4
VmFsdWUKKworZm9jdXNhYmxlMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1l
bnQxIGlzIHRydWUKK2ZvY3VzYWJsZTIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBl
bGVtZW50MiBpcyB0cnVlCitQQVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUK
K1BBU1MgYXhFbGVtZW50Mi5yb2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3Jp
cHRpb24KK1BBU1MgYXhFbGVtZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4
RWxlbWVudDIuZGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVs
ZW1lbnQyLmhlbHBUZXh0IGlzIGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5z
dHJpbmdWYWx1ZSBpcyBheEVsZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNF
bmFibGVkIGlzIGF4RWxlbWVudDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJl
ZCBpcyBheEVsZW1lbnQxLmlzUmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMg
YXhFbGVtZW50MS5pc0NoZWNrZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1l
bnQxLmludFZhbHVlCitQQVNTIGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5W
YWx1ZQorUEFTUyBheEVsZW1lbnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKwor
aGVhZGluZzEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVl
CitoZWFkaW5nMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRy
dWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1l
bnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBh
eEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNj
cmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRl
eHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlz
IGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhF
bGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVu
dDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlz
Q2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4
RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCithcmlhLWJ1dHRvbjEK
K1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCithcmlhLWJ1
dHRvbjIKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiBpcyB0cnVlCitQ
QVNTIGF4RWxlbWVudDIucm9sZSBpcyBheEVsZW1lbnQxLnJvbGUKK1BBU1MgYXhFbGVtZW50Mi5y
b2xlRGVzY3JpcHRpb24gaXMgYXhFbGVtZW50MS5yb2xlRGVzY3JpcHRpb24KK1BBU1MgYXhFbGVt
ZW50Mi50aXRsZSBpcyBheEVsZW1lbnQxLnRpdGxlCitQQVNTIGF4RWxlbWVudDIuZGVzY3JpcHRp
b24gaXMgYXhFbGVtZW50MS5kZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLmhlbHBUZXh0IGlz
IGF4RWxlbWVudDEuaGVscFRleHQKK1BBU1MgYXhFbGVtZW50Mi5zdHJpbmdWYWx1ZSBpcyBheEVs
ZW1lbnQxLnN0cmluZ1ZhbHVlCitQQVNTIGF4RWxlbWVudDIuaXNFbmFibGVkIGlzIGF4RWxlbWVu
dDEuaXNFbmFibGVkCitQQVNTIGF4RWxlbWVudDIuaXNSZXF1aXJlZCBpcyBheEVsZW1lbnQxLmlz
UmVxdWlyZWQKK1BBU1MgYXhFbGVtZW50Mi5pc0NoZWNrZWQgaXMgYXhFbGVtZW50MS5pc0NoZWNr
ZWQKK1BBU1MgYXhFbGVtZW50Mi5pbnRWYWx1ZSBpcyBheEVsZW1lbnQxLmludFZhbHVlCitQQVNT
IGF4RWxlbWVudDIubWluVmFsdWUgaXMgYXhFbGVtZW50MS5taW5WYWx1ZQorUEFTUyBheEVsZW1l
bnQyLm1heFZhbHVlIGlzIGF4RWxlbWVudDEubWF4VmFsdWUKKworYXJpYS1kaXNhYmxlZGJ1dHRv
bjEKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MSBpcyB0cnVlCithcmlh
LWRpc2FibGVkYnV0dG9uMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQy
IGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBh
eEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgor
UEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50
Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIu
aGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1Zh
bHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQg
aXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4
RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1l
bnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50
VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQ
QVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQorCithcmlhLWVu
YWJsZWRidXR0b24xCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbWVudDEgaXMg
dHJ1ZQorYXJpYS1lbmFibGVkYnV0dG9uMgorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09
IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxlbWVudDEucm9s
ZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLnJvbGVEZXNj
cmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0bGUKK1BBU1Mg
YXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9uCitQQVNTIGF4
RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBheEVsZW1lbnQy
LnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5p
c0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50Mi5pc1JlcXVp
cmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlzQ2hlY2tlZCBp
cyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVlIGlzIGF4RWxl
bWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVsZW1lbnQxLm1p
blZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5tYXhWYWx1ZQor
CithcmlhLXJlcXVpcmVkYnV0dG9uMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVs
ZW1lbnQxIGlzIHRydWUKK2FyaWEtcmVxdWlyZWRidXR0b24yCitQQVNTIGRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQgPT0gZWxlbWVudDIgaXMgdHJ1ZQorUEFTUyBheEVsZW1lbnQyLnJvbGUgaXMgYXhF
bGVtZW50MS5yb2xlCitQQVNTIGF4RWxlbWVudDIucm9sZURlc2NyaXB0aW9uIGlzIGF4RWxlbWVu
dDEucm9sZURlc2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIudGl0bGUgaXMgYXhFbGVtZW50MS50
aXRsZQorUEFTUyBheEVsZW1lbnQyLmRlc2NyaXB0aW9uIGlzIGF4RWxlbWVudDEuZGVzY3JpcHRp
b24KK1BBU1MgYXhFbGVtZW50Mi5oZWxwVGV4dCBpcyBheEVsZW1lbnQxLmhlbHBUZXh0CitQQVNT
IGF4RWxlbWVudDIuc3RyaW5nVmFsdWUgaXMgYXhFbGVtZW50MS5zdHJpbmdWYWx1ZQorUEFTUyBh
eEVsZW1lbnQyLmlzRW5hYmxlZCBpcyBheEVsZW1lbnQxLmlzRW5hYmxlZAorUEFTUyBheEVsZW1l
bnQyLmlzUmVxdWlyZWQgaXMgYXhFbGVtZW50MS5pc1JlcXVpcmVkCitQQVNTIGF4RWxlbWVudDIu
aXNDaGVja2VkIGlzIGF4RWxlbWVudDEuaXNDaGVja2VkCitQQVNTIGF4RWxlbWVudDIuaW50VmFs
dWUgaXMgYXhFbGVtZW50MS5pbnRWYWx1ZQorUEFTUyBheEVsZW1lbnQyLm1pblZhbHVlIGlzIGF4
RWxlbWVudDEubWluVmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5tYXhWYWx1ZSBpcyBheEVsZW1lbnQx
Lm1heFZhbHVlCisKK2FyaWEtdG9nZ2xlYnV0dG9uMQorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50ID09IGVsZW1lbnQxIGlzIHRydWUKK2FyaWEtdG9nZ2xlYnV0dG9uMgorUEFTUyBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xl
IGlzIGF4RWxlbWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBh
eEVsZW1lbnQxLnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxl
bWVudDEudGl0bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRl
c2NyaXB0aW9uCitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4
dAorUEFTUyBheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUK
K1BBU1MgYXhFbGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1Mg
YXhFbGVtZW50Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVs
ZW1lbnQyLmlzQ2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQy
LmludFZhbHVlIGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1
ZSBpcyBheEVsZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhF
bGVtZW50MS5tYXhWYWx1ZQorCithcmlhLWxpbmsxCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQgPT0gZWxlbWVudDEgaXMgdHJ1ZQorYXJpYS1saW5rMgorUEFTUyBkb2N1bWVudC5hY3RpdmVF
bGVtZW50ID09IGVsZW1lbnQyIGlzIHRydWUKK1BBU1MgYXhFbGVtZW50Mi5yb2xlIGlzIGF4RWxl
bWVudDEucm9sZQorUEFTUyBheEVsZW1lbnQyLnJvbGVEZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQx
LnJvbGVEZXNjcmlwdGlvbgorUEFTUyBheEVsZW1lbnQyLnRpdGxlIGlzIGF4RWxlbWVudDEudGl0
bGUKK1BBU1MgYXhFbGVtZW50Mi5kZXNjcmlwdGlvbiBpcyBheEVsZW1lbnQxLmRlc2NyaXB0aW9u
CitQQVNTIGF4RWxlbWVudDIuaGVscFRleHQgaXMgYXhFbGVtZW50MS5oZWxwVGV4dAorUEFTUyBh
eEVsZW1lbnQyLnN0cmluZ1ZhbHVlIGlzIGF4RWxlbWVudDEuc3RyaW5nVmFsdWUKK1BBU1MgYXhF
bGVtZW50Mi5pc0VuYWJsZWQgaXMgYXhFbGVtZW50MS5pc0VuYWJsZWQKK1BBU1MgYXhFbGVtZW50
Mi5pc1JlcXVpcmVkIGlzIGF4RWxlbWVudDEuaXNSZXF1aXJlZAorUEFTUyBheEVsZW1lbnQyLmlz
Q2hlY2tlZCBpcyBheEVsZW1lbnQxLmlzQ2hlY2tlZAorUEFTUyBheEVsZW1lbnQyLmludFZhbHVl
IGlzIGF4RWxlbWVudDEuaW50VmFsdWUKK1BBU1MgYXhFbGVtZW50Mi5taW5WYWx1ZSBpcyBheEVs
ZW1lbnQxLm1pblZhbHVlCitQQVNTIGF4RWxlbWVudDIubWF4VmFsdWUgaXMgYXhFbGVtZW50MS5t
YXhWYWx1ZQorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52
YXMtZmFsbGJhY2stY29udGVudC0yLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZh
cy1mYWxsYmFjay1jb250ZW50LTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L2NhbnZhcy1mYWxsYmFjay1jb250ZW50LTIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWZhbGxiYWNrLWNvbnRlbnQtMi5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKworPGRpdj4KKyAgPGEgaWQ9ImxpbmsxIiBocmVmPSIjIj5MaW5rPC9hPgor
ICA8YnV0dG9uIGlkPSJidXR0b24xIj5CdXR0b248L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0ibGFi
ZWxlZC1idXR0b24xIiBhcmlhLWxhYmVsPSJMYWJlbCI+QnV0dG9uPC9idXR0b24+CisgIDxidXR0
b24gaWQ9ImJ1dHRvbi13aXRoLXRpdGxlMSIgdGl0bGU9IlRpdGxlIj5CdXR0b248L2J1dHRvbj4K
KyAgPGlucHV0IGlkPSJ0ZXh0MSIgdHlwZT0idGV4dCIgdmFsdWU9IlZhbHVlIj4KKyAgPGlucHV0
IGlkPSJjaGVja2JveDEiIHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPgorICA8aW5wdXQgaWQ9Im51
bWJlcjEiIHR5cGU9Im51bWJlciIgdmFsdWU9IjEyMyI+CisgIDxpbnB1dCBpZD0icmFkaW8xIiB0
eXBlPSJyYWRpbyIgY2hlY2tlZD4KKyAgPGlucHV0IGlkPSJzbGlkZXIxIiB0eXBlPSJyYW5nZSIg
bWluPSIxIiBtYXg9IjEwIiB2YWx1ZT0iNSI+CisgIDxpbnB1dCBpZD0ic3VibWl0MSIgdHlwZT0i
c3VibWl0Ij4KKyAgPHNlbGVjdCBpZD0iY29tYm9ib3gxIj48b3B0aW9uPjE8b3B0aW9uIHNlbGVj
dGVkPjI8L3NlbGVjdD4KKyAgPHNlbGVjdCBtdWx0aXBsZSBpZD0ibGlzdGJveDEiPjxvcHRpb24+
MTxvcHRpb24gc2VsZWN0ZWQ+Mjwvc2VsZWN0PgorICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhMSI+
VGV4dGFyZWE8L3RleHRhcmVhPgorICA8ZGl2IGlkPSJmb2N1c2FibGUxIiB0YWJpbmRleD0iMCI+
Rm9jdXNhYmxlPC9kaXY+CisgIDxoNSBpZD0iaGVhZGluZzEiIHRhYmluZGV4PSIwIj5IZWFkaW5n
PC9oNT4KKyAgPGRpdiBpZD0iYXJpYS1idXR0b24xIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9u
Ij5BUklBIGJ1dHRvbjwvZGl2PgorICA8ZGl2IGlkPSJhcmlhLWRpc2FibGVkYnV0dG9uMSIgdGFi
aW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1kaXNhYmxlZD0idHJ1ZSI+QVJJQSBkaXNhYmxl
ZCBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJpYS1lbmFibGVkYnV0dG9uMSIgdGFiaW5kZXg9
IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1kaXNhYmxlZD0iZmFsc2UiPkFSSUEgZW5hYmxlZCBidXR0
b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJpYS1yZXF1aXJlZGJ1dHRvbjEiIHRhYmluZGV4PSIwIiBy
b2xlPSJidXR0b24iIGFyaWEtcmVxdWlyZWQ9InRydWUiPkFSSUEgcmVxdWlyZWQgYnV0dG9uPC9k
aXY+CisgIDxkaXYgaWQ9ImFyaWEtdG9nZ2xlYnV0dG9uMSIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1
dHRvbiIgYXJpYS1wcmVzc2VkPSJmYWxzZSI+QVJJQSB0b2dnbGUgYnV0dG9uPC9kaXY+CisgIDxk
aXYgaWQ9ImFyaWEtbGluazEiIHRhYmluZGV4PSIwIiByb2xlPSJsaW5rIj5BUklBIGxpbms8L2Rp
dj4KKzwvZGl2PgorCis8Y2FudmFzIGlkPSJteUNhbnZhcyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIz
MDAiPgorICA8YSBpZD0ibGluazIiIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24gaWQ9ImJ1
dHRvbjIiPkJ1dHRvbjwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJsYWJlbGVkLWJ1dHRvbjIiIGFy
aWEtbGFiZWw9IkxhYmVsIj5CdXR0b248L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0iYnV0dG9uLXdp
dGgtdGl0bGUyIiB0aXRsZT0iVGl0bGUiPkJ1dHRvbjwvYnV0dG9uPgorICA8aW5wdXQgaWQ9InRl
eHQyIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iVmFsdWUiPgorICA8aW5wdXQgaWQ9ImNoZWNrYm94MiIg
dHlwZT0iY2hlY2tib3giIGNoZWNrZWQ+CisgIDxpbnB1dCBpZD0ibnVtYmVyMiIgdHlwZT0ibnVt
YmVyIiB2YWx1ZT0iMTIzIj4KKyAgPGlucHV0IGlkPSJyYWRpbzIiIHR5cGU9InJhZGlvIiBjaGVj
a2VkPgorICA8aW5wdXQgaWQ9InNsaWRlcjIiIHR5cGU9InJhbmdlIiBtaW49IjEiIG1heD0iMTAi
IHZhbHVlPSI1Ij4KKyAgPGlucHV0IGlkPSJzdWJtaXQyIiB0eXBlPSJzdWJtaXQiPgorICA8c2Vs
ZWN0IGlkPSJjb21ib2JveDIiPjxvcHRpb24+MTxvcHRpb24gc2VsZWN0ZWQ+Mjwvc2VsZWN0Pgor
ICA8c2VsZWN0IG11bHRpcGxlIGlkPSJsaXN0Ym94MiI+PG9wdGlvbj4xPG9wdGlvbiBzZWxlY3Rl
ZD4yPC9zZWxlY3Q+CisgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWEyIj5UZXh0YXJlYTwvdGV4dGFy
ZWE+CisgIDxkaXYgaWQ9ImZvY3VzYWJsZTIiIHRhYmluZGV4PSIwIj5Gb2N1c2FibGU8L2Rpdj4K
KyAgPGg1IGlkPSJoZWFkaW5nMiIgdGFiaW5kZXg9IjAiPkhlYWRpbmc8L2g1PgorICA8ZGl2IGlk
PSJhcmlhLWJ1dHRvbjIiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iPkFSSUEgYnV0dG9uPC9k
aXY+CisgIDxkaXYgaWQ9ImFyaWEtZGlzYWJsZWRidXR0b24yIiB0YWJpbmRleD0iMCIgcm9sZT0i
YnV0dG9uIiBhcmlhLWRpc2FibGVkPSJ0cnVlIj5BUklBIGRpc2FibGVkIGJ1dHRvbjwvZGl2Pgor
ICA8ZGl2IGlkPSJhcmlhLWVuYWJsZWRidXR0b24yIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9u
IiBhcmlhLWRpc2FibGVkPSJmYWxzZSI+QVJJQSBlbmFibGVkIGJ1dHRvbjwvZGl2PgorICA8ZGl2
IGlkPSJhcmlhLXJlcXVpcmVkYnV0dG9uMiIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJp
YS1yZXF1aXJlZD0idHJ1ZSI+QVJJQSByZXF1aXJlZCBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0i
YXJpYS10b2dnbGVidXR0b24yIiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIiBhcmlhLXByZXNz
ZWQ9ImZhbHNlIj5BUklBIHRvZ2dsZSBidXR0b248L2Rpdj4KKyAgPGRpdiBpZD0iYXJpYS1saW5r
MiIgdGFiaW5kZXg9IjAiIHJvbGU9ImxpbmsiPkFSSUEgbGluazwvZGl2PgorPC9jYW52YXM+CisK
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3RzIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBlbGVtZW50cyBpbiBjYW52YXMgZmFsbGJhY2sgY29u
dGVudCB0byBtYWtlIHN1cmUgdGhlaXIgYWNjZXNzaWJsZSBhdHRyaWJ1dGVzIGFyZSBlc3NlbnRp
YWxseSBpZGVudGljYWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb3V0c2lkZSBvZiBj
YW52YXMgZmFsbGJhY2sgY29udGVudC4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdp
bmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKworICAgIGZ1bmN0aW9uIGNoZWNrKGlkMSwgaWQyKSB7CisgICAgICAgIGRl
YnVnKGlkMSk7CisgICAgICAgIHdpbmRvdy5lbGVtZW50MSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGlkMSk7CisgICAgICAgIGVsZW1lbnQxLmZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlKCJk
b2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQxIiwgInRydWUiKTsKKyAgICAgICAgd2lu
ZG93LmF4RWxlbWVudDEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsK
KworICAgICAgICBkZWJ1ZyhpZDIpOworICAgICAgICB3aW5kb3cuZWxlbWVudDIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZDIpOworICAgICAgICBlbGVtZW50Mi5mb2N1cygpOworICAgICAg
ICBzaG91bGRCZSgiZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBlbGVtZW50MiIsICJ0cnVlIik7
CisgICAgICAgIHdpbmRvdy5heEVsZW1lbnQyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9j
dXNlZEVsZW1lbnQ7CisKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIucm9sZSIsICJheEVs
ZW1lbnQxLnJvbGUiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIucm9sZURlc2NyaXB0
aW9uIiwgImF4RWxlbWVudDEucm9sZURlc2NyaXB0aW9uIik7CisgICAgICAgIHNob3VsZEJlKCJh
eEVsZW1lbnQyLnRpdGxlIiwgImF4RWxlbWVudDEudGl0bGUiKTsKKyAgICAgICAgc2hvdWxkQmUo
ImF4RWxlbWVudDIuZGVzY3JpcHRpb24iLCAiYXhFbGVtZW50MS5kZXNjcmlwdGlvbiIpOworICAg
ICAgICBzaG91bGRCZSgiYXhFbGVtZW50Mi5oZWxwVGV4dCIsICJheEVsZW1lbnQxLmhlbHBUZXh0
Iik7CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLnN0cmluZ1ZhbHVlIiwgImF4RWxlbWVu
dDEuc3RyaW5nVmFsdWUiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIuaXNFbmFibGVk
IiwgImF4RWxlbWVudDEuaXNFbmFibGVkIik7CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQy
LmlzUmVxdWlyZWQiLCAiYXhFbGVtZW50MS5pc1JlcXVpcmVkIik7CisgICAgICAgIHNob3VsZEJl
KCJheEVsZW1lbnQyLmlzQ2hlY2tlZCIsICJheEVsZW1lbnQxLmlzQ2hlY2tlZCIpOworICAgICAg
ICBzaG91bGRCZSgiYXhFbGVtZW50Mi5pbnRWYWx1ZSIsICJheEVsZW1lbnQxLmludFZhbHVlIik7
CisgICAgICAgIHNob3VsZEJlKCJheEVsZW1lbnQyLm1pblZhbHVlIiwgImF4RWxlbWVudDEubWlu
VmFsdWUiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4RWxlbWVudDIubWF4VmFsdWUiLCAiYXhFbGVt
ZW50MS5tYXhWYWx1ZSIpOworICAgICAgICBkZWJ1ZygiIik7CisgICAgfQorCisgICAgY2hlY2so
ImxpbmsxIiwgImxpbmsyIik7CisgICAgY2hlY2soImJ1dHRvbjEiLCAiYnV0dG9uMiIpOworICAg
IGNoZWNrKCJsYWJlbGVkLWJ1dHRvbjEiLCAibGFiZWxlZC1idXR0b24yIik7CisgICAgY2hlY2so
ImJ1dHRvbi13aXRoLXRpdGxlMSIsICJidXR0b24td2l0aC10aXRsZTIiKTsKKyAgICBjaGVjaygi
dGV4dDEiLCAidGV4dDIiKTsKKyAgICBjaGVjaygiY2hlY2tib3gxIiwgImNoZWNrYm94MiIpOwor
ICAgIGNoZWNrKCJudW1iZXIxIiwgIm51bWJlcjIiKTsKKyAgICBjaGVjaygicmFkaW8xIiwgInJh
ZGlvMiIpOworICAgIGNoZWNrKCJzbGlkZXIxIiwgInNsaWRlcjIiKTsKKyAgICBjaGVjaygic3Vi
bWl0MSIsICJzdWJtaXQyIik7CisgICAgY2hlY2soImNvbWJvYm94MSIsICJjb21ib2JveDIiKTsK
KyAgICBjaGVjaygibGlzdGJveDEiLCAibGlzdGJveDIiKTsKKyAgICBjaGVjaygidGV4dGFyZWEx
IiwgInRleHRhcmVhMiIpOworICAgIGNoZWNrKCJmb2N1c2FibGUxIiwgImZvY3VzYWJsZTIiKTsK
KyAgICBjaGVjaygiaGVhZGluZzEiLCAiaGVhZGluZzIiKTsKKyAgICBjaGVjaygiYXJpYS1idXR0
b24xIiwgImFyaWEtYnV0dG9uMiIpOworICAgIGNoZWNrKCJhcmlhLWRpc2FibGVkYnV0dG9uMSIs
ICJhcmlhLWRpc2FibGVkYnV0dG9uMiIpOworICAgIGNoZWNrKCJhcmlhLWVuYWJsZWRidXR0b24x
IiwgImFyaWEtZW5hYmxlZGJ1dHRvbjIiKTsKKyAgICBjaGVjaygiYXJpYS1yZXF1aXJlZGJ1dHRv
bjEiLCAiYXJpYS1yZXF1aXJlZGJ1dHRvbjIiKTsKKyAgICBjaGVjaygiYXJpYS10b2dnbGVidXR0
b24xIiwgImFyaWEtdG9nZ2xlYnV0dG9uMiIpOworICAgIGNoZWNrKCJhcmlhLWxpbmsxIiwgImFy
aWEtbGluazIiKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtZmFsbGJh
Y2stY29udGVudC0yLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvaHRtbApBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>