<?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>121959</bug_id>
          
          <creation_ts>2013-09-26 09:05:14 -0700</creation_ts>
          <short_desc>[ATK] Normalize checks in entry points for DRT and WKTR</short_desc>
          <delta_ts>2013-09-27 02:06:08 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>jdiggs</cc>
    
    <cc>k.czech</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>933526</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-26 09:05:14 -0700</bug_when>
    <thetext>By taking a look to ATK&apos;s DRT and WKTR, is easy to check that there is no consistency in the way we do the checks at the entry points for AccessibilityUIElement, since sometimes we check !m_element, other times we check !ATK_IS_OBJECT(m_element) - or an specific ATK interface -, sometimes we check both... and sometimes we just don&apos;t check, which leads to some funny messages in stderr such as this one:

  atk_object_ref_accessible_child: assertion `ATK_IS_OBJECT (accessible)&apos; failed

At least, this is a problem with tests such as accessibility/loading-iframe-updates-axtree.html or accessibility/svg-bounds.html, which are spitting that kind of error because the stuff that is needed for the test to pass is not implemented (either in the ATK code or in the DRT/WKTR).

Another manifestation of this issue, again due to tests running whose needs are not [properly] implemented yet, is what you can see in the logs for WK2GTK layout tests:

  07:30:55.934 26675 worker/1 accessibility/canvas-fallback-content-2.html output stderr lines:
  07:30:55.934 26675   invalid cast from `WAIType191&apos; to `AtkValue&apos;
  07:30:55.934 26675   atk_value_get_current_value: assertion `ATK_IS_VALUE (obj)&apos; failed
  07:30:55.934 26675   invalid cast from `WAIType199&apos; to `AtkValue&apos;
  07:30:55.934 26675   atk_value_get_current_value: assertion `ATK_IS_VALUE (obj)&apos; failed
  07:30:55.934 26675   invalid cast from `WAIType191&apos; to `AtkValue&apos;
  [...]

So, I think we should agree on a normalized way to check the entry points in DRT/WKTR, and my proposal is to check that we are in front of an instance of AtkObject implementing, if needed, the interfaces that we need for implementing a given functionality, gracefully exiting otherwise. No more checking for non-null and maybe later asserting for the right interface, since that will be of little help if the object we are receiving is not of the expected type (maybe, because the hierarchy exposed for GTK does not match in that case the one exposed for the Mac). And anyway, we will still detect that there&apos;s an issue or a missing implementation somewhere since the expectations won&apos;t match.

For instance, consider the following partial diff between the current situation and the proposed one:

  [...]
   int AccessibilityUIElement::columnCount()
   {
  -    if (!m_element)
  +    if (!ATK_IS_TABLE(m_element))
           return 0;
   
  -    ASSERT(ATK_IS_TABLE(m_element));
  -
       return atk_table_get_n_columns(ATK_TABLE(m_element));
   }
   
   int AccessibilityUIElement::childrenCount()
   {
  -    if (!m_element)
  +    if (!ATK_IS_OBJECT(m_element))
           return 0;
   
  -    ASSERT(ATK_IS_OBJECT(m_element));
  -
       return atk_object_get_n_accessible_children(ATK_OBJECT(m_element));
   }
   
   AccessibilityUIElement AccessibilityUIElement::elementAtPoint(int x, int y)
   {
  -    if (!m_element)
  +    if (!ATK_IS_COMPONENT(m_element))
           return 0;
   
       return AccessibilityUIElement(atk_component_ref_accessible_at_point(ATK_COMPONENT(m_element), x, y, ATK_XY_WINDOW));
   }
  [...]


As the ATK_IS_OBJECT, ATK_IS_TABLE... macros already do the null check, we do not need to check that explicitly. Also, we do not need to check for ATK_IS_OBJECT if we are already checking for an ATK interface, since that will always be implemented by an ATK_OBJECT. Last, I would not use ASSERT() here because we do not certainly want to continue if we don&apos;t have the proper object. Let&apos;s just the results be wrong, so we can realize of something being wrong.

For all these reasons, and also to prevent further confusion when adding code to these files in DRT and WKTR, I propose to write a patch now to normalize the situation. A patch that I&apos;ve been already working on and testing today and that I expect to upload soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933528</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-09-26 09:05:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/15087770&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933537</commentid>
    <comment_count>2</comment_count>
      <attachid>212717</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-26 09:17:56 -0700</bug_when>
    <thetext>Created attachment 212717
Patch proposal

I tested this patch both with WK1 and WK2 and actually gets rid of those error messages, while not causing any regression.

Pleas review. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933541</commentid>
    <comment_count>3</comment_count>
      <attachid>212717</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-09-26 09:25:43 -0700</bug_when>
    <thetext>Comment on attachment 212717
Patch proposal

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

&gt; Tools/ChangeLog:5
&gt; +

can you add a description of what and why this patch is needed

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:814
&gt; +    if (!ATK_IS_VALUE(m_element.get()))

I don&apos;t know much about this ATK_IS_* API, but it does seem strange to me that an m_element could be
ATK_IS_VALUE or ATK_IS_OBJECT

The difference between ATK_IS_OBJECT and ATK_IS_COMPONENT is also pretty nebulous it seems.

&gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:1079
&gt;      if (!ATK_IS_ACTION(m_element.get()))

ditto about the naming. maybe this is right, but it does seem strange that you can check that the element is ATK_IS_ACTION</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933659</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-26 13:34:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 212717 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212717&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:5
&gt; &gt; +
&gt; 
&gt; can you add a description of what and why this patch is needed

Strange. I had written one already but for it seems I just did it as a commit message and not in the proper ChangeLog, since the description is here:

https://bug-121959-attachments.webkit.org/attachment.cgi?id=212717

Anyway, I&apos;ll put it in the right place and submit the patch again.

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:814
&gt; &gt; +    if (!ATK_IS_VALUE(m_element.get()))
&gt; 
&gt; I don&apos;t know much about this ATK_IS_* API, but it does seem strange to me that an m_element could be
&gt; ATK_IS_VALUE or ATK_IS_OBJECT
&gt; 
&gt; The difference between ATK_IS_OBJECT and ATK_IS_COMPONENT is also pretty nebulous it seems.

Yes, I agree it&apos;s not very clear but it makes sense after all.

TL;DR:
------
AtkObject is an abstract class, while AtkComponent, AtkValue, AtkDocument... are interfaces that have to be implemented by instances of AtkObject, or derived class. Thus, checking ATK_IS_IMAGE() or ATK_COMPONENT() effectively implies in our case ATK_IS_OBJECT(), since those interfaces are only implemented by AtkObject.

Long version:
-------------
Welcome to GObject! :)

In a nutshell, AtkObject is an abstract class which I derived our concrete implementation WebKitAccessible, which is what you can see in WebKitAccessibleWrapperAtk, and what we use as our base for implementing accessible objects in ATK.

Then other things such as AtkValue, AtkComponent, AtkAction... are just interfaces that are implemented by subclasses of WebKitAccessible, we generate those classes/types dynamically according to tha nature of each wrapped AccessibilityObject, and we of course reuse those dynamically generated types when we found objects requiring to implement exactly the same interfaces that another one found earlier.

You can see a trace of those dynamically generated types in the description of this bug: &quot;WAIType191&quot; &amp; &quot;WAIType199&quot;. Each of those classes will be subclasses of WebKitAccessible (thus subclasses of AtkObject) implementing a different sets of interfaces.

So far so good, but this is plain C and so all this object oriented thang is not provided by the language, so we have GObject which is a library that provides us a whole system to implement OOP in C and that, besides forcing us to work in a certain way when writing the code (e.g. implementing something similar to C++ vtables ourselves),  includes macros such as ATK_OBJECT (just a cast to AtkObject*) or ATK_IS_OBJECT (to check if a pointer references a real instance of AtkObject), or WEBKIT_ACCESSIBLE and WEBKIT_IS_ACCESSIBLE (same thing but for objects from that subclass).

And turns out that, as we do neither things such as polymorphism in C, we ended up using those macros all the time, depending on which API we want to use: for instance, if we have an instance of WebKitAccessible and want to use some of the AtkObject API over it, we need to cast it first, so we make sure we only use the region of memory related to AtkObject among the whole lot of memory used for a WebKitAccessible:

  atk_object_get_name(ATK_OBJECT(webkitAccessible))

So, for the interfaces is exactly the same: we use macros such as ATK_IMAGE or ATK_COMPONENT whenever we want to use the API of a given interface over a specific AtkObject or, in the case of WebKitGTK, of WebKitAccessible:

  atk_table_get_n_columns(ATK_TABLE(webkitAccessible))

In a similar fashion, when we want to check if a pointer references a valid AtkObject we use ATK_IS_OBJECT(object), and when we want to check if a given AtkObject implements one interface such as AtkComponent, we do ATK_IS_COMPONENT(object). And as I mentioned in the TL;DR section above, as those interfaces are always implemented by AtkObject&apos;s only, they effectively imply the ATK_IS_OBJECT(object) check, thus it&apos;s not needed.

So, wrapping up: AtkObject is an abstrac class, while the rest of things (e.g. AtkImage, AtkDocument...) are interfaces. That is why something can be ATK_OBJECT and ATK_VALUE at the same time.

Hope is clearer now :)

&gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:1079
&gt; &gt;      if (!ATK_IS_ACTION(m_element.get()))
&gt; 
&gt; ditto about the naming. maybe this is right, but it does seem strange that you can check that the element is ATK_IS_ACTION

In this specific case, I&apos;m checking &quot;if it&apos;s an AtkObject implementing the AtkAction interface&quot;. This will fail either if one of those is not true, or if it&apos;s just null.

Attaching a new patch with the right changelog soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933661</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-09-26 13:36:03 -0700</bug_when>
    <thetext>Thanks for the explanation!

(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 212717 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212717&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/ChangeLog:5
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; can you add a description of what and why this patch is needed
&gt; 
&gt; Strange. I had written one already but for it seems I just did it as a commit message and not in the proper ChangeLog, since the description is here:
&gt; 
&gt; https://bug-121959-attachments.webkit.org/attachment.cgi?id=212717
&gt; 
&gt; Anyway, I&apos;ll put it in the right place and submit the patch again.
&gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:814
&gt; &gt; &gt; +    if (!ATK_IS_VALUE(m_element.get()))
&gt; &gt; 
&gt; &gt; I don&apos;t know much about this ATK_IS_* API, but it does seem strange to me that an m_element could be
&gt; &gt; ATK_IS_VALUE or ATK_IS_OBJECT
&gt; &gt; 
&gt; &gt; The difference between ATK_IS_OBJECT and ATK_IS_COMPONENT is also pretty nebulous it seems.
&gt; 
&gt; Yes, I agree it&apos;s not very clear but it makes sense after all.
&gt; 
&gt; TL;DR:
&gt; ------
&gt; AtkObject is an abstract class, while AtkComponent, AtkValue, AtkDocument... are interfaces that have to be implemented by instances of AtkObject, or derived class. Thus, checking ATK_IS_IMAGE() or ATK_COMPONENT() effectively implies in our case ATK_IS_OBJECT(), since those interfaces are only implemented by AtkObject.
&gt; 
&gt; Long version:
&gt; -------------
&gt; Welcome to GObject! :)
&gt; 
&gt; In a nutshell, AtkObject is an abstract class which I derived our concrete implementation WebKitAccessible, which is what you can see in WebKitAccessibleWrapperAtk, and what we use as our base for implementing accessible objects in ATK.
&gt; 
&gt; Then other things such as AtkValue, AtkComponent, AtkAction... are just interfaces that are implemented by subclasses of WebKitAccessible, we generate those classes/types dynamically according to tha nature of each wrapped AccessibilityObject, and we of course reuse those dynamically generated types when we found objects requiring to implement exactly the same interfaces that another one found earlier.
&gt; 
&gt; You can see a trace of those dynamically generated types in the description of this bug: &quot;WAIType191&quot; &amp; &quot;WAIType199&quot;. Each of those classes will be subclasses of WebKitAccessible (thus subclasses of AtkObject) implementing a different sets of interfaces.
&gt; 
&gt; So far so good, but this is plain C and so all this object oriented thang is not provided by the language, so we have GObject which is a library that provides us a whole system to implement OOP in C and that, besides forcing us to work in a certain way when writing the code (e.g. implementing something similar to C++ vtables ourselves),  includes macros such as ATK_OBJECT (just a cast to AtkObject*) or ATK_IS_OBJECT (to check if a pointer references a real instance of AtkObject), or WEBKIT_ACCESSIBLE and WEBKIT_IS_ACCESSIBLE (same thing but for objects from that subclass).
&gt; 
&gt; And turns out that, as we do neither things such as polymorphism in C, we ended up using those macros all the time, depending on which API we want to use: for instance, if we have an instance of WebKitAccessible and want to use some of the AtkObject API over it, we need to cast it first, so we make sure we only use the region of memory related to AtkObject among the whole lot of memory used for a WebKitAccessible:
&gt; 
&gt;   atk_object_get_name(ATK_OBJECT(webkitAccessible))
&gt; 
&gt; So, for the interfaces is exactly the same: we use macros such as ATK_IMAGE or ATK_COMPONENT whenever we want to use the API of a given interface over a specific AtkObject or, in the case of WebKitGTK, of WebKitAccessible:
&gt; 
&gt;   atk_table_get_n_columns(ATK_TABLE(webkitAccessible))
&gt; 
&gt; In a similar fashion, when we want to check if a pointer references a valid AtkObject we use ATK_IS_OBJECT(object), and when we want to check if a given AtkObject implements one interface such as AtkComponent, we do ATK_IS_COMPONENT(object). And as I mentioned in the TL;DR section above, as those interfaces are always implemented by AtkObject&apos;s only, they effectively imply the ATK_IS_OBJECT(object) check, thus it&apos;s not needed.
&gt; 
&gt; So, wrapping up: AtkObject is an abstrac class, while the rest of things (e.g. AtkImage, AtkDocument...) are interfaces. That is why something can be ATK_OBJECT and ATK_VALUE at the same time.
&gt; 
&gt; Hope is clearer now :)
&gt; 
&gt; &gt; &gt; Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:1079
&gt; &gt; &gt;      if (!ATK_IS_ACTION(m_element.get()))
&gt; &gt; 
&gt; &gt; ditto about the naming. maybe this is right, but it does seem strange that you can check that the element is ATK_IS_ACTION
&gt; 
&gt; In this specific case, I&apos;m checking &quot;if it&apos;s an AtkObject implementing the AtkAction interface&quot;. This will fail either if one of those is not true, or if it&apos;s just null.
&gt; 
&gt; Attaching a new patch with the right changelog soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933671</commentid>
    <comment_count>6</comment_count>
      <attachid>212740</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-26 13:49:18 -0700</bug_when>
    <thetext>Created attachment 212740
Patch proposal

(In reply to comment #5)
&gt; Thanks for the explanation!
&gt; 
I can&apos;t believe you have read it :). Thanks for appreciating the explanation. One day I&apos;ll need something similar about Objective-C, but for now all I know about it is basically what Wikipedia tells about it in this site

  http://en.wikipedia.org/wiki/Objective-C

Anyway, now attaching a new patch with the right ChangeLog...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933874</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-27 02:06:08 -0700</bug_when>
    <thetext>Committed r156531: &lt;http://trac.webkit.org/changeset/156531&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212717</attachid>
            <date>2013-09-26 09:17:56 -0700</date>
            <delta_ts>2013-09-26 13:49:18 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-09-26-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>31693</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiOTliZjA3ZDEzNTg3OGY3MDYwNzMzNmYzNGY2NTZkM2MwZGYxM2E1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogVGh1LCAyNiBTZXAgMjAxMyAxNzoxMDozNyArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMDktMjYgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gTm9ybWFsaXplIGNoZWNrcyBpbiBlbnRyeSBwb2ludHMg
Zm9yIERSVCBhbmQgV0tUUgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjE5NTkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAg
ICAgIEFsd2F5cyBjaGVjayBpZiB3ZSBoYXZlIGEgcHJvcGVyIGluc3RhbmNlIG9mIEF0a09iamVj
dCwKICAgICAgICBpbXBsZW1lbnRpbmcgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBtaWdodCBuZWVk
IGZvciBlYWNoIGNhc2UsIGF0CiAgICAgICAgdGhlIGVudHJ5IHBvaW50IG9mIGV2ZXJ5IG1ldGhv
ZCBvZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGZvciBBVEssCiAgICAgICAgYW5kIGRvIHRob3Nl
IGNoZWNrcyBpbiBhbiB1bmlmb3JtIHdheSBhY3Jvc3MgRFJUIGFuZCBXS1RSLCB0bwogICAgICAg
IGF2b2lkIGNvbmZ1c2lvbiBhbmQgaXNzdWVzIHdoZW4gbW9kaWZ5aW5nIHRoZXNlIGZpbGVzIGlu
IHRoZSBmdXR1cmUuCgogICAgICAgICogRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGls
ZHJlbik6IFVzZSBub3JtYWxpemVkIGNoZWNrcy4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cm93Q291bnQpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Y29sdW1uQ291bnQpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2hpbGRyZW5Db3VudCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjplbGVtZW50QXRQb2ludCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRDaGlsZEF0SW5kZXgpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZVVJRWxlbWVudCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpwYXJlbnRFbGVtZW50KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnJvbGUpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0
bGUpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24p
OiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUpOiBE
aXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UpOiBEaXR0by4K
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCk6IERpdHRvLgogICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp5KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OndpZHRoKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhl
aWdodCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlv
bik6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSk6IERp
dHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSk6IERpdHRvLgog
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSk6IERpdHRvLgogICAgICAg
IChpbmRleFJhbmdlSW5UYWJsZSk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGl0dG8uCiAgICAgICAgKGFsdGVyQ3Vy
cmVudFZhbHVlKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNz
KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2Rp
bmcpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkp
OiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXApOiBEaXR0
by4KCiAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKICAgICAgICAoV1RSOjppbmRleFJhbmdlSW5UYWJsZSk6
IFVzZSBub3JtYWxpemVkIGNoZWNrcy4KICAgICAgICAoV1RSOjphbHRlckN1cnJlbnRWYWx1ZSk6
IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVu
KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRy
ZW5XaXRoUmFuZ2UpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpjaGlsZHJlbkNvdW50KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZWxlbWVudEF0UG9pbnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjppbmRleE9mQ2hpbGQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXgpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCk6IERpdHRvLgogICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6IERpdHRvLgog
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOiBEaXR0
by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVW
YWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUp
OiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6IERp
dHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKTog
RGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24p
OiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1
ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdl
KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCk6IERpdHRv
LgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkpOiBEaXR0by4KICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6IERpdHRvLgogICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6IERpdHRvLgogICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8uCiAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KTogRGl0dG8uCiAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MpOiBEaXR0by4KICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCiAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkpOiBEaXR0by4K
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgot
LS0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA3NSArKysrKysrKysrKysrKysKIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5j
cHAgICAgICAgICAgICAgIHwgIDEwMSArKysrKysrKysrKy0tLS0tLS0tLQogLi4uL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCAgICAgICAgICAgICAgfCAgIDY5ICsrKysrKy0tLS0t
LS0KIDMgZmlsZXMgY2hhbmdlZCwgMTY2IGluc2VydGlvbnMoKyksIDc5IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2MjQz
NWYxLi5hMjFhMzdkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTMtMDktMjYgIE1hcmlvIFNhbmNoZXogUHJhZGEg
IDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBOb3JtYWxpemUgY2hl
Y2tzIGluIGVudHJ5IHBvaW50cyBmb3IgRFJUIGFuZCBXS1RSCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5NTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldENoaWxkcmVuKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxk
cmVuV2l0aFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFy
ZW50RWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZDaGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxh
bmd1YWdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp3aWR0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bWluVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bWF4VmFsdWUpOgorICAgICAgICAoaW5kZXhSYW5nZUluVGFibGUpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChhbHRlckN1
cnJlbnRWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAgICAg
ICAgKFdUUjo6aW5kZXhSYW5nZUluVGFibGUpOgorICAgICAgICAoV1RSOjphbHRlckN1cnJlbnRW
YWx1ZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVu
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRo
UmFuZ2UpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNv
dW50KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9p
bnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9mQ2hpbGQp
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXgpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omxhbmd1YWdlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6eCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmludFZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWluVmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpt
YXhWYWx1ZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRVUkkpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6CisKIDIwMTMtMDktMjUgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1v
dmVkIGNoZWNrIGZvciBBcHBsZSBBcHBsaWNhdGlvbiBTdXBwb3J0IGRpcmVjdG9yeSBpbiBXaW5D
YWlybyBwb3J0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRBdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRBdGsuY3BwCmluZGV4IGMyNmU2ZjkuLjAzZTdiZjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5j
cHAKQEAgLTMxNyw2ICszMTcsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERv
Y3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKIAogdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4mIGNoaWxkcmVuKQogeworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQor
ICAgICAgICByZXR1cm47CisKICAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIEF0a09iamVjdCogY2hp
bGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50
KSwgaSk7CkBAIC0zMjYsNiArMzI5LDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpn
ZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxkcmUKIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQpCiB7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsK
ICAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsKICAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBl
bmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOwpAQCAtMzM0LDM3ICszNDAsMzEgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4KIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
d0NvdW50KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19UQUJMRSht
X2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUo
bV9lbGVtZW50KSk7Ci0KICAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxF
KG1fZWxlbWVudCkpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291
bnQoKQogewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxl
bWVudCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2Vs
ZW1lbnQpKTsKLQogICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUo
bV9lbGVtZW50KSk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNv
dW50KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9l
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQpKTsKLQogICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hp
bGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCiB7
Ci0gICAgaWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQoYXRrX2NvbXBvbmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBVEtfQ09NUE9ORU5UKG1f
ZWxlbWVudCksIHgsIHksIEFUS19YWV9XSU5ET1cpKTsKQEAgLTM3OCw2ICszNzgsOSBAQCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVu
dEF0SW5kZXgodW5zaWduZWQgaQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKKyAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW5XaXRo
UmFuZ2UoY2hpbGRyZW4sIGluZGV4LCBpbmRleCArIDEpOwogCkBAIC0zOTUsNyArMzk4LDcgQEAg
dW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFsbEF0dHJpYnV0ZXMoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JK
RUNUKG1fZWxlbWVudCkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0ZXNPZkVsZW1lbnQodGhp
cykudXRmOCgpLmRhdGEoKSk7CkBAIC00MTUsNyArNDE4LDcgQEAgSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiAKIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQog
ewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEF0a1JlbGF0aW9uU2V0KiBzZXQgPSBhdGtfb2Jq
ZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKQEAgLTQzOSwxNyAr
NDQyLDE4IEBAIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGl0bGVVSUVsZW1lbnQoKQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQogewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlm
ICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEFT
U0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOwotCiAgICAgQXRrT2JqZWN0KiBwYXJlbnQg
PSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CiAgICAgcmV0
dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7CiB9CiAKIEpT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkK
IHsKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKICAgICBWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCkBA
IC00NzAsNyArNDc0LDcgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFy
YW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm9sZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1Qo
bV9lbGVtZW50KSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBBdGtSb2xl
IHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CkBAIC00
OTMsNiArNDk3LDkgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURl
c2NyaXB0aW9uKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUo
KQogeworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKwogICAgIGNvbnN0IGdjaGFyKiBu
YW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwogICAgIEdP
d25QdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUg
PyBuYW1lIDogIiIpKTsKIApAQCAtNTAxLDggKzUwOCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmRlc2NyaXB0aW9uKCkKIHsKLSAgICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBh
dGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlm
ICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAorICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9
IGF0a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CiAgICAg
aWYgKCFkZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7CiAKQEAgLTUxMyw3ICs1MjIsNyBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lT
X1RFWFQobV9lbGVtZW50KSkKKyAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgR093
blB0cjxnY2hhcj4gdGV4dChhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAw
LCAtMSkpOwpAQCAtNTI1LDcgKzUzNCw3IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bGFuZ3VhZ2UoKQogewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKIAogICAgIGNvbnN0IGdjaGFyKiBsb2NhbGUgPSBhdGtfb2JqZWN0X2dldF9v
YmplY3RfbG9jYWxlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CkBAIC01NDYsOCArNTU1LDEwIEBA
IEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKIAog
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQogewotICAgIGludCB4LCB5OworICAg
IGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMDsKIAor
ICAgIGludCB4LCB5OwogICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05F
TlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKIAogICAgIHJldHVybiB4OwpA
QCAtNTU1LDggKzU2NiwxMCBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiAK
IGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIHsKLSAgICBpbnQgeCwgeTsKKyAg
ICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CiAK
KyAgICBpbnQgeCwgeTsKICAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9O
RU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CiAKICAgICByZXR1cm4geTsK
QEAgLTU2NCw4ICs1NzcsMTAgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQog
CiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQogewotICAgIGludCB3aWR0
aCwgaGVpZ2h0OworICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQpKQorICAgICAg
ICByZXR1cm4gMDsKIAorICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgIGF0a19jb21wb25lbnRf
Z2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwogCiAg
ICAgcmV0dXJuIHdpZHRoOwpAQCAtNTczLDggKzU4OCwxMCBAQCBkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6d2lkdGgoKQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVp
Z2h0KCkKIHsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpZiAoIUFUS19JU19DT01QT05F
TlQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpbnQgd2lkdGgsIGhlaWdo
dDsKICAgICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwg
JndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIHJldHVybiBoZWlnaHQ7CkBAIC01OTQsNyArNjExLDcg
QEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKIAogSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAg
IGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3QgY2hhciogYXhPcmllbnRhdGlvbiA9IDA7
CkBAIC02MTEsMTEgKzYyOCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpvcmllbnRhdGlvbigpIGNvbnN0CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwotCiAg
ICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAg
ICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CiAgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50
X3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwogICAgIGlmICghR19WQUxVRV9I
T0xEU19GTE9BVCgmdmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTYyNCwxMSArNjQwLDEw
IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAKIGRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCiB7Ci0gICAgR1ZhbHVlIHZh
bHVlID0gR19WQUxVRV9JTklUOwotCiAgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CiAg
ICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFs
dWUpOwogICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQogICAgICAgICByZXR1
cm4gMDsKQEAgLTYzNywxMSArNjUyLDEwIEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptaW5WYWx1ZSgpCiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgp
CiB7Ci0gICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwotCiAgICAgaWYgKCFBVEtfSVNf
VkFMVUUobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBHVmFsdWUgdmFsdWUg
PSBHX1ZBTFVFX0lOSVQ7CiAgICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFUS19WQUxV
RShtX2VsZW1lbnQpLCAmdmFsdWUpOwogICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFs
dWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTc4OSwxMSArODAzLDkgQEAgc3RhdGljIEpTU3Ry
aW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wg
aXNSb3dSYW5nZSkKIHsKICAgICBHT3duUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgi
ezAsIDB9IikpOwogCi0gICAgaWYgKCFlbGVtZW50KQorICAgIGlmICghQVRLX0lTX09CSkVDVChl
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJh
bmdlU3RyaW5nLmdldCgpKTsKIAotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKTsK
LQogICAgIEF0a09iamVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JK
RUNUKGVsZW1lbnQpKTsKICAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxl
KSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3Ry
aW5nLmdldCgpKTsKQEAgLTg3NSwxMSArODg3LDkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoSlNDb24K
IAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9y
Q29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQogewotICAgIGlmICgh
bV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQogICAgIC8v
IEFkb3B0IHRoZSBBdGtPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjZWxsIGJlY2F1c2UKICAgICAv
LyBhdF90YWJsZV9yZWZfYXQoKSB0cmFuc2ZlcnMgZnVsbCBvd25lcnNoaXAuCiAgICAgR1JlZlB0
cjxBdGtPYmplY3Q+IGZvdW5kQ2VsbCA9IGFkb3B0R1JlZihhdGtfdGFibGVfcmVmX2F0KEFUS19U
QUJMRShtX2VsZW1lbnQpLCByb3csIGNvbHVtbikpOwpAQCAtODk5LDcgKzkwOSw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKLSAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBTdHJpbmcg
YXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUp
OwpAQCAtOTUzLDExICs5NjMsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0
cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogc3RhdGljIHZvaWQgYWx0
ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKIHsK
LSAgICBpZiAoIWVsZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfVkFMVUUoZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOwotCiAgICAg
R1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKICAgICBhdGtfdmFsdWVfZ2V0X2N1
cnJlbnRfdmFsdWUoQVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKIApAQCAtOTg3
LDExICs5OTUsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogewotICAgIGlmICghbV9lbGVt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1l
bnQpKTsKLQogICAgIGlmICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTEwNDIsNiArMTA0NSw5IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSgpIGNvbnN0CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogeworICAgIGlmICghQVRLX0lTX0RP
Q1VNRU5UKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCiAgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShB
VEtfT0JKRUNUKG1fZWxlbWVudCkpOwogICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5U
X0ZSQU1FKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKQEAgLTEwNTEsNiArMTA1Nyw5IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpkb2N1bWVudFVSSSgpCiB7CisgICAgaWYgKCFBVEtfSVNfRE9DVU1FTlQobV9lbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisK
ICAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CiAgICAgaWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCiAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwpAQCAtMTE0MSw3ICsx
MTUwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAog
CiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgIGlmICghQVRL
X0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNU
KG1fZWxlbWVudCksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0
ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcAppbmRleCA5YmM3OGE1Li5kZTkzMzg5IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMTEyLDcgKzExMiw3IEBA
IHN0YXRpYyBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBl
bGVtZW50LCBib29sIGlzUm93UmFuZ2UpCiB7CiAgICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJp
bmcoZ19zdHJkdXAoInswLCAwfSIpKTsKIAotICAgIGlmICghZWxlbWVudCB8fCAhQVRLX0lTX09C
SkVDVChlbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVudC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0
cmluZy5nZXQoKSk7CiAKICAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9w
YXJlbnQoQVRLX09CSkVDVChlbGVtZW50LmdldCgpKSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3Rh
dGljIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIGJvb2wgaXNSb3dSYW5nZSkKIAogc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxh
dGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKIHsKLSAgICBpZiAoIWVsZW1lbnQg
fHwgIUFUS19JU19WQUxVRShlbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19WQUxVRShl
bGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR1ZhbHVlIGN1cnJlbnRWYWx1
ZSA9IEdfVkFMVUVfSU5JVDsKQEAgLTM3Miw3ICszNzIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogb3RoZXJFbGVtZW50KQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKFZlY3RvcjxSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiYgY2hpbGRyZW4pCiB7Ci0gICAgaWYgKCFtX2VsZW1l
bnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19P
QkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGNvdW50
ID0gY2hpbGRyZW5Db3VudCgpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiA+CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFu
Z2UoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiBjaGlsZHJlbiwgdW5z
aWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8
fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgZW5kID0g
bG9jYXRpb24gKyBsZW5ndGg7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbG9jYXRpb247IGkgPCBl
bmQ7IGkrKykgewpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFCiAK
IGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKIHsKLSAgICBpZiAo
IW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxl
X2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7CkBAIC00MDMsNyArNDAzLDcg
QEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQogCiBQYXNzUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1l
bnRBdFBvaW50KGludCB4LCBpbnQgeSkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2Vs
ZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEdSZWZQdHI8QXRrT2JqZWN0
PiBvYmplY3RBdFBvaW50ID0gYWRvcHRHUmVmKGF0a19jb21wb25lbnRfcmVmX2FjY2Vzc2libGVf
YXRfcG9pbnQoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpLCB4LCB5LCBBVEtfWFlfV0lO
RE9XKSk7CkBAIC00MTIsNyArNDEyLDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwKIAogdW5z
aWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpF
Q1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+ID4gY2hpbGRyZW47CkBAIC00MjgsNiArNDI4LDkgQEAgdW5zaWduZWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGVsZW1lbnQpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQogeworICAgIGlmICgh
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKwogICAg
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjaGlsZHJlbjsKICAgICBn
ZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIDEpOwogCkBAIC00ODcsNyArNDkw
LDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW4KIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCiB7Ci0g
ICAgaWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQXRrUmVsYXRpb25TZXQqIHNldCA9IGF0a19v
YmplY3RfcmVmX3JlbGF0aW9uX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpOwpAQCAt
NTExLDcgKzUxNCw3IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQog
ewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkp
CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRL
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTUzOCw2ICs1NDEsOSBAQCBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1l
bnRMaW5rcygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiB7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1f
ZWxlbWVudC5nZXQoKSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+
IGNoaWxkcmVuOwogICAgIGdldENoaWxkcmVuKGNoaWxkcmVuKTsKIApAQCAtNTUyLDcgKzU1OCw3
IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDaGlsZHJlbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAh
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKIAogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhh
dHRyaWJ1dGVzT2ZFbGVtZW50KHRoaXMpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNTYwLDcgKzU2Niw3
IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxB
dHRyaWJ1dGVzKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKLSAg
ICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgp
KSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAK
ICAgICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0
ZShhdHRyaWJ1dGUpOwpAQCAtNjI3LDcgKzYzMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQog
CiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgp
CiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgp
KSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7CkBA
IC02NTIsNyArNjU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwg
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1Qo
bV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoMCwgMCk7CiAKICAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19vYmplY3RfZ2V0X25h
bWUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTY2Myw3ICs2NjksNyBAQCBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRp
b24oKQogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5n
ZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3Qg
Z2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTY3Nyw3ICs2ODMsNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBj
b25zdAogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5n
ZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3Qg
Z2NoYXIqIGF4T3JpZW50YXRpb24gPSAwOwpAQCAtNjk0LDcgKzcwMCw3IEBAIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0
CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdWYWx1ZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVu
dC5nZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIEdPd25Q
dHI8Z2NoYXI+IHRleHQoYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQobV9lbGVtZW50LmdldCgp
KSwgMCwgLTEpKTsKQEAgLTcwNiw3ICs3MTIsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIGlmICgh
bV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3QgZ2NoYXIqIGxvY2FsZSA9IGF0
a19vYmplY3RfZ2V0X29iamVjdF9sb2NhbGUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsK
QEAgLTcyNyw3ICs3MzMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdAogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eCgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgeCwgeTsKQEAgLTczNyw3ICs3NDMsNyBAQCBk
b3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp5KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCB4LCB5OwpAQCAtNzQ3LDcgKzc1Myw3
IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIAogZG91YmxlIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2Vs
ZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCB3aWR0aCwgaGVpZ2h0
OwpAQCAtNzU3LDcgKzc2Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0
aCgpCiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQogewotICAgIGlm
ICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYg
KCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CkBAIC03NzksNyArNzg1LDcgQEAgZG91YmxlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKIAogZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmludFZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRL
X0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxl
bWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgR1ZhbHVlIHZhbHVlID0gR19W
QUxVRV9JTklUOwpAQCAtNzkyLDcgKzc5OCw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpt
aW5WYWx1ZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKQEAgLTgw
NSw3ICs4MTEsNyBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQog
CiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQogewotICAgIGlmICgh
bV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFB
VEtfSVNfVkFMVUUobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBH
VmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CkBAIC05ODcsNyArOTkzLDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRl
cigpCiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCiB7Ci0gICAgaWYg
KCFtX2VsZW1lbnQgfHwgIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICgh
QVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
cmV0dXJuIGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKTsK
QEAgLTk5NSw3ICsxMDAxLDcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50
KCkKIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KCkKIHsKLSAgICBp
ZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYg
KCFBVEtfSVNfVEFCTEUobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudC5nZXQo
KSkpOwpAQCAtMTAyMSw3ICsxMDI3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQogCiBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5B
bmRSb3codW5zaWduZWQgY29sLCB1bnNpZ25lZCByb3cpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQg
fHwgIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX1RBQkxF
KG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQWRvcHQgdGhl
IEF0a09iamVjdCByZXByZXNlbnRpbmcgdGhlIGNlbGwgYmVjYXVzZQpAQCAtMTA3MCw5ICsxMDc2
LDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlm
ICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEwOTMsNyArMTA5Niw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0g
ICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAg
ICBpZiAoIUFUS19JU19ET0NVTUVOVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIEF0a1JvbGUgcm9sZSA9
IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTEx
MDUsNyArMTEwOCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVu
dCB8fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0RP
Q1VNRU5UKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRf
cm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpOwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZWxl
bWVudCB8fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JK
RUNUKG1fZWxlbWVudC5nZXQoKSksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOwotLSAKMS43LjEwLjQK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212740</attachid>
            <date>2013-09-26 13:49:18 -0700</date>
            <delta_ts>2013-09-26 14:57:05 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-09-26-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>32535</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0MmI4YjRkYTNkNTI4OGQ0MDUyYjBhNWQxNTkxZDYyMmE0ZTA3ZjZjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpb0B3ZWJraXQub3Jn
PgpEYXRlOiBUaHUsIDI2IFNlcCAyMDEzIDIxOjM5OjI1ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAxMy0wOS0yNiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29t
PgoKICAgICAgICBbQVRLXSBOb3JtYWxpemUgY2hlY2tzIGluIGVudHJ5IHBvaW50cyBmb3IgRFJU
IGFuZCBXS1RSCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMTk1OQoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWx3
YXlzIGNoZWNrIGlmIHdlIGhhdmUgYSBwcm9wZXIgaW5zdGFuY2Ugb2YgQXRrT2JqZWN0LAogICAg
ICAgIGltcGxlbWVudGluZyB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIG1pZ2h0IG5lZWQgZm9yIGVh
Y2ggY2FzZSwgYXQKICAgICAgICB0aGUgZW50cnkgcG9pbnQgb2YgZXZlcnkgbWV0aG9kIG9mIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgZm9yIEFUSywKICAgICAgICBhbmQgZG8gdGhvc2UgY2hlY2tz
IGluIGFuIHVuaWZvcm0gd2F5IGFjcm9zcyBEUlQgYW5kIFdLVFIsIHRvCiAgICAgICAgYXZvaWQg
Y29uZnVzaW9uIGFuZCBpc3N1ZXMgd2hlbiBtb2RpZnlpbmcgdGhlc2UgZmlsZXMgaW4gdGhlIGZ1
dHVyZS4KCiAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dEF0ay5jcHA6CiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKTog
VXNlIG5vcm1hbGl6ZWQgY2hlY2tzLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpn
ZXRDaGlsZHJlbldpdGhSYW5nZSk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dDb3VudCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
b2x1bW5Db3VudCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGls
ZHJlbkNvdW50KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1l
bnRBdFBvaW50KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENo
aWxkQXRJbmRleCk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxB
dHRyaWJ1dGVzKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
VUlFbGVtZW50KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVu
dEVsZW1lbnQpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ2hpbGRyZW4pOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm9sZSk6IERpdHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6IERp
dHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbik6IERpdHRv
LgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSk6IERpdHRvLgog
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgogICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnkpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
d2lkdGgpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KTog
RGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uKTogRGl0
dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8uCiAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKTogRGl0dG8uCiAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKTogRGl0dG8uCiAgICAgICAgKGluZGV4
UmFuZ2VJblRhYmxlKTogRGl0dG8uCiAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNl
bGxGb3JDb2x1bW5BbmRSb3cpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3RyaW5nQXR0cmlidXRlVmFsdWUpOiBEaXR0by4KICAgICAgICAoYWx0ZXJDdXJyZW50VmFs
dWUpOiBEaXR0by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MpOiBEaXR0
by4KICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZyk6IERp
dHRvLgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSk6IERpdHRv
LgogICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cCk6IERpdHRvLgoKICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwOgogICAgICAgIChXVFI6OmluZGV4UmFuZ2VJblRhYmxlKTogVXNlIG5v
cm1hbGl6ZWQgY2hlY2tzLgogICAgICAgIChXVFI6OmFsdGVyQ3VycmVudFZhbHVlKTogRGl0dG8u
CiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4pOiBEaXR0
by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhS
YW5nZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxk
cmVuQ291bnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpl
bGVtZW50QXRQb2ludCk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmluZGV4T2ZDaGlsZCk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNoaWxkQXRJbmRleCk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGl0dG8uCiAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRvLgogICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTog
RGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6IERpdHRv
LgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKTogRGl0dG8uCiAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24pOiBEaXR0by4K
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbik6IERpdHRv
LgogICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKTogRGl0
dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UpOiBEaXR0
by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KTogRGl0dG8uCiAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6IERpdHRvLgogICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKTogRGl0dG8uCiAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93Q291bnQpOiBEaXR0by4KICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6IERpdHRvLgogICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOiBEaXR0by4KICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzcyk6IERpdHRvLgogICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50RW5jb2RpbmcpOiBEaXR0by4KICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSk6IERpdHRvLgogICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCi0tLQogVG9v
bHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODIgKysr
KysrKysrKysrKysrKysKIC4uLi9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgICAg
ICAgICAgICAgIHwgMTAxICsrKysrKysrKysrLS0tLS0tLS0tLQogLi4uL2F0ay9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50QXRrLmNwcCAgICAgICAgICAgICAgfCAgNjkgKysrKysrKy0tLS0tLS0KIDMg
ZmlsZXMgY2hhbmdlZCwgMTczIGluc2VydGlvbnMoKyksIDc5IGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3MjI1YjIyLi44
ZWI5ZWM3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsODUgQEAKKzIwMTMtMDktMjYgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJp
by5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBOb3JtYWxpemUgY2hlY2tzIGlu
IGVudHJ5IHBvaW50cyBmb3IgRFJUIGFuZCBXS1RSCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE5NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBbHdheXMgY2hlY2sgaWYgd2UgaGF2ZSBhIHByb3BlciBp
bnN0YW5jZSBvZiBBdGtPYmplY3QsCisgICAgICAgIGltcGxlbWVudGluZyB0aGUgaW50ZXJmYWNl
cyB0aGF0IHdlIG1pZ2h0IG5lZWQgZm9yIGVhY2ggY2FzZSwgYXQKKyAgICAgICAgdGhlIGVudHJ5
IHBvaW50IG9mIGV2ZXJ5IG1ldGhvZCBvZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGZvciBBVEss
CisgICAgICAgIGFuZCBkbyB0aG9zZSBjaGVja3MgaW4gYW4gdW5pZm9ybSB3YXkgYWNyb3NzIERS
VCBhbmQgV0tUUiwgdG8KKyAgICAgICAgYXZvaWQgY29uZnVzaW9uIGFuZCBpc3N1ZXMgd2hlbiBt
b2RpZnlpbmcgdGhlc2UgZmlsZXMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDoKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKTogVXNlIG5vcm1hbGl6ZWQgY2hlY2tzLgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UpOiBE
aXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6IERpdHRvLgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6IERpdHRvLgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQpOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOiBEaXR0
by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVu
KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8u
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6IERpdHRvLgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24pOiBEaXR0by4KKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSk6IERpdHRvLgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6eCk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eSk6IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgp
OiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6IERpdHRv
LgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24pOiBEaXR0by4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKTogRGl0dG8uCisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSk6IERpdHRvLgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKGluZGV4
UmFuZ2VJblRhYmxlKTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
ZWxsRm9yQ29sdW1uQW5kUm93KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoYWx0ZXJDdXJyZW50
VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzKTog
RGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5n
KTogRGl0dG8uCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSk6
IERpdHRvLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXApOiBEaXR0
by4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAgICAoV1RSOjppbmRleFJhbmdlSW5UYWJs
ZSk6IFVzZSBub3JtYWxpemVkIGNoZWNrcy4KKyAgICAgICAgKFdUUjo6YWx0ZXJDdXJyZW50VmFs
dWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hp
bGRyZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0
Q2hpbGRyZW5XaXRoUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbmRleE9mQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KTogRGl0dG8uCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KTogRGl0dG8uCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRy
ZW4pOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0
cmlidXRlcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
dHJpbmdBdHRyaWJ1dGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojpyb2xlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRpdGxlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRlc2NyaXB0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om9yaWVudGF0aW9uKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omxhbmd1YWdlKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OngpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eSk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3
aWR0aCk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWln
aHQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFs
dWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFs
dWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFs
dWUpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291
bnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1u
Q291bnQpOiBEaXR0by4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2Vs
bEZvckNvbHVtbkFuZFJvdyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwcmVzcyk6IERpdHRvLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpkb2N1bWVudEVuY29kaW5nKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKTogRGl0dG8uCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKTogRGl0dG8uCisKIDIwMTMtMDktMjYgIFphbiBEb2Jl
cnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFh2ZmJEcml2ZXIgc2hvdWxk
IHNldCB1cCBYdmZiIGluc3RhbmNlcyBwcm92aWRpbmcgc2NyZWVucyBvZiA4LWJpdCBkZXB0aApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnRBdGsuY3BwCmluZGV4IGMyNmU2ZjkuLjAzZTdiZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKQEAgLTMxNyw2
ICszMTcsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3VtZW50TGlua3Mo
VmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKIAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxk
cmVuKQogeworICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1
cm47CisKICAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CkBAIC0z
MjYsNiArMzI5LDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihW
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNoaWxkcmUKIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiB7
CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgQXRr
T2JqZWN0KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVD
VChtX2VsZW1lbnQpLCBpKTsKICAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudChjaGlsZCkpOwpAQCAtMzM0LDM3ICszNDAsMzEgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4KIAogaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KCkKIHsK
LSAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIEFTU0VSVChBVEtfSVNfVEFCTEUobV9lbGVtZW50KSk7
Ci0KICAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKG1fZWxlbWVudCkp
OwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQogewotICAg
IGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQog
ICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUobV9lbGVtZW50KSk7
CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKIHsKLSAg
ICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsK
LQogICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09C
SkVDVChtX2VsZW1lbnQpKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAgaWYgKCFt
X2VsZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVudCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYXRrX2NvbXBv
bmVudF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksIHgs
IHksIEFUS19YWV9XSU5ET1cpKTsKQEAgLTM3OCw2ICszNzgsOSBAQCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmtlZFVJRWxlbWVudEF0SW5kZXgodW5z
aWduZWQgaQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKIHsKKyAgICBpZiAoIUFUS19JU19PQkpF
Q1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRy
ZW4sIGluZGV4LCBpbmRleCArIDEpOwogCkBAIC0zOTUsNyArMzk4LDcgQEAgdW5zaWduZWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGVsZW1lbnQpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJp
YnV0ZXMoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVu
dCkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0ZXNPZkVsZW1lbnQodGhpcykudXRmOCgpLmRh
dGEoKSk7CkBAIC00MTUsNyArNDE4LDcgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQoKQogewotICAgIGlmICgh
bV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEF0a1JlbGF0aW9uU2V0KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxh
dGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKQEAgLTQzOSwxNyArNDQyLDE4IEBAIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1l
bnQoKQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmVudEVsZW1lbnQoKQogewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEFTU0VSVChBVEtfSVNf
T0JKRUNUKG1fZWxlbWVudCkpOwotCiAgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVj
dF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CiAgICAgcmV0dXJuIHBhcmVudCA/
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQocGFyZW50KSA6IDA7CiB9CiAKIEpTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKKyAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7CisKICAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCkBAIC00NzAsNyArNDc0
LDcgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0
dHJpYnV0ZU5hbWVzKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBBdGtSb2xlIHJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CkBAIC00OTMsNiArNDk3LDkg
QEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZURlc2NyaXB0aW9uKCkK
IAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQogeworICAgIGlm
ICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKwogICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRrX29i
amVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOwogICAgIEdPd25QdHI8Z2NoYXI+
IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxlOiAlcyIsIG5hbWUgPyBuYW1lIDogIiIp
KTsKIApAQCAtNTAxLDggKzUwOCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0aXRsZSgpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2Ny
aXB0aW9uKCkKIHsKLSAgICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dl
dF9kZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworICAgIGlmICghQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKIAorICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3Rf
Z2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CiAgICAgaWYgKCFkZXNjcmlw
dGlvbikKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CiAKQEAgLTUxMyw3ICs1MjIsNyBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpkZXNjcmlwdGlvbigpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ1ZhbHVlKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX1RFWFQobV9lbGVt
ZW50KSkKKyAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgR093blB0cjxnY2hhcj4g
dGV4dChhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQpLCAwLCAtMSkpOwpAQCAt
NTI1LDcgKzUzNCw3IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z1ZhbHVlKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2Uo
KQogewotICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1l
bnQpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
IAogICAgIGNvbnN0IGdjaGFyKiBsb2NhbGUgPSBhdGtfb2JqZWN0X2dldF9vYmplY3RfbG9jYWxl
KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CkBAIC01NDYsOCArNTU1LDEwIEBAIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0KCkgY29uc3QKIAogZG91YmxlIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OngoKQogewotICAgIGludCB4LCB5OworICAgIGlmICghQVRLX0lT
X0NPTVBPTkVOVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMDsKIAorICAgIGludCB4LCB5
OwogICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50
KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKIAogICAgIHJldHVybiB4OwpAQCAtNTU1LDggKzU2
NiwxMCBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiAKIGRvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIHsKLSAgICBpbnQgeCwgeTsKKyAgICBpZiAoIUFUS19J
U19DT01QT05FTlQobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpbnQgeCwg
eTsKICAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVu
dCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CiAKICAgICByZXR1cm4geTsKQEAgLTU2NCw4ICs1
NzcsMTAgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQogCiBkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQogewotICAgIGludCB3aWR0aCwgaGVpZ2h0Owor
ICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMDsK
IAorICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRL
X0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIHdp
ZHRoOwpAQCAtNTczLDggKzU4OCwxMCBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
d2lkdGgoKQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkKIHsKLSAg
ICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBhdGtf
Y29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVp
Z2h0KTsKIAogICAgIHJldHVybiBoZWlnaHQ7CkBAIC01OTQsNyArNjExLDcgQEAgZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKIAogSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAgIGlmICghbV9lbGVt
ZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNU
KG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOwogCiAgICAgY29uc3QgY2hhciogYXhPcmllbnRhdGlvbiA9IDA7CkBAIC02MTEsMTEg
KzYyOCwxMCBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlv
bigpIGNvbnN0CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNv
bnN0CiB7Ci0gICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwotCiAgICAgaWYgKCFBVEtf
SVNfVkFMVUUobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBHVmFsdWUgdmFs
dWUgPSBHX1ZBTFVFX0lOSVQ7CiAgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVlKEFUS19W
QUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwogICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgm
dmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTYyNCwxMSArNjQwLDEwIEBAIGRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpIGNvbnN0CiAKIGRvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCiB7Ci0gICAgR1ZhbHVlIHZhbHVlID0gR19WQUxV
RV9JTklUOwotCiAgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIDA7CiAKKyAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CiAgICAgYXRrX3ZhbHVl
X2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOwogICAgIGlm
ICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTYz
NywxMSArNjUyLDEwIEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgp
CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCiB7Ci0gICAgR1Zh
bHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwotCiAgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lO
SVQ7CiAgICAgYXRrX3ZhbHVlX2dldF9tYXhpbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQp
LCAmdmFsdWUpOwogICAgIGlmICghR19WQUxVRV9IT0xEU19GTE9BVCgmdmFsdWUpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTc4OSwxMSArODAzLDkgQEAgc3RhdGljIEpTU3RyaW5nUmVmIGluZGV4
UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkK
IHsKICAgICBHT3duUHRyPGdjaGFyPiByYW5nZVN0cmluZyhnX3N0cmR1cCgiezAsIDB9IikpOwog
Ci0gICAgaWYgKCFlbGVtZW50KQorICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVtZW50KSkKICAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdl
dCgpKTsKIAotICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKGVsZW1lbnQpKTsKLQogICAgIEF0a09i
amVjdCogYXhUYWJsZSA9IGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKGVsZW1lbnQp
KTsKICAgICBpZiAoIWF4VGFibGUgfHwgIUFUS19JU19UQUJMRShheFRhYmxlKSkKICAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsK
QEAgLTg3NSwxMSArODg3LDkgQEAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoSlNDb24KIAogQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93
KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQogewotICAgIGlmICghbV9lbGVtZW50KQor
ICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgQVNTRVJUKEFUS19JU19UQUJMRShtX2VsZW1lbnQpKTsKLQogICAgIC8vIEFkb3B0IHRoZSBB
dGtPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjZWxsIGJlY2F1c2UKICAgICAvLyBhdF90YWJsZV9y
ZWZfYXQoKSB0cmFuc2ZlcnMgZnVsbCBvd25lcnNoaXAuCiAgICAgR1JlZlB0cjxBdGtPYmplY3Q+
IGZvdW5kQ2VsbCA9IGFkb3B0R1JlZihhdGtfdGFibGVfcmVmX2F0KEFUS19UQUJMRShtX2VsZW1l
bnQpLCByb3csIGNvbHVtbikpOwpAQCAtODk5LDcgKzkwOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2ln
bmVkIGxlCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0F0dHJp
YnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCkK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50KSkKICAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBTdHJpbmcgYXRrQXR0cmlidXRl
TmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwpAQCAtOTUzLDEx
ICs5NjMsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9y
dGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFs
dWUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgaW50IGZhY3RvcikKIHsKLSAgICBpZiAoIWVs
ZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfVkFMVUUoZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChBVEtfSVNfVkFMVUUoZWxlbWVudCkpOwotCiAgICAgR1ZhbHVlIGN1cnJl
bnRWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKICAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFsdWUo
QVRLX1ZBTFVFKGVsZW1lbnQpLCAmY3VycmVudFZhbHVlKTsKIApAQCAtOTg3LDExICs5OTUsNiBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudCgpCiAKIHZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogewotICAgIGlmICghbV9lbGVtZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKLQogICAg
IGlmICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEw
NDIsNiArMTA0NSw5IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vz
c2liaWxpdHlWYWx1ZSgpIGNvbnN0CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRvY3VtZW50RW5jb2RpbmcoKQogeworICAgIGlmICghQVRLX0lTX0RPQ1VNRU5UKG1fZWxl
bWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworCiAgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOwogICAgIGlmIChyb2xlICE9IEFUS19ST0xFX0RPQ1VNRU5UX0ZSQU1FKQogICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKQEAgLTEwNTEs
NiArMTA1Nyw5IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50
RW5jb2RpbmcoKQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dFVSSSgpCiB7CisgICAgaWYgKCFBVEtfSVNfRE9DVU1FTlQobV9lbGVtZW50KSkKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKICAgICBBdGtSb2xl
IHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CiAgICAg
aWYgKHJvbGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfRlJBTUUpCiAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwpAQCAtMTE0MSw3ICsxMTUwLDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZWxlbWVu
dCB8fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQorICAgIGlmICghQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudCks
ICJoYXNwb3B1cCIpLCAidHJ1ZSIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50QXRrLmNwcAppbmRleCA5YmM3OGE1Li5kZTkzMzg5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRr
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBKU1N0
cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29s
IGlzUm93UmFuZ2UpCiB7CiAgICAgR093blB0cjxnY2hhcj4gcmFuZ2VTdHJpbmcoZ19zdHJkdXAo
InswLCAwfSIpKTsKIAotICAgIGlmICghZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVChlbGVtZW50
LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QoZWxlbWVudC5nZXQoKSkpCiAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhyYW5nZVN0cmluZy5nZXQoKSk7
CiAKICAgICBBdGtPYmplY3QqIGF4VGFibGUgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09C
SkVDVChlbGVtZW50LmdldCgpKSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIEpTU3RyaW5n
UmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNS
b3dSYW5nZSkKIAogc3RhdGljIHZvaWQgYWx0ZXJDdXJyZW50VmFsdWUoUGxhdGZvcm1VSUVsZW1l
bnQgZWxlbWVudCwgaW50IGZhY3RvcikKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIUFUS19JU19W
QUxVRShlbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19WQUxVRShlbGVtZW50LmdldCgp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IEdfVkFMVUVf
SU5JVDsKQEAgLTM3Miw3ICszNzIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
RXF1YWwoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogb3RoZXJFbGVtZW50KQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gPiYgY2hpbGRyZW4pCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19J
U19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGNvdW50ID0gY2hpbGRyZW5D
b3VudCgpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Z2V0Q2hpbGRyZW4oVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiBjaGlsZHJlbiwgdW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09C
SkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgZW5kID0gbG9jYXRpb24gKyBs
ZW5ndGg7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbG9jYXRpb247IGkgPCBlbmQ7IGkrKykgewpA
QCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRy
ZW5XaXRoUmFuZ2UoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFCiAKIGludCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCkK
KyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFU
S19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7CkBAIC00MDMsNyArNDAzLDcgQEAgaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGlu
dCB4LCBpbnQgeSkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBvYmplY3RBdFBv
aW50ID0gYWRvcHRHUmVmKGF0a19jb21wb25lbnRfcmVmX2FjY2Vzc2libGVfYXRfcG9pbnQoQVRL
X0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpLCB4LCB5LCBBVEtfWFlfV0lORE9XKSk7CkBAIC00
MTIsNyArNDEyLDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwKIAogdW5zaWduZWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50
LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
ID4gY2hpbGRyZW47CkBAIC00MjgsNiArNDI4LDkgQEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5kZXhPZkNoaWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAK
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQogeworICAgIGlmICghQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIFZlY3RvcjxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjaGlsZHJlbjsKICAgICBnZXRDaGlsZHJlbldp
dGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIDEpOwogCkBAIC00ODcsNyArNDkwLDcgQEAgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxl
Y3RlZFJvd0F0SW5kZXgodW4KIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCiB7Ci0gICAgaWYgKCFtX2Vs
ZW1lbnQpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgQXRrUmVsYXRpb25TZXQqIHNldCA9IGF0a19vYmplY3RfcmVmX3Jl
bGF0aW9uX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpOwpAQCAtNTExLDcgKzUxNCw3
IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGl0bGVVSUVsZW1lbnQoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQogewotICAgIGlmICgh
bV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFB
VEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
QXRrT2JqZWN0KiBwYXJlbnQgPSBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQuZ2V0KCkpKTsKQEAgLTUzOCw2ICs1NDEsOSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDaGlsZHJlbigpCiB7CisgICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQo
KSkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
CiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGNoaWxkcmVuOwog
ICAgIGdldENoaWxkcmVuKGNoaWxkcmVuKTsKIApAQCAtNTUyLDcgKzU1OCw3IEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGls
ZHJlbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphbGxBdHRyaWJ1dGVzKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
IAogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVzT2ZF
bGVtZW50KHRoaXMpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNTYwLDcgKzU2Niw3IEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkK
IAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIHsKLSAgICBpZiAoIW1fZWxl
bWVudCkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBTdHJpbmcg
YXRrQXR0cmlidXRlTmFtZSA9IGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUp
OwpAQCAtNjI3LDcgKzYzMyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQogCiBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCiB7Ci0gICAgaWYg
KCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CiAKICAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2Jq
ZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7CkBAIC02NTIsNyArNjU4
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJv
bGVEZXNjcmlwdGlvbigpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpF
Q1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CiAKICAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0a19vYmplY3RfZ2V0X25hbWUoQVRLX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTY2Myw3ICs2NjksNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQogCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQogewotICAg
IGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAg
aWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3QgZ2NoYXIqIGRlc2Ny
aXB0aW9uID0gYXRrX29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpKTsKQEAgLTY3Nyw3ICs2ODMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQogCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24oKSBjb25zdAogewotICAg
IGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAg
aWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3QgZ2NoYXIqIGF4T3Jp
ZW50YXRpb24gPSAwOwpAQCAtNjk0LDcgKzcwMCw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZSgpCiB7
Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19URVhUKG1fZWxlbWVudC5nZXQoKSkpCisg
ICAgaWYgKCFBVEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIEdPd25QdHI8Z2NoYXI+IHRl
eHQoYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgMCwgLTEpKTsK
QEAgLTcwNiw3ICs3MTIsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c3RyaW5nVmFsdWUoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8
ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfT0JKRUNU
KG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOwogCiAgICAgY29uc3QgZ2NoYXIqIGxvY2FsZSA9IGF0a19vYmplY3RfZ2V0
X29iamVjdF9sb2NhbGUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTcyNyw3ICs3
MzMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGVscFRleHQoKSBjb25zdAogCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiB7
Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkK
KyAgICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBpbnQgeCwgeTsKQEAgLTczNyw3ICs3NDMsNyBAQCBkb3VibGUgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6eCgpCiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5
KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0
KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGludCB4LCB5OwpAQCAtNzQ3LDcgKzc1Myw3IEBAIGRvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OndpZHRoKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkp
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCB3aWR0aCwgaGVpZ2h0OwpAQCAtNzU3LDcg
Kzc2Myw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCiAKIGRvdWJs
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQogewotICAgIGlmICghbV9lbGVtZW50
IHx8ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfQ09N
UE9ORU5UKG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IHdp
ZHRoLCBoZWlnaHQ7CkBAIC03NzksNyArNzg1LDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNsaWNrUG9pbnRZKCkKIAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
dFZhbHVlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lTX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudC5nZXQoKSkp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOwpA
QCAtNzkyLDcgKzc5OCw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1
ZSgpIGNvbnN0CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCiB7
Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkK
KyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKQEAgLTgwNSw3ICs4MTEsNyBA
QCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWUoKQogCiBkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8
ICFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfVkFMVUUo
bV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBHVmFsdWUgdmFsdWUg
PSBHX1ZBTFVFX0lOSVQ7CkBAIC05ODcsNyArOTkzLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCiAKIGludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dDb3VudCgpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQg
fHwgIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX1RBQkxF
KG1fZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGF0a190
YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTk5NSw3ICsx
MDAxLDcgQEAgaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0NvdW50KCkKIAogaW50IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkNvdW50KCkKIHsKLSAgICBpZiAoIW1fZWxlbWVu
dCB8fCAhQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCisgICAgaWYgKCFBVEtfSVNfVEFC
TEUobV9lbGVtZW50LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gYXRr
X3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpOwpAQCAtMTAy
MSw3ICsxMDI3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWdu
ZWQgY29sLCB1bnNpZ25lZCByb3cpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIUFUS19JU19U
QUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQWRvcHQgdGhlIEF0a09iamVjdCBy
ZXByZXNlbnRpbmcgdGhlIGNlbGwgYmVjYXVzZQpAQCAtMTA3MCw5ICsxMDc2LDYgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudSgpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cHJlc3MoKQogewotICAgIGlmICghbV9lbGVtZW50IHx8ICFBVEtfSVNfT0JKRUNU
KG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghQVRLX0lTX0FD
VElPTihtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwOTMsNyArMTA5
Niw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
Y2Nlc3NpYmlsaXR5VmFsdWUoKSBjb25zdAogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1lbnRFbmNvZGluZygpCiB7Ci0gICAgaWYgKCFtX2Vs
ZW1lbnQgfHwgIUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKKyAgICBpZiAoIUFUS19J
U19ET0NVTUVOVChtX2VsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAogICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3Rf
Z2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKQEAgLTExMDUsNyArMTEwOCw3
IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1
bWVudEVuY29kaW5nKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRLX0lT
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX0RPQ1VNRU5UKG1fZWxl
bWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOwogCiAgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JK
RUNUKG1fZWxlbWVudC5nZXQoKSkpOwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0lnbm9yZWQoKSBjb25zdAogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omhhc1BvcHVwKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZWxlbWVudCB8fCAhQVRL
X0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQorICAgIGlmICghQVRLX0lTX09CSkVDVChtX2Vs
ZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVu
dC5nZXQoKSksICJoYXNwb3B1cCIpLCAidHJ1ZSIpOwotLSAKMS44LjMuMQoK
</data>
<flag name="review"
          id="234988"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>