<?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>122368</bug_id>
          
          <creation_ts>2013-10-04 19:05:59 -0700</creation_ts>
          <short_desc>Use more references instead of pointers in DocumentOrderedMap</short_desc>
          <delta_ts>2013-10-04 19:58:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936475</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 19:05:59 -0700</bug_when>
    <thetext>Use more references instead of pointers in DocumentOrderedMap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936476</commentid>
    <comment_count>1</comment_count>
      <attachid>213431</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 19:07:00 -0700</bug_when>
    <thetext>Created attachment 213431
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936480</commentid>
    <comment_count>2</comment_count>
      <attachid>213431</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-04 19:21:43 -0700</bug_when>
    <thetext>Comment on attachment 213431
Cleanup

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

Super neato! r=me

&gt; Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp:76
&gt; +    Node* node = document-&gt;documentNamedItem(*atomicPropertyName);

This should be an Element*. That&apos;ll remove a branch from hasTagName() below.

&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:109
&gt; +    Map::iterator it = m_map.find(&amp;key);

I&apos;d use auto for this.

&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:130
&gt; +    Map::iterator it = m_map.find(&amp;key);

Ditto.

&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:194
&gt; +    Map::iterator it = m_map.find(&amp;key);

Ditto.

&gt; Source/WebCore/dom/DocumentOrderedMap.h:96
&gt; +    Map::const_iterator it = m_map.find(&amp;id);

Ditto.

&gt; Source/WebCore/dom/DocumentOrderedMap.h:107
&gt; +    Map::const_iterator it = m_map.find(&amp;id);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936481</commentid>
    <comment_count>3</comment_count>
      <attachid>213431</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 19:22:24 -0700</bug_when>
    <thetext>Comment on attachment 213431
Cleanup

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

&gt; Source/WebCore/dom/IdTargetObserverRegistry.h:67
&gt;      ASSERT(!m_notifyingObserversInSet);

Oops, I need to assert that id is not empty here.

&gt; Source/WebCore/dom/TreeScope.cpp:244
&gt; +        return m_imageMapsByName-&gt;getElementByLowercasedMapName(*AtomicString(name.lower()).impl(), *this);
&gt; +    return m_imageMapsByName-&gt;getElementByMapName(*AtomicString(name).impl(), *this);

We should store AtomicString in a local variable here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936488</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 19:58:22 -0700</bug_when>
    <thetext>Committed r156940: &lt;http://trac.webkit.org/changeset/156940&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213431</attachid>
            <date>2013-10-04 19:07:00 -0700</date>
            <delta_ts>2013-10-04 19:22:24 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-122368-20131004190700.patch</filename>
            <type>text/plain</type>
            <size>52696</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0xMC0wNCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBVc2UgbW9yZSByZWZlcmVuY2Vz
IGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gRG9jdW1lbnRPcmRlcmVkTWFwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjIzNjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgQXRvbWljU3RyaW5nSW1wbCYg
aW5zdGVhZCBvZiBBdG9taWNTdHJpbmcqIG9yIEF0b21pY1N0cmluZyYgdG8gZWxpbWluYXRlCisg
ICAgICAgIGFzc2VydGlvbnMgYW5kIG51bGxpdHkgY2hlY2tzLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmFtZWRJdGVt
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1lbnQ6Om5hbWVHZXR0ZXIpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkSW1hZ2VF
bGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXApOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcCk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjprZXlNYXRjaGVzSWQpOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hl
c05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6a2V5TWF0Y2hlc01hcE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6a2V5TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmtleU1hdGNo
ZXNMYWJlbEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzV2luZG93
TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OmtleU1hdGNoZXNEb2N1bWVudE5hbWVkSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3Jk
ZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeU1hcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJl
bEZvckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6Omdl
dEVsZW1lbnRCeVdpbmRvd05hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9y
ZGVyZWRNYXA6OmdldEVsZW1lbnRCeURvY3VtZW50TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0QWxsRWxlbWVudHNCeUlkKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRPcmRlcmVkTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVy
ZWRNYXA6OmNvbnRhaW5zU2luZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJl
ZE1hcDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpj
b250YWluc011bHRpcGxlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
Ojp1cGRhdGVJZEZvckRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0
ZUxhYmVsKToKKyAgICAgICAgKiBkb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJz
SW50ZXJuYWwpOgorICAgICAgICAqIGRvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJz
KToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVT
Y29wZTo6Z2V0RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpnZXRB
bGxFbGVtZW50c0J5SWQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjphZGRFbGVtZW50
QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OnJlbW92ZUVsZW1lbnRCeUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6Z2V0RWxlbWVudEJ5TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU2NvcGU6OmFkZEVsZW1lbnRCeU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpyZW1vdmVFbGVtZW50QnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlRy
ZWVTY29wZTo6YWRkSW1hZ2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpyZW1v
dmVJbWFnZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkTGFiZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpyZW1vdmVMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6
OmxhYmVsRWxlbWVudEZvcklkKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlU2NvcGU6Omhhc0VsZW1lbnRXaXRoSWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQpOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpoYXNFbGVtZW50V2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpjb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoTmFtZSk6CisgICAgICAg
ICogaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVj
dGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmFkZERvY3VtZW50TmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjphZGRXaW5kb3dOYW1lZEl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpyZW1vdmVXaW5kb3dOYW1lZEl0ZW0pOgorICAgICAg
ICAqIGh0bWwvSFRNTERvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6
OmRvY3VtZW50TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6aGFz
RG9jdW1lbnROYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50Ojpkb2N1
bWVudE5hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnQ6Omhhc1dpbmRvd05hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnQ6OndpbmRvd05hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cyk6CisgICAgICAg
ICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNYXBFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWFwRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
YXBFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFt
ZWRJdGVtKToKKwogMjAxMy0xMC0wNCAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgQ1RURTogUG9saWN5Q2hlY2tlciBiYWNrcG9pbnRlciB0byBGcmFtZSBzaG91
bGQgYmUgYSByZWZlcmVuY2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxNTY5MjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDE3ICs5NiwxNyBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRl
CiAgICAgQVNTRVJUKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKIAogICAgIEF0b21pY1N0
cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlO
YW1lKTsKLSAgICBpZiAoIWF0b21pY1Byb3BlcnR5TmFtZSB8fCAhdG9IVE1MRG9jdW1lbnQoZG9j
dW1lbnQpLT5oYXNXaW5kb3dOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSkKKyAgICBpZiAo
IWF0b21pY1Byb3BlcnR5TmFtZSB8fCAhdG9IVE1MRG9jdW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5k
b3dOYW1lZEl0ZW0oKmF0b21pY1Byb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaWYgKFVOTElLRUxZKHRvSFRNTERvY3VtZW50KGRvY3VtZW50KS0+d2lu
ZG93TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKGF0b21pY1Byb3BlcnR5TmFtZSkp
KSB7CisgICAgaWYgKFVOTElLRUxZKHRvSFRNTERvY3VtZW50KGRvY3VtZW50KS0+d2luZG93TmFt
ZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCphdG9taWNQcm9wZXJ0eU5hbWUpKSkgewog
ICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBkb2N1bWVudC0+d2lu
ZG93TmFtZWRJdGVtcyhhdG9taWNQcm9wZXJ0eU5hbWUpOwogICAgICAgICBBU1NFUlQoIWNvbGxl
Y3Rpb24tPmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVCghY29sbGVjdGlvbi0+aGFzRXhhY3Rs
eU9uZUl0ZW0oKSk7CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihjb2xsZWN0aW9uKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRv
SlMoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIHRvSFRNTERvY3VtZW50KGRvY3VtZW50
KS0+d2luZG93TmFtZWRJdGVtKGF0b21pY1Byb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0b0pT
KGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCB0b0hUTUxEb2N1bWVudChkb2N1bWVudCkt
PndpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1lKSk7CiB9CiAKIGJvb2wgSlNET01X
aW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTI0
Niw3ICsyNDYsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPCiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT5kb2N1
bWVudCgpOwogICAgIGlmIChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBB
dG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChhdG9taWNQcm9wZXJ0eU5hbWUgJiYgdG9IVE1MRG9j
dW1lbnQoZG9jdW1lbnQpLT5oYXNXaW5kb3dOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSkg
eworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIHRvSFRNTERvY3VtZW50KGRvY3Vt
ZW50KS0+aGFzV2luZG93TmFtZWRJdGVtKCphdG9taWNQcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBSZWFkT25seSB8IERvbnREZWxldGUgfCBE
b250RW51bSwgbmFtZWRJdGVtR2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0zMjIsNyArMzIyLDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbgogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkp
IHsKICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gZmluZEF0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1l
ICYmIHRvSFRNTERvY3VtZW50KGRvY3VtZW50KS0+aGFzV2luZG93TmFtZWRJdGVtKGF0b21pY1By
b3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiB0b0hUTUxE
b2N1bWVudChkb2N1bWVudCktPmhhc1dpbmRvd05hbWVkSXRlbSgqYXRvbWljUHJvcGVydHlOYW1l
KSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0sIG5hbWVkSXRlbUdldHRlcik7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU2OTI3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBib29s
IEpTSFRNTERvY3VtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgSFRNTERvY3Vt
ZW50KiBkb2N1bWVudCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBdG9taWNT
dHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHByb3BlcnR5
TmFtZSk7Ci0gICAgcmV0dXJuIGF0b21pY1Byb3BlcnR5TmFtZSAmJiBkb2N1bWVudC0+aGFzRG9j
dW1lbnROYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gYXRvbWljUHJv
cGVydHlOYW1lICYmIGRvY3VtZW50LT5oYXNEb2N1bWVudE5hbWVkSXRlbSgqYXRvbWljUHJvcGVy
dHlOYW1lKTsKIH0KIAogSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBA
IC02MywxNyArNjMsMTcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6bmFtZUdldHRlcihFeGVj
UwogICAgIEhUTUxEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqLT5pbXBsKCk7CiAKICAgICBB
dG9taWNTdHJpbmdJbXBsKiBhdG9taWNQcm9wZXJ0eU5hbWUgPSBmaW5kQXRvbWljU3RyaW5nKHBy
b3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFhdG9taWNQcm9wZXJ0eU5hbWUgfHwgIWRvY3VtZW50LT5o
YXNEb2N1bWVudE5hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpKQorICAgIGlmICghYXRvbWlj
UHJvcGVydHlOYW1lIHx8ICFkb2N1bWVudC0+aGFzRG9jdW1lbnROYW1lZEl0ZW0oKmF0b21pY1By
b3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaWYgKFVO
TElLRUxZKGRvY3VtZW50LT5kb2N1bWVudE5hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50
cyhhdG9taWNQcm9wZXJ0eU5hbWUpKSkgeworICAgIGlmIChVTkxJS0VMWShkb2N1bWVudC0+ZG9j
dW1lbnROYW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVudHMoKmF0b21pY1Byb3BlcnR5TmFt
ZSkpKSB7CiAgICAgICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IGRvY3Vt
ZW50LT5kb2N1bWVudE5hbWVkSXRlbXMoYXRvbWljUHJvcGVydHlOYW1lKTsKICAgICAgICAgQVNT
RVJUKCFjb2xsZWN0aW9uLT5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQoIWNvbGxlY3Rpb24t
Pmhhc0V4YWN0bHlPbmVJdGVtKCkpOwogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoY29sbGVjdGlvbikpOwogICAgIH0KIAotICAg
IE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlO
YW1lKTsKKyAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50TmFtZWRJdGVtKCphdG9t
aWNQcm9wZXJ0eU5hbWUpOwogICAgIEZyYW1lKiBmcmFtZTsKICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShpZnJhbWVUYWcpICYmIChmcmFtZSA9IHRvSFRNTElGcmFtZUVsZW1lbnQobm9kZSktPmNv
bnRlbnRGcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTY5MjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsMTkgKzcwNywxOSBAQCB2
b2lkIERvY3VtZW50OjppbnZhbGlkYXRlQWNjZXNzS2V5TWFwKCkKICAgICBtX2VsZW1lbnRzQnlB
Y2Nlc3NLZXkuY2xlYXIoKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlM
b3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgSFRNTEltYWdlRWxlbWVu
dCYgZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmFkZChuYW1lLmltcGwoKSwgJmVs
ZW1lbnQpOworICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmFkZChuYW1lLCBlbGVtZW50KTsK
IH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFw
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKK3Zv
aWQgRG9jdW1lbnQ6OnJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQogewotICAg
IHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLnJlbW92ZShuYW1lLmltcGwoKSwgJmVsZW1lbnQpOwor
ICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLnJlbW92ZShuYW1lLCBlbGVtZW50KTsKIH0KIAot
SFRNTEltYWdlRWxlbWVudCogRG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CitIVE1MSW1hZ2VFbGVtZW50KiBEb2N1
bWVudDo6aW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0lt
cGwmIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAuZ2V0RWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcChuYW1lLmltcGwoKSwgdGhpcyk7CisgICAgcmV0dXJuIG1faW1h
Z2VzQnlVc2VtYXAuZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChuYW1lLCAqdGhpcyk7CiB9
CiAKIFNlbGVjdG9yUXVlcnlDYWNoZSYgRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlDYWNoZSgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTU2OTI3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw5ICsyNTgsOSBAQCBwdWJs
aWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5
KTsKICAgICB2b2lkIGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKIAotICAgIHZvaWQgYWRkSW1h
Z2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZyYsIEhUTUxJbWFn
ZUVsZW1lbnQmKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmcmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Ci0gICAgSFRNTEltYWdl
RWxlbWVudCogaW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0OworICAgIHZvaWQgYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7CisgICAgdm9pZCByZW1v
dmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYs
IEhUTUxJbWFnZUVsZW1lbnQmKTsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRC
eUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OwogCiAgICAg
U2VsZWN0b3JRdWVyeUNhY2hlJiBzZWxlY3RvclF1ZXJ5Q2FjaGUoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHJldmlzaW9uIDE1NjkyNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw0NSArNDQsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgYm9vbCBrZXlNYXRjaGVzSWQoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0lk
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0ga2V5OworICAgIHJldHVy
biBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpLmltcGwoKSA9PSAma2V5OwogfQogCi1pbmxpbmUg
Ym9vbCBrZXlNYXRjaGVzTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQq
IGVsZW1lbnQpCitpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTmFtZShjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmdldE5h
bWVBdHRyaWJ1dGUoKS5pbXBsKCkgPT0ga2V5OworICAgIHJldHVybiBlbGVtZW50LT5nZXROYW1l
QXR0cmlidXRlKCkuaW1wbCgpID09ICZrZXk7CiB9CiAKLWlubGluZSBib29sIGtleU1hdGNoZXNN
YXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKK2lu
bGluZSBib29sIGtleU1hdGNoZXNNYXBOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwg
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVtZW50
KSAmJiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLT5nZXROYW1lKCkuaW1wbCgpID09IGtleTsK
KyAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50
KGVsZW1lbnQpLT5nZXROYW1lKCkuaW1wbCgpID09ICZrZXk7CiB9CiAKLWlubGluZSBib29sIGtl
eU1hdGNoZXNMb3dlcmNhc2VkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVs
ZW1lbnQqIGVsZW1lbnQpCitpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIHJl
dHVybiBpc0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpICYmIHRvSFRNTE1hcEVsZW1lbnQoZWxlbWVu
dCktPmdldE5hbWUoKS5sb3dlcigpLmltcGwoKSA9PSBrZXk7CisgICAgcmV0dXJuIGlzSFRNTE1h
cEVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MTWFwRWxlbWVudChlbGVtZW50KS0+Z2V0TmFtZSgp
Lmxvd2VyKCkuaW1wbCgpID09ICZrZXk7CiB9CiAKLWlubGluZSBib29sIGtleU1hdGNoZXNMb3dl
cmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVu
dCkKK2lubGluZSBib29sIGtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogSFRNTDUg
c3BlY2lmaWNhdGlvbiBzYXlzIHdlIHNob3VsZCBtYXRjaCBib3RoIGltYWdlIGFuZCBvYmplY3Qg
ZWxlbWVudHMuCi0gICAgcmV0dXJuIGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSAmJiB0b0hU
TUxJbWFnZUVsZW1lbnQoZWxlbWVudCktPm1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKCprZXkpOwor
ICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1MSW1hZ2VFbGVt
ZW50KGVsZW1lbnQpLT5tYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChrZXkpOwogfQogCi1pbmxpbmUg
Ym9vbCBrZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCog
a2V5LCBFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0ga2V5OworICAgIHJldHVybiBpc0hUTUxMYWJlbEVs
ZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC0+Z2V0QXR0cmlidXRlKGZvckF0dHIpLmltcGwoKSA9
PSAma2V5OwogfQogCi1pbmxpbmUgYm9vbCBrZXlNYXRjaGVzV2luZG93TmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKK2lubGluZSBib29sIGtl
eU1hdGNoZXNXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBFbGVt
ZW50KiBlbGVtZW50KQogewotICAgIHJldHVybiBXaW5kb3dOYW1lQ29sbGVjdGlvbjo6bm9kZU1h
dGNoZXMoZWxlbWVudCwga2V5KTsKKyAgICByZXR1cm4gV2luZG93TmFtZUNvbGxlY3Rpb246Om5v
ZGVNYXRjaGVzKGVsZW1lbnQsICZrZXkpOwogfQogCi1pbmxpbmUgYm9vbCBrZXlNYXRjaGVzRG9j
dW1lbnROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBFbGVtZW50KiBlbGVt
ZW50KQoraW5saW5lIGJvb2wga2V5TWF0Y2hlc0RvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICByZXR1cm4gRG9jdW1l
bnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXMoZWxlbWVudCwga2V5KTsKKyAgICByZXR1cm4g
RG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXMoZWxlbWVudCwgJmtleSk7CiB9CiAK
IHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCkBAIC05MCwxMiArOTAsOSBAQCB2b2lk
IERvY3VtZW50T3JkZXJlZE1hcDo6Y2xlYXIoKQogICAgIG1fbWFwLmNsZWFyKCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnRPcmRlcmVkTWFwOjphZGQoY29uc3QgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBF
bGVtZW50KiBlbGVtZW50KQordm9pZCBEb2N1bWVudE9yZGVyZWRNYXA6OmFkZChjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJiBrZXksIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGtleSk7
Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCi0gICAgTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgTWFwRW50cnkoZWxlbWVudCkpOworICAgIE1hcDo6QWRkUmVzdWx0IGFk
ZFJlc3VsdCA9IG1fbWFwLmFkZCgma2V5LCBNYXBFbnRyeSgmZWxlbWVudCkpOwogICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDYsMzcgKzEwMywz
MSBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6YWRkKGNvbnN0IEF0b21pCiAgICAgZW50cnku
b3JkZXJlZExpc3QuY2xlYXIoKTsKIH0KIAotdm9pZCBEb2N1bWVudE9yZGVyZWRNYXA6OnJlbW92
ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIERv
Y3VtZW50T3JkZXJlZE1hcDo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgRWxl
bWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoa2V5KTsKLSAgICBBU1NFUlQoZWxlbWVudCk7
Ci0KICAgICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgTWFwOjppdGVyYXRvciBpdCA9
IG1fbWFwLmZpbmQoa2V5KTsKKyAgICBNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZCgma2V5
KTsKICAgICBBU1NFUlQoaXQgIT0gbV9tYXAuZW5kKCkpOwogICAgIE1hcEVudHJ5JiBlbnRyeSA9
IGl0LT52YWx1ZTsKIAogICAgIEFTU0VSVChlbnRyeS5jb3VudCk7CiAgICAgaWYgKGVudHJ5LmNv
dW50ID09IDEpIHsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS5lbGVtZW50IHx8IGVudHJ5LmVsZW1l
bnQgPT0gZWxlbWVudCk7CisgICAgICAgIEFTU0VSVCghZW50cnkuZWxlbWVudCB8fCBlbnRyeS5l
bGVtZW50ID09ICZlbGVtZW50KTsKICAgICAgICAgbV9tYXAucmVtb3ZlKGl0KTsKICAgICB9IGVs
c2UgewotICAgICAgICBpZiAoZW50cnkuZWxlbWVudCA9PSBlbGVtZW50KQorICAgICAgICBpZiAo
ZW50cnkuZWxlbWVudCA9PSAmZWxlbWVudCkKICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSAw
OwogICAgICAgICBlbnRyeS5jb3VudC0tOwogICAgICAgICBlbnRyeS5vcmRlcmVkTGlzdC5jbGVh
cigpOyAvLyBGSVhNRTogUmVtb3ZlIHRoZSBlbGVtZW50IGluc3RlYWQgaWYgdGhlcmUgYXJlIG9u
bHkgZmV3IGl0ZW1zIGxlZnQuCiAgICAgfQogfQogCi10ZW1wbGF0ZTxib29sIGtleU1hdGNoZXMo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCosIEVsZW1lbnQqKT4KLWlubGluZSBFbGVtZW50KiBEb2N1
bWVudE9yZGVyZWRNYXA6OmdldChjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFRy
ZWVTY29wZSogc2NvcGUpIGNvbnN0Cit0ZW1wbGF0ZTxib29sIGtleU1hdGNoZXMoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYsIEVsZW1lbnQqKT4KK2lubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVy
ZWRNYXA6OmdldChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYg
c2NvcGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLQog
ICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIE1hcDo6aXRlcmF0b3IgaXQgPSBt
X21hcC5maW5kKGtleSk7CisgICAgTWFwOjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoJmtleSk7
CiAgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTQ2
LDcgKzEzNyw3IEBAIGlubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldCgKICAg
ICAgICAgcmV0dXJuIGVudHJ5LmVsZW1lbnQ7CiAKICAgICAvLyBXZSBrbm93IHRoZXJlJ3MgYXQg
bGVhc3Qgb25lIG5vZGUgdGhhdCBtYXRjaGVzOyBpdGVyYXRlIHRvIGZpbmQgdGhlIGZpcnN0IG9u
ZS4KLSAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbihzY29wZS0+cm9vdE5vZGUoKSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVy
c2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oc2NvcGUucm9vdE5vZGUoKSk7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CiAgICAgICAgIGlmICgha2V5
TWF0Y2hlcyhrZXksIGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVu
dHJ5LmVsZW1lbnQgPSBlbGVtZW50OwpAQCAtMTU2LDU0ICsxNDcsNTEgQEAgaW5saW5lIEVsZW1l
bnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KAogICAgIHJldHVybiAwOwogfQogCi1FbGVtZW50
KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKK0VsZW1lbnQqIERvY3VtZW50
T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBj
b25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hl
c0lkPihrZXksIHNjb3BlKTsKIH0KIAotRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRF
bGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3Bl
KiBzY29wZSkgY29uc3QKK0VsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5
TmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzTmFtZT4oa2V5LCBzY29wZSk7CiB9
CiAKLUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TWFwTmFtZShjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0CitI
VE1MTWFwRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlNYXBOYW1lKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
IHsKLSAgICByZXR1cm4gZ2V0PGtleU1hdGNoZXNNYXBOYW1lPihrZXksIHNjb3BlKTsKKyAgICBy
ZXR1cm4gdG9IVE1MTWFwRWxlbWVudChnZXQ8a2V5TWF0Y2hlc01hcE5hbWU+KGtleSwgc2NvcGUp
KTsKIH0KIAotRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNh
c2VkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFRyZWVTY29wZSog
c2NvcGUpIGNvbnN0CitIVE1MTWFwRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVt
ZW50QnlMb3dlcmNhc2VkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0
IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzTG93
ZXJjYXNlZE1hcE5hbWU+KGtleSwgc2NvcGUpOworICAgIHJldHVybiB0b0hUTUxNYXBFbGVtZW50
KGdldDxrZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5hbWU+KGtleSwgc2NvcGUpKTsKIH0KIAotSFRN
TEltYWdlRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMb3dlcmNhc2Vk
VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29w
ZSkgY29uc3QKK0hUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRy
ZWVTY29wZSYgc2NvcGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRvSFRNTEltYWdlRWxlbWVudChn
ZXQ8a2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXA+KGtleSwgc2NvcGUpKTsKIH0KIAotRWxlbWVu
dCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFRyZWVTY29wZSogc2NvcGUpIGNvbnN0CitI
VE1MTGFiZWxFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxhYmVsRm9y
QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBz
Y29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0PGtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0
ZT4oa2V5LCBzY29wZSk7CisgICAgcmV0dXJuIHRvSFRNTExhYmVsRWxlbWVudChnZXQ8a2V5TWF0
Y2hlc0xhYmVsRm9yQXR0cmlidXRlPihrZXksIHNjb3BlKSk7CiB9CiAKLUVsZW1lbnQqIERvY3Vt
ZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKK0VsZW1lbnQqIERv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZ2V0PGtleU1hdGNoZXNXaW5kb3dOYW1lZEl0ZW0+KGtleSwgc2NvcGUpOwogfQogCi1F
bGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeURvY3VtZW50TmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29u
c3QKK0VsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5RG9jdW1lbnROYW1l
ZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3Bl
KSBjb25zdAogewogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0RvY3VtZW50TmFtZWRJdGVtPihr
ZXksIHNjb3BlKTsKIH0KIAotY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogRG9jdW1lbnRPcmRlcmVk
TWFwOjpnZXRBbGxFbGVtZW50c0J5SWQoY29uc3QgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25z
dCBUcmVlU2NvcGUqIHNjb3BlKSBjb25zdAorY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogRG9jdW1l
bnRPcmRlcmVkTWFwOjpnZXRBbGxFbGVtZW50c0J5SWQoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYg
a2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIEFTU0VSVChrZXkpOwot
ICAgIEFTU0VSVChzY29wZSk7Ci0KICAgICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAg
ICBNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOworICAgIE1hcDo6aXRlcmF0b3Ig
aXQgPSBtX21hcC5maW5kKCZrZXkpOwogICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTIxNCw3ICsyMDIsNyBAQCBjb25zdCBWZWN0b3I8RWxlbWVudCo+
KiBEb2N1bWVudE9yZGVyZWRNCiAKICAgICBpZiAoZW50cnkub3JkZXJlZExpc3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGVudHJ5Lm9yZGVyZWRMaXN0LnJlc2VydmVDYXBhY2l0eShlbnRyeS5jb3Vu
dCk7Ci0gICAgICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVudHJ5LmVsZW1lbnQgPyBlbnRy
eS5lbGVtZW50IDogRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oc2NvcGUtPnJvb3ROb2Rl
KCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkg
eworICAgICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbnRyeS5lbGVtZW50ID8gZW50cnku
ZWxlbWVudCA6IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNjb3BlLnJvb3ROb2RlKCkp
OyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkgewog
ICAgICAgICAgICAgaWYgKCFrZXlNYXRjaGVzSWQoa2V5LCBlbGVtZW50KSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVudHJ5Lm9yZGVyZWRMaXN0LmFwcGVuZChlbGVt
ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgJKHJldmlz
aW9uIDE1NjkyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsMzQgKzQwLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxF
bGVtZW50OworY2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBUcmVlU2NvcGU7CiAKIGNsYXNz
IERvY3VtZW50T3JkZXJlZE1hcCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBhZGQoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCosIEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBBdG9taWNTdHJp
bmdJbXBsKiwgRWxlbWVudCopOworICAgIHZvaWQgYWRkKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
LCBFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEVs
ZW1lbnQmKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zU2luZ2xlKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwqKSBjb25zdDsKLSAgICBib29sIGNvbnRhaW5zTXVsdGlwbGUoY29uc3Qg
QXRvbWljU3RyaW5nSW1wbCopIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNTaW5nbGUoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnNNdWx0aXBsZShjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJikgY29uc3Q7CiAKICAgICAvLyBjb25jcmV0ZSBpbnN0YW50aWF0aW9ucyBv
ZiB0aGUgZ2V0PD4oKSBtZXRob2QgdGVtcGxhdGUKLSAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJ
ZChjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7Ci0gICAg
RWxlbWVudCogZ2V0RWxlbWVudEJ5TmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3Qg
VHJlZVNjb3BlKikgY29uc3Q7Ci0gICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFtZShjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7Ci0gICAgRWxlbWVu
dCogZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCos
IGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwotICAgIEhUTUxJbWFnZUVsZW1lbnQqIGdldEVsZW1l
bnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVT
Y29wZSopIGNvbnN0OwotICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRl
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKLSAgICBF
bGVtZW50KiBnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1w
bCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwotICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeURv
Y3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUq
KSBjb25zdDsKKyAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CisgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5
TmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7Cisg
ICAgSFRNTE1hcEVsZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OworICAgIEhUTUxNYXBFbGVtZW50KiBnZXRF
bGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3Qg
VHJlZVNjb3BlJikgY29uc3Q7CisgICAgSFRNTEltYWdlRWxlbWVudCogZ2V0RWxlbWVudEJ5TG93
ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikg
Y29uc3Q7CisgICAgSFRNTExhYmVsRWxlbWVudCogZ2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OworICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeVdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CisgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5
RG9jdW1lbnROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29w
ZSYpIGNvbnN0OwogCi0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZ2V0QWxsRWxlbWVudHNC
eUlkKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAg
ICBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBnZXRBbGxFbGVtZW50c0J5SWQoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogCiAgICAgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8Ym9vbCBrZXlNYXRj
aGVzKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCBFbGVtZW50Kik+IEVsZW1lbnQqIGdldChjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Ym9vbCBrZXlNYXRjaGVzKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBFbGVtZW50Kik+IEVs
ZW1lbnQqIGdldChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29u
c3Q7CiAKICAgICBzdHJ1Y3QgTWFwRW50cnkgewogICAgICAgICBNYXBFbnRyeSgpCkBAIC04OSwy
MCArOTEsMjAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIE1hcCBtX21hcDsKIH07CiAKLWlubGlu
ZSBib29sIERvY3VtZW50T3JkZXJlZE1hcDo6Y29udGFpbnNTaW5nbGUoY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCogaWQpIGNvbnN0CitpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNvbnRh
aW5zU2luZ2xlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGlkKSBjb25zdAogewotICAgIE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGlkKTsKKyAgICBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9tYXAuZmluZCgmaWQpOwogICAgIHJldHVybiBpdCAhPSBtX21hcC5lbmQoKSAm
JiBpdC0+dmFsdWUuY291bnQgPT0gMTsKIH0KIAotaW5saW5lIGJvb2wgRG9jdW1lbnRPcmRlcmVk
TWFwOjpjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKK2lubGluZSBi
b29sIERvY3VtZW50T3JkZXJlZE1hcDo6Y29udGFpbnMoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYg
aWQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGlkKTsKKyAgICByZXR1cm4g
bV9tYXAuY29udGFpbnMoJmlkKTsKIH0KIAotaW5saW5lIGJvb2wgRG9jdW1lbnRPcmRlcmVkTWFw
Ojpjb250YWluc011bHRpcGxlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAoraW5s
aW5lIGJvb2wgRG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWluc011bHRpcGxlKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIGlkKSBjb25zdAogewotICAgIE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X21hcC5maW5kKGlkKTsKKyAgICBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tYXAuZmluZCgm
aWQpOwogICAgIHJldHVybiBpdCAhPSBtX21hcC5lbmQoKSAmJiBpdC0+dmFsdWUuY291bnQgPiAx
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTY5MjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3ODUsOSAr
Mjc4NSw5IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvclRyZWVTY29wZShUcmUKICAgICBB
U1NFUlQob2xkTmFtZSAhPSBuZXdOYW1lKTsKIAogICAgIGlmICghb2xkTmFtZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHNjb3BlLT5yZW1vdmVFbGVtZW50QnlOYW1lKG9sZE5hbWUsIHRoaXMpOworICAg
ICAgICBzY29wZS0+cmVtb3ZlRWxlbWVudEJ5TmFtZSgqb2xkTmFtZS5pbXBsKCksICp0aGlzKTsK
ICAgICBpZiAoIW5ld05hbWUuaXNFbXB0eSgpKQotICAgICAgICBzY29wZS0+YWRkRWxlbWVudEJ5
TmFtZShuZXdOYW1lLCB0aGlzKTsKKyAgICAgICAgc2NvcGUtPmFkZEVsZW1lbnRCeU5hbWUoKm5l
d05hbWUuaW1wbCgpLCAqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvckRv
Y3VtZW50KEhUTUxEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKQpAQCAtMjc5OCwxNyArMjc5OCwxNyBAQCB2
b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JEb2N1bWVudChIVE1MCiAgICAgaWYgKFdpbmRvd05h
bWVDb2xsZWN0aW9uOjpub2RlTWF0Y2hlc0lmTmFtZUF0dHJpYnV0ZU1hdGNoKHRoaXMpKSB7CiAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQgPSBXaW5kb3dOYW1lQ29sbGVjdGlvbjo6bm9k
ZU1hdGNoZXNJZklkQXR0cmlidXRlTWF0Y2godGhpcykgPyBnZXRJZEF0dHJpYnV0ZSgpIDogbnVs
bEF0b207CiAgICAgICAgIGlmICghb2xkTmFtZS5pc0VtcHR5KCkgJiYgb2xkTmFtZSAhPSBpZCkK
LSAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZVdpbmRvd05hbWVkSXRlbShvbGROYW1lLCB0aGlz
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZVdpbmRvd05hbWVkSXRlbSgqb2xkTmFtZS5p
bXBsKCksICp0aGlzKTsKICAgICAgICAgaWYgKCFuZXdOYW1lLmlzRW1wdHkoKSAmJiBuZXdOYW1l
ICE9IGlkKQotICAgICAgICAgICAgZG9jdW1lbnQuYWRkV2luZG93TmFtZWRJdGVtKG5ld05hbWUs
IHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkV2luZG93TmFtZWRJdGVtKCpuZXdOYW1l
LmltcGwoKSwgKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChEb2N1bWVudE5hbWVDb2xsZWN0aW9u
Ojpub2RlTWF0Y2hlc0lmTmFtZUF0dHJpYnV0ZU1hdGNoKHRoaXMpKSB7CiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgaWQgPSBEb2N1bWVudE5hbWVDb2xsZWN0aW9uOjpub2RlTWF0Y2hlc0lm
SWRBdHRyaWJ1dGVNYXRjaCh0aGlzKSA/IGdldElkQXR0cmlidXRlKCkgOiBudWxsQXRvbTsKICAg
ICAgICAgaWYgKCFvbGROYW1lLmlzRW1wdHkoKSAmJiBvbGROYW1lICE9IGlkKQotICAgICAgICAg
ICAgZG9jdW1lbnQucmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW0ob2xkTmFtZSwgdGhpcyk7CisgICAg
ICAgICAgICBkb2N1bWVudC5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbSgqb2xkTmFtZS5pbXBsKCks
ICp0aGlzKTsKICAgICAgICAgaWYgKCFuZXdOYW1lLmlzRW1wdHkoKSAmJiBuZXdOYW1lICE9IGlk
KQotICAgICAgICAgICAgZG9jdW1lbnQuYWRkRG9jdW1lbnROYW1lZEl0ZW0obmV3TmFtZSwgdGhp
cyk7CisgICAgICAgICAgICBkb2N1bWVudC5hZGREb2N1bWVudE5hbWVkSXRlbSgqbmV3TmFtZS5p
bXBsKCksICp0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI4MzUsOSArMjgzNSw5IEBAIHZvaWQgRWxl
bWVudDo6dXBkYXRlSWRGb3JUcmVlU2NvcGUoVHJlZVMKICAgICBBU1NFUlQob2xkSWQgIT0gbmV3
SWQpOwogCiAgICAgaWYgKCFvbGRJZC5pc0VtcHR5KCkpCi0gICAgICAgIHNjb3BlLT5yZW1vdmVF
bGVtZW50QnlJZChvbGRJZCwgdGhpcyk7CisgICAgICAgIHNjb3BlLT5yZW1vdmVFbGVtZW50QnlJ
ZCgqb2xkSWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgaWYgKCFuZXdJZC5pc0VtcHR5KCkpCi0gICAg
ICAgIHNjb3BlLT5hZGRFbGVtZW50QnlJZChuZXdJZCwgdGhpcyk7CisgICAgICAgIHNjb3BlLT5h
ZGRFbGVtZW50QnlJZCgqbmV3SWQuaW1wbCgpLCAqdGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
dXBkYXRlSWRGb3JEb2N1bWVudChIVE1MRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIG9sZElkLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkLCBIVE1MRG9jdW1lbnROYW1l
ZEl0ZW1NYXBzVXBkYXRpbmdDb25kaXRpb24gY29uZGl0aW9uKQpAQCAtMjg0OCwxNyArMjg0OCwx
NyBAQCB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUlkRm9yRG9jdW1lbnQoSFRNTERvCiAgICAgaWYgKFdp
bmRvd05hbWVDb2xsZWN0aW9uOjpub2RlTWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaCh0aGlzKSkg
ewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBjb25kaXRpb24gPT0gVXBkYXRl
SFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0ZSAm
JiBXaW5kb3dOYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZk5hbWVBdHRyaWJ1dGVNYXRjaCh0
aGlzKSA/IGdldE5hbWVBdHRyaWJ1dGUoKSA6IG51bGxBdG9tOwogICAgICAgICBpZiAoIW9sZElk
LmlzRW1wdHkoKSAmJiBvbGRJZCAhPSBuYW1lKQotICAgICAgICAgICAgZG9jdW1lbnQucmVtb3Zl
V2luZG93TmFtZWRJdGVtKG9sZElkLCB0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92
ZVdpbmRvd05hbWVkSXRlbSgqb2xkSWQuaW1wbCgpLCAqdGhpcyk7CiAgICAgICAgIGlmICghbmV3
SWQuaXNFbXB0eSgpICYmIG5ld0lkICE9IG5hbWUpCi0gICAgICAgICAgICBkb2N1bWVudC5hZGRX
aW5kb3dOYW1lZEl0ZW0obmV3SWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQuYWRkV2lu
ZG93TmFtZWRJdGVtKCpuZXdJZC5pbXBsKCksICp0aGlzKTsKICAgICB9CiAKICAgICBpZiAoRG9j
dW1lbnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZklkQXR0cmlidXRlTWF0Y2godGhpcykp
IHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gY29uZGl0aW9uID09IFVwZGF0
ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNPbmx5SWZEaWZmZXJzRnJvbU5hbWVBdHRyaWJ1dGUg
JiYgRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZk5hbWVBdHRyaWJ1dGVNYXRj
aCh0aGlzKSA/IGdldE5hbWVBdHRyaWJ1dGUoKSA6IG51bGxBdG9tOwogICAgICAgICBpZiAoIW9s
ZElkLmlzRW1wdHkoKSAmJiBvbGRJZCAhPSBuYW1lKQotICAgICAgICAgICAgZG9jdW1lbnQucmVt
b3ZlRG9jdW1lbnROYW1lZEl0ZW0ob2xkSWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQu
cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW0oKm9sZElkLmltcGwoKSwgKnRoaXMpOwogICAgICAgICBp
ZiAoIW5ld0lkLmlzRW1wdHkoKSAmJiBuZXdJZCAhPSBuYW1lKQotICAgICAgICAgICAgZG9jdW1l
bnQuYWRkRG9jdW1lbnROYW1lZEl0ZW0obmV3SWQsIHRoaXMpOworICAgICAgICAgICAgZG9jdW1l
bnQuYWRkRG9jdW1lbnROYW1lZEl0ZW0oKm5ld0lkLmltcGwoKSwgKnRoaXMpOwogICAgIH0KIH0K
IApAQCAtMjg3Myw5ICsyODczLDkgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVMYWJlbChUcmVlU2Nv
cGUqIHNjbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW9sZEZvckF0dHJpYnV0ZVZhbHVl
LmlzRW1wdHkoKSkKLSAgICAgICAgc2NvcGUtPnJlbW92ZUxhYmVsKG9sZEZvckF0dHJpYnV0ZVZh
bHVlLCB0b0hUTUxMYWJlbEVsZW1lbnQodGhpcykpOworICAgICAgICBzY29wZS0+cmVtb3ZlTGFi
ZWwoKm9sZEZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRvSFRNTExhYmVsRWxlbWVudCh0aGlz
KSk7CiAgICAgaWYgKCFuZXdGb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHNj
b3BlLT5hZGRMYWJlbChuZXdGb3JBdHRyaWJ1dGVWYWx1ZSwgdG9IVE1MTGFiZWxFbGVtZW50KHRo
aXMpKTsKKyAgICAgICAgc2NvcGUtPmFkZExhYmVsKCpuZXdGb3JBdHRyaWJ1dGVWYWx1ZS5pbXBs
KCksICp0b0hUTUxMYWJlbEVsZW1lbnQodGhpcykpOwogfQogCiB2b2lkIEVsZW1lbnQ6OndpbGxN
b2RpZnlBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9JZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuY3BwCShyZXZpc2lv
biAxNTY5MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDExIEBAIHZvaWQgSWRUYXJnZXRPYnNl
cnZlclJlZ2lzdHJ5OjpyZW1vdmVPYnMKICAgICAgICAgbV9yZWdpc3RyeS5yZW1vdmUoaXRlcik7
CiB9CiAKLXZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnNlcnZlcnNJbnRl
cm5hbChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQordm9pZCBJZFRhcmdldE9ic2VydmVyUmVnaXN0
cnk6Om5vdGlmeU9ic2VydmVyc0ludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGlkKQog
ewotICAgIEFTU0VSVCghaWQuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fcmVnaXN0cnkuaXNF
bXB0eSgpKTsKIAotICAgIG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQgPSBtX3JlZ2lzdHJ5Lmdl
dChpZC5pbXBsKCkpOworICAgIG1fbm90aWZ5aW5nT2JzZXJ2ZXJzSW5TZXQgPSBtX3JlZ2lzdHJ5
LmdldCgmaWQpOwogICAgIGlmICghbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03Nyw3ICs3Niw3IEBAIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5
Ojpub3RpZnlPYnMKICAgICB9CiAKICAgICBpZiAobV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldC0+
aXNFbXB0eSgpKQotICAgICAgICBtX3JlZ2lzdHJ5LnJlbW92ZShpZC5pbXBsKCkpOworICAgICAg
ICBtX3JlZ2lzdHJ5LnJlbW92ZSgmaWQpOwogCiAgICAgbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNl
dCA9IDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0lkVGFyZ2V0T2JzZXJ2ZXJS
ZWdpc3RyeS5oCShyZXZpc2lvbiAxNTY5MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vSWRUYXJn
ZXRPYnNlcnZlclJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDIzICs0MiwzMCBAQCBj
bGFzcyBJZFRhcmdldE9ic2VydmVyUmVnaXN0cnkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeT4gY3JlYXRlKCk7CiAgICAgdm9pZCBub3Rp
ZnlPYnNlcnZlcnMoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7CisgICAgdm9pZCBub3RpZnlPYnNl
cnZlcnMoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgaWQpOwogCiBwcml2YXRlOgogICAgIElkVGFy
Z2V0T2JzZXJ2ZXJSZWdpc3RyeSgpIDogbV9ub3RpZnlpbmdPYnNlcnZlcnNJblNldCgwKSB7IH0K
ICAgICB2b2lkIGFkZE9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIElkVGFyZ2V0T2Jz
ZXJ2ZXIqKTsKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKGNvbnN0IEF0b21pY1N0cmluZyYgaWQs
IElkVGFyZ2V0T2JzZXJ2ZXIqKTsKLSAgICB2b2lkIG5vdGlmeU9ic2VydmVyc0ludGVybmFsKGNv
bnN0IEF0b21pY1N0cmluZyYgaWQpOworICAgIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzSW50ZXJuYWwo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYgaWQpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PElkVGFy
Z2V0T2JzZXJ2ZXIqPiBPYnNlcnZlclNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3Ry
aW5nSW1wbCosIE93blB0cjxPYnNlcnZlclNldD4gPiBJZFRvT2JzZXJ2ZXJTZXRNYXA7CisgICAg
dHlwZWRlZiBIYXNoTWFwPGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8T2JzZXJ2ZXJT
ZXQ+ID4gSWRUb09ic2VydmVyU2V0TWFwOwogICAgIElkVG9PYnNlcnZlclNldE1hcCBtX3JlZ2lz
dHJ5OwogICAgIE9ic2VydmVyU2V0KiBtX25vdGlmeWluZ09ic2VydmVyc0luU2V0OwogfTsKIAog
aW5saW5lIHZvaWQgSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnNlcnZlcnMoY29u
c3QgQXRvbWljU3RyaW5nJiBpZCkKIHsKKyAgICBpZiAoIWlkLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG5vdGlmeU9ic2VydmVycygqaWQuaW1wbCgpKTsKK30KKworaW5saW5lIHZvaWQgSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5Ojpub3RpZnlPYnNlcnZlcnMoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCYgaWQpCit7CiAgICAgQVNTRVJUKCFtX25vdGlmeWluZ09ic2VydmVyc0luU2V0KTsKLSAg
ICBpZiAoaWQuaXNFbXB0eSgpIHx8IG1fcmVnaXN0cnkuaXNFbXB0eSgpKQorICAgIGlmIChtX3Jl
Z2lzdHJ5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIElkVGFyZ2V0T2JzZXJ2ZXJS
ZWdpc3RyeTo6bm90aWZ5T2JzZXJ2ZXJzSW50ZXJuYWwoaWQpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDE1NjkyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgRWxlbWVudCog
VHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJZChjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBp
ZiAoIW1fZWxlbWVudHNCeUlkKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9lbGVt
ZW50c0J5SWQtPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZC5pbXBsKCksIHRoaXMpOworICAgIHJl
dHVybiBtX2VsZW1lbnRzQnlJZC0+Z2V0RWxlbWVudEJ5SWQoKmVsZW1lbnRJZC5pbXBsKCksICp0
aGlzKTsKIH0KIAogY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogVHJlZVNjb3BlOjpnZXRBbGxFbGVt
ZW50c0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CkBAIC0xNTMsMjIg
KzE1MywyMiBAQCBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBUcmVlU2NvcGU6OmdldEFsCiAgICAg
ICAgIHJldHVybiAwOwogICAgIGlmICghbV9lbGVtZW50c0J5SWQpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC0+Z2V0QWxsRWxlbWVudHNCeUlkKGVsZW1lbnRJ
ZC5pbXBsKCksIHRoaXMpOworICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC0+Z2V0QWxsRWxlbWVu
dHNCeUlkKCplbGVtZW50SWQuaW1wbCgpLCAqdGhpcyk7CiB9CiAKLXZvaWQgVHJlZVNjb3BlOjph
ZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgVHJlZVNjb3BlOjphZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiBlbGVtZW50SWQsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFtX2VsZW1lbnRz
QnlJZCkKICAgICAgICAgbV9lbGVtZW50c0J5SWQgPSBhZG9wdFB0cihuZXcgRG9jdW1lbnRPcmRl
cmVkTWFwKTsKLSAgICBtX2VsZW1lbnRzQnlJZC0+YWRkKGVsZW1lbnRJZC5pbXBsKCksIGVsZW1l
bnQpOworICAgIG1fZWxlbWVudHNCeUlkLT5hZGQoZWxlbWVudElkLCBlbGVtZW50KTsKICAgICBt
X2lkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS0+bm90aWZ5T2JzZXJ2ZXJzKGVsZW1lbnRJZCk7CiB9
CiAKLXZvaWQgVHJlZVNjb3BlOjpyZW1vdmVFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcm
IGVsZW1lbnRJZCwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgVHJlZVNjb3BlOjpyZW1vdmVFbGVt
ZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBlbGVtZW50SWQsIEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKCFtX2VsZW1lbnRzQnlJZCkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
ZWxlbWVudHNCeUlkLT5yZW1vdmUoZWxlbWVudElkLmltcGwoKSwgZWxlbWVudCk7CisgICAgbV9l
bGVtZW50c0J5SWQtPnJlbW92ZShlbGVtZW50SWQsIGVsZW1lbnQpOwogICAgIG1faWRUYXJnZXRP
YnNlcnZlclJlZ2lzdHJ5LT5ub3RpZnlPYnNlcnZlcnMoZWxlbWVudElkKTsKIH0KIApAQCAtMTc4
LDIxICsxNzgsMjEgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlOYW1lKGNvbgog
ICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fZWxlbWVudHNCeU5hbWUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX2VsZW1lbnRzQnlOYW1lLT5nZXRFbGVtZW50QnlOYW1lKG5h
bWUuaW1wbCgpLCB0aGlzKTsKKyAgICByZXR1cm4gbV9lbGVtZW50c0J5TmFtZS0+Z2V0RWxlbWVu
dEJ5TmFtZSgqbmFtZS5pbXBsKCksICp0aGlzKTsKIH0KIAotdm9pZCBUcmVlU2NvcGU6OmFkZEVs
ZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBUcmVlU2NvcGU6OmFkZEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYg
bmFtZSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIW1fZWxlbWVudHNCeU5hbWUpCiAg
ICAgICAgIG1fZWxlbWVudHNCeU5hbWUgPSBhZG9wdFB0cihuZXcgRG9jdW1lbnRPcmRlcmVkTWFw
KTsKLSAgICBtX2VsZW1lbnRzQnlOYW1lLT5hZGQobmFtZS5pbXBsKCksIGVsZW1lbnQpOworICAg
IG1fZWxlbWVudHNCeU5hbWUtPmFkZChuYW1lLCBlbGVtZW50KTsKIH0KIAotdm9pZCBUcmVlU2Nv
cGU6OnJlbW92ZUVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50
KiBlbGVtZW50KQordm9pZCBUcmVlU2NvcGU6OnJlbW92ZUVsZW1lbnRCeU5hbWUoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYgbmFtZSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIW1fZWxl
bWVudHNCeU5hbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2VsZW1lbnRzQnlOYW1lLT5yZW1v
dmUobmFtZS5pbXBsKCksIGVsZW1lbnQpOworICAgIG1fZWxlbWVudHNCeU5hbWUtPnJlbW92ZShu
YW1lLCBlbGVtZW50KTsKIH0KIAogTm9kZSogVHJlZVNjb3BlOjphbmNlc3RvckluVGhpc1Njb3Bl
KE5vZGUqIG5vZGUpIGNvbnN0CkBAIC0yMDksMjQgKzIwOSwyNCBAQCBOb2RlKiBUcmVlU2NvcGU6
OmFuY2VzdG9ySW5UaGlzU2NvcGUoTm9kCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgVHJlZVNj
b3BlOjphZGRJbWFnZU1hcChIVE1MTWFwRWxlbWVudCogaW1hZ2VNYXApCit2b2lkIFRyZWVTY29w
ZTo6YWRkSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQmIGltYWdlTWFwKQogewotICAgIEF0b21pY1N0
cmluZ0ltcGwqIG5hbWUgPSBpbWFnZU1hcC0+Z2V0TmFtZSgpLmltcGwoKTsKKyAgICBBdG9taWNT
dHJpbmdJbXBsKiBuYW1lID0gaW1hZ2VNYXAuZ2V0TmFtZSgpLmltcGwoKTsKICAgICBpZiAoIW5h
bWUpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1faW1hZ2VNYXBzQnlOYW1lKQogICAgICAg
ICBtX2ltYWdlTWFwc0J5TmFtZSA9IGFkb3B0UHRyKG5ldyBEb2N1bWVudE9yZGVyZWRNYXApOwot
ICAgIG1faW1hZ2VNYXBzQnlOYW1lLT5hZGQobmFtZSwgaW1hZ2VNYXApOworICAgIG1faW1hZ2VN
YXBzQnlOYW1lLT5hZGQoKm5hbWUsIGltYWdlTWFwKTsKIH0KIAotdm9pZCBUcmVlU2NvcGU6OnJl
bW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50KiBpbWFnZU1hcCkKK3ZvaWQgVHJlZVNjb3BlOjpy
ZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYgaW1hZ2VNYXApCiB7CiAgICAgaWYgKCFtX2lt
YWdlTWFwc0J5TmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIEF0b21pY1N0cmluZ0ltcGwqIG5h
bWUgPSBpbWFnZU1hcC0+Z2V0TmFtZSgpLmltcGwoKTsKKyAgICBBdG9taWNTdHJpbmdJbXBsKiBu
YW1lID0gaW1hZ2VNYXAuZ2V0TmFtZSgpLmltcGwoKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX2ltYWdlTWFwc0J5TmFtZS0+cmVtb3ZlKG5hbWUsIGltYWdlTWFwKTsK
KyAgICBtX2ltYWdlTWFwc0J5TmFtZS0+cmVtb3ZlKCpuYW1lLCBpbWFnZU1hcCk7CiB9CiAKIEhU
TUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBj
b25zdApAQCAtMjM3LDkgKzIzNywxMSBAQCBIVE1MTWFwRWxlbWVudCogVHJlZVNjb3BlOjpnZXRJ
bWFnZU1hcChjCiAgICAgICAgIHJldHVybiAwOwogICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZp
bmQoJyMnKTsKICAgICBTdHJpbmcgbmFtZSA9IChoYXNoUG9zID09IG5vdEZvdW5kID8gdXJsIDog
dXJsLnN1YnN0cmluZyhoYXNoUG9zICsgMSkpLmltcGwoKTsKKyAgICBpZiAobmFtZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChyb290Tm9kZSgpLT5kb2N1bWVudCgpLmlz
SFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiB0b0hUTUxNYXBFbGVtZW50KG1faW1hZ2VN
YXBzQnlOYW1lLT5nZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFtZShBdG9taWNTdHJpbmcobmFt
ZS5sb3dlcigpKS5pbXBsKCksIHRoaXMpKTsKLSAgICByZXR1cm4gdG9IVE1MTWFwRWxlbWVudCht
X2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5TWFwTmFtZShBdG9taWNTdHJpbmcobmFtZSku
aW1wbCgpLCB0aGlzKSk7CisgICAgICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxl
bWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoKkF0b21pY1N0cmluZyhuYW1lLmxvd2VyKCkpLmltcGwo
KSwgKnRoaXMpOworICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0RWxlbWVudEJ5TWFw
TmFtZSgqQXRvbWljU3RyaW5nKG5hbWUpLmltcGwoKSwgKnRoaXMpOwogfQogCiBOb2RlKiBub2Rl
RnJvbVBvaW50KERvY3VtZW50KiBkb2N1bWVudCwgaW50IHgsIGludCB5LCBMYXlvdXRQb2ludCog
bG9jYWxQb2ludCkKQEAgLTI3OCwxNiArMjgwLDE2IEBAIEVsZW1lbnQqIFRyZWVTY29wZTo6ZWxl
bWVudEZyb21Qb2ludChpbnQKICAgICByZXR1cm4gdG9FbGVtZW50KG5vZGUpOwogfQogCi12b2lk
IFRyZWVTY29wZTo6YWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1
ZSwgSFRNTExhYmVsRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgVHJlZVNjb3BlOjphZGRMYWJlbChj
b25zdCBBdG9taWNTdHJpbmdJbXBsJiBmb3JBdHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVu
dCYgZWxlbWVudCkKIHsKICAgICBBU1NFUlQobV9sYWJlbHNCeUZvckF0dHJpYnV0ZSk7Ci0gICAg
bV9sYWJlbHNCeUZvckF0dHJpYnV0ZS0+YWRkKGZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgZWxl
bWVudCk7CisgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS0+YWRkKGZvckF0dHJpYnV0ZVZhbHVl
LCBlbGVtZW50KTsKIH0KIAotdm9pZCBUcmVlU2NvcGU6OnJlbW92ZUxhYmVsKGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIFRyZWVTY29wZTo6cmVtb3ZlTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgZm9yQXR0
cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKG1f
bGFiZWxzQnlGb3JBdHRyaWJ1dGUpOwotICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUtPnJlbW92
ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIGVsZW1lbnQpOworICAgIG1fbGFiZWxzQnlGb3JB
dHRyaWJ1dGUtPnJlbW92ZShmb3JBdHRyaWJ1dGVWYWx1ZSwgZWxlbWVudCk7CiB9CiAKIEhUTUxM
YWJlbEVsZW1lbnQqIFRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQoY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSkKQEAgLTMwMywxMSArMzA1LDExIEBAIEhUTUxMYWJlbEVs
ZW1lbnQqIFRyZWVTY29wZTo6bGFiZWxFbGVtZW4KICAgICAgICAgZm9yIChhdXRvIGxhYmVsID0g
bGFiZWxEZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBsYWJlbERlc2NlbmRhbnRzLmVuZCgpOyBs
YWJlbCAhPSBlbmQ7ICsrbGFiZWwpIHsKICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9yVmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKICAgICAgICAgICAg
IGlmICghZm9yVmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFkZExhYmVsKGZvclZh
bHVlLCAmKmxhYmVsKTsKKyAgICAgICAgICAgICAgICBhZGRMYWJlbCgqZm9yVmFsdWUuaW1wbCgp
LCAqbGFiZWwpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHRvSFRNTExhYmVsRWxl
bWVudChtX2xhYmVsc0J5Rm9yQXR0cmlidXRlLT5nZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0
ZShmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBsKCksIHRoaXMpKTsKKyAgICByZXR1cm4gbV9sYWJlbHNC
eUZvckF0dHJpYnV0ZS0+Z2V0RWxlbWVudEJ5TGFiZWxGb3JBdHRyaWJ1dGUoKmZvckF0dHJpYnV0
ZVZhbHVlLmltcGwoKSwgKnRoaXMpOwogfQogCiBET01TZWxlY3Rpb24qIFRyZWVTY29wZTo6Z2V0
U2VsZWN0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9uIDE1
NjkyNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMzEgKzU3LDMxIEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBmb2N1c2VkRWxlbWVudCgp
OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGhhc0VsZW1lbnRXaXRoSWQoQXRvbWljU3Ry
aW5nSW1wbCogaWQpIGNvbnN0OworICAgIGJvb2wgaGFzRWxlbWVudFdpdGhJZChjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJikgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc011bHRpcGxlRWxlbWVudHNX
aXRoSWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRFbGVtZW50
QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudCopOwotICAgIHZvaWQg
cmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnQq
KTsKKyAgICB2b2lkIGFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGVsZW1l
bnRJZCwgRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgQXRvbWlj
U3RyaW5nSW1wbCYgZWxlbWVudElkLCBFbGVtZW50Jik7CiAKICAgICBFbGVtZW50KiBnZXRFbGVt
ZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgaGFzRWxlbWVu
dFdpdGhOYW1lKEF0b21pY1N0cmluZ0ltcGwqKSBjb25zdDsKKyAgICBib29sIGhhc0VsZW1lbnRX
aXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlu
c011bHRpcGxlRWxlbWVudHNXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAg
ICB2b2lkIGFkZEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiwgRWxlbWVudCopOwot
ICAgIHZvaWQgcmVtb3ZlRWxlbWVudEJ5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmLCBFbGVtZW50
Kik7CisgICAgdm9pZCBhZGRFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBF
bGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVFbGVtZW50QnlOYW1lKGNvbnN0IEF0b21pY1N0cmlu
Z0ltcGwmLCBFbGVtZW50Jik7CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnRTY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnRTY29wZTsgfQogCiAgICAgTm9kZSogYW5jZXN0b3JJblRoaXNT
Y29wZShOb2RlKikgY29uc3Q7CiAKLSAgICB2b2lkIGFkZEltYWdlTWFwKEhUTUxNYXBFbGVtZW50
Kik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOworICAgIHZvaWQg
YWRkSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlTWFwKEhU
TUxNYXBFbGVtZW50Jik7CiAgICAgSFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFwKGNvbnN0IFN0
cmluZyYgdXJsKSBjb25zdDsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgs
IGludCB5KSBjb25zdDsKIAogICAgIC8vIEZvciBhY2Nlc3NpYmlsaXR5LgogICAgIGJvb2wgc2hv
dWxkQ2FjaGVMYWJlbHNCeUZvckF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWxzQnlG
b3JBdHRyaWJ1dGU7IH0KLSAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
QXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUxhYmVs
KGNvbnN0IEF0b21pY1N0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQq
KTsKKyAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGZvckF0dHJpYnV0
ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVMYWJlbChjb25zdCBB
dG9taWNTdHJpbmdJbXBsJiBmb3JBdHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCYpOwog
ICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudEZvcklkKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZm9yQXR0cmlidXRlVmFsdWUpOwogCiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24o
KSBjb25zdDsKQEAgLTE3NCwyNiArMTc0LDI0IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQ
dHI8RE9NU2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKLWlubGluZSBib29sIFRyZWVTY29w
ZTo6aGFzRWxlbWVudFdpdGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKK2lubGluZSBi
b29sIFRyZWVTY29wZTo6aGFzRWxlbWVudFdpdGhJZChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBp
ZCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaWQpOwogICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZCAm
JiBtX2VsZW1lbnRzQnlJZC0+Y29udGFpbnMoaWQpOwogfQogCiBpbmxpbmUgYm9vbCBUcmVlU2Nv
cGU6OmNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
KSBjb25zdAogewotICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZCAmJiBtX2VsZW1lbnRzQnlJZC0+
Y29udGFpbnNNdWx0aXBsZShpZC5pbXBsKCkpOworICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZCAm
JiBpZC5pbXBsKCkgJiYgbV9lbGVtZW50c0J5SWQtPmNvbnRhaW5zTXVsdGlwbGUoKmlkLmltcGwo
KSk7CiB9CiAKLWlubGluZSBib29sIFRyZWVTY29wZTo6aGFzRWxlbWVudFdpdGhOYW1lKEF0b21p
Y1N0cmluZ0ltcGwqIGlkKSBjb25zdAoraW5saW5lIGJvb2wgVHJlZVNjb3BlOjpoYXNFbGVtZW50
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgaWQpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGlkKTsKICAgICByZXR1cm4gbV9lbGVtZW50c0J5TmFtZSAmJiBtX2VsZW1lbnRzQnlOYW1lLT5j
b250YWlucyhpZCk7CiB9CiAKIGlubGluZSBib29sIFRyZWVTY29wZTo6Y29udGFpbnNNdWx0aXBs
ZUVsZW1lbnRzV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAg
IHJldHVybiBtX2VsZW1lbnRzQnlOYW1lICYmIG1fZWxlbWVudHNCeU5hbWUtPmNvbnRhaW5zTXVs
dGlwbGUobmFtZS5pbXBsKCkpOworICAgIHJldHVybiBtX2VsZW1lbnRzQnlOYW1lICYmIG5hbWUu
aW1wbCgpICYmIG1fZWxlbWVudHNCeU5hbWUtPmNvbnRhaW5zTXVsdGlwbGUoKm5hbWUuaW1wbCgp
KTsKIH0KIAogTm9kZSogbm9kZUZyb21Qb2ludChEb2N1bWVudCosIGludCB4LCBpbnQgeSwgTGF5
b3V0UG9pbnQqIGxvY2FsUG9pbnQgPSAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNTY5MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDEwICs1ODIsMTAgQEAgTm9k
ZSogSFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdAogICAgIGlmICghb3ZlcnJpZGVz
SXRlbUFmdGVyKCkgJiYgcm9vdC0+aXNJblRyZWVTY29wZSgpKSB7CiAgICAgICAgIFRyZWVTY29w
ZSogdHJlZVNjb3BlID0gcm9vdC0+dHJlZVNjb3BlKCk7CiAgICAgICAgIEVsZW1lbnQqIGNhbmRp
ZGF0ZSA9IDA7Ci0gICAgICAgIGlmICh0cmVlU2NvcGUtPmhhc0VsZW1lbnRXaXRoSWQobmFtZS5p
bXBsKCkpKSB7CisgICAgICAgIGlmICh0cmVlU2NvcGUtPmhhc0VsZW1lbnRXaXRoSWQoKm5hbWUu
aW1wbCgpKSkgewogICAgICAgICAgICAgaWYgKCF0cmVlU2NvcGUtPmNvbnRhaW5zTXVsdGlwbGVF
bGVtZW50c1dpdGhJZChuYW1lKSkKICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSB0cmVlU2Nv
cGUtPmdldEVsZW1lbnRCeUlkKG5hbWUpOwotICAgICAgICB9IGVsc2UgaWYgKHRyZWVTY29wZS0+
aGFzRWxlbWVudFdpdGhOYW1lKG5hbWUuaW1wbCgpKSkgeworICAgICAgICB9IGVsc2UgaWYgKHRy
ZWVTY29wZS0+aGFzRWxlbWVudFdpdGhOYW1lKCpuYW1lLmltcGwoKSkpIHsKICAgICAgICAgICAg
IGlmICghdHJlZVNjb3BlLT5jb250YWluc011bHRpcGxlRWxlbWVudHNXaXRoTmFtZShuYW1lKSkg
ewogICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHRyZWVTY29wZS0+Z2V0RWxlbWVudEJ5TmFt
ZShuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICYmIHR5cGUoKSA9PSBEb2NB
bGwgJiYgKCFjYW5kaWRhdGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhbmFtZVNob3VsZEJlVmlzaWJs
ZUluRG9jdW1lbnRBbGwodG9IVE1MRWxlbWVudChjYW5kaWRhdGUpKSkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTY5MjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NiwyNCArMzU2
LDI0IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogY3JlYXQKICAgICByZXR1
cm4gYXR0clNldDsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnQ6OmFkZERvY3VtZW50TmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRWxlbWVudCogaXRlbSkKK3ZvaWQgSFRNTERvY3Vt
ZW50OjphZGREb2N1bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBF
bGVtZW50JiBpdGVtKQogewotICAgIG1fZG9jdW1lbnROYW1lZEl0ZW0uYWRkKG5hbWUuaW1wbCgp
LCBpdGVtKTsKKyAgICBtX2RvY3VtZW50TmFtZWRJdGVtLmFkZChuYW1lLCBpdGVtKTsKIH0KIAot
dm9pZCBIVE1MRG9jdW1lbnQ6OnJlbW92ZURvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRWxlbWVudCogaXRlbSkKK3ZvaWQgSFRNTERvY3VtZW50OjpyZW1vdmVEb2N1
bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBFbGVtZW50JiBpdGVt
KQogewotICAgIG1fZG9jdW1lbnROYW1lZEl0ZW0ucmVtb3ZlKG5hbWUuaW1wbCgpLCBpdGVtKTsK
KyAgICBtX2RvY3VtZW50TmFtZWRJdGVtLnJlbW92ZShuYW1lLCBpdGVtKTsKIH0KIAotdm9pZCBI
VE1MRG9jdW1lbnQ6OmFkZFdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IEVsZW1lbnQqIGl0ZW0pCit2b2lkIEhUTUxEb2N1bWVudDo6YWRkV2luZG93TmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEVsZW1lbnQmIGl0ZW0pCiB7Ci0gICAgbV93aW5k
b3dOYW1lZEl0ZW0uYWRkKG5hbWUuaW1wbCgpLCBpdGVtKTsKKyAgICBtX3dpbmRvd05hbWVkSXRl
bS5hZGQobmFtZSwgaXRlbSk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50OjpyZW1vdmVXaW5kb3dO
YW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50KiBpdGVtKQordm9pZCBI
VE1MRG9jdW1lbnQ6OnJlbW92ZVdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBs
JiBuYW1lLCBFbGVtZW50JiBpdGVtKQogewotICAgIG1fd2luZG93TmFtZWRJdGVtLnJlbW92ZShu
YW1lLmltcGwoKSwgaXRlbSk7CisgICAgbV93aW5kb3dOYW1lZEl0ZW0ucmVtb3ZlKG5hbWUsIGl0
ZW0pOwogfQogCiBib29sIEhUTUxEb2N1bWVudDo6aXNDYXNlU2Vuc2l0aXZlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmgJKHJldmlzaW9uIDE1NjkyNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE3ICs2NSwxNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjYXB0dXJlRXZlbnRzKCk7CiAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKLSAg
ICBFbGVtZW50KiBkb2N1bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBuYW1l
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TmFtZWRJdGVtLmdldEVsZW1lbnRCeURvY3VtZW50
TmFtZWRJdGVtKG5hbWUsIHRoaXMpOyB9Ci0gICAgYm9vbCBoYXNEb2N1bWVudE5hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmdJbXBsKiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TmFt
ZWRJdGVtLmNvbnRhaW5zKG5hbWUpOyB9Ci0gICAgYm9vbCBkb2N1bWVudE5hbWVkSXRlbUNvbnRh
aW5zTXVsdGlwbGVFbGVtZW50cyhjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBuYW1lKSBjb25zdCB7
IHJldHVybiBtX2RvY3VtZW50TmFtZWRJdGVtLmNvbnRhaW5zTXVsdGlwbGUobmFtZSk7IH0KLSAg
ICB2b2lkIGFkZERvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQq
KTsKLSAgICB2b2lkIHJlbW92ZURvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYs
IEVsZW1lbnQqKTsKLQotICAgIEVsZW1lbnQqIHdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmdJbXBsKiBuYW1lKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd05hbWVkSXRlbS5nZXRFbGVt
ZW50QnlXaW5kb3dOYW1lZEl0ZW0obmFtZSwgdGhpcyk7IH0KLSAgICBib29sIGhhc1dpbmRvd05h
bWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBuYW1lKSBjb25zdCB7IHJldHVybiBtX3dp
bmRvd05hbWVkSXRlbS5jb250YWlucyhuYW1lKTsgfQotICAgIGJvb2wgd2luZG93TmFtZWRJdGVt
Q29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIG5hbWUpIGNv
bnN0IHsgcmV0dXJuIG1fd2luZG93TmFtZWRJdGVtLmNvbnRhaW5zTXVsdGlwbGUobmFtZSk7IH0K
LSAgICB2b2lkIGFkZFdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmLCBFbGVtZW50
Kik7Ci0gICAgdm9pZCByZW1vdmVXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiwg
RWxlbWVudCopOworICAgIEVsZW1lbnQqIGRvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnROYW1lZEl0ZW0uZ2V0RWxl
bWVudEJ5RG9jdW1lbnROYW1lZEl0ZW0obmFtZSwgKnRoaXMpOyB9CisgICAgYm9vbCBoYXNEb2N1
bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lKSBjb25zdCB7IHJldHVy
biBtX2RvY3VtZW50TmFtZWRJdGVtLmNvbnRhaW5zKG5hbWUpOyB9CisgICAgYm9vbCBkb2N1bWVu
dE5hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cyhjb25zdCBBdG9taWNTdHJpbmdJbXBs
JiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TmFtZWRJdGVtLmNvbnRhaW5zTXVsdGlw
bGUobmFtZSk7IH0KKyAgICB2b2lkIGFkZERvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmLCBFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbShj
b25zdCBBdG9taWNTdHJpbmdJbXBsJiwgRWxlbWVudCYpOworCisgICAgRWxlbWVudCogd2luZG93
TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1f
d2luZG93TmFtZWRJdGVtLmdldEVsZW1lbnRCeVdpbmRvd05hbWVkSXRlbShuYW1lLCAqdGhpcyk7
IH0KKyAgICBib29sIGhhc1dpbmRvd05hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBu
YW1lKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd05hbWVkSXRlbS5jb250YWlucyhuYW1lKTsgfQor
ICAgIGJvb2wgd2luZG93TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93TmFtZWRJdGVtLmNv
bnRhaW5zTXVsdGlwbGUobmFtZSk7IH0KKyAgICB2b2lkIGFkZFdpbmRvd05hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiwgRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlV2luZG93TmFt
ZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBFbGVtZW50Jik7CiAKICAgICBzdGF0aWMg
Ym9vbCBpc0Nhc2VTZW5zaXRpdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1
NjkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGNvCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFtX2xvd2Vy
Y2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdl
RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChtX2xvd2VyY2FzZWRVc2VtYXAsICp0aGlzKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkucmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFw
KCptX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAKICAgICAgICAgLy8gVGhlIEhU
TUxJbWFnZUVsZW1lbnQncyB1c2VNYXAoKSB2YWx1ZSBpbmNsdWRlcyB0aGUgJyMnIHN5bWJvbCBh
dCB0aGUgYmVnaW5uaW5nLCB3aGljaCBoYXMgdG8gYmUgc3RyaXBwZWQgb2ZmLgogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyAnIycu
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjbwogICAgICAgICAgICAgbV9sb3dlcmNhc2VkVXNlbWFwID0gbnVsbEF0b207CiAKICAgICAg
ICAgaWYgKCFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLmFkZEltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChtX2xvd2VyY2FzZWRVc2VtYXAs
ICp0aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNh
c2VkVXNlbWFwKCptX2xvd2VyY2FzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAgICAgfSBlbHNl
IGlmIChuYW1lID09IG9uYmVmb3JlbG9hZEF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZWxvYWRFdmVudCwgbmFtZSwgdmFsdWUpOwogICAg
IGVsc2UgaWYgKG5hbWUgPT0gY29tcG9zaXRlQXR0cikgewpAQCAtMTU4LDkgKzE1OCw5IEBAIHZv
aWQgSFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY28KICAgICAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkID0gZ2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWlkLmlzRW1wdHkoKSAmJiBpZCAhPSBnZXROYW1lQXR0cmlidXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHdpbGxIYXZlTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbShpZCwgdGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1lbnROYW1lZEl0ZW0oKmlkLmltcGwoKSwgKnRo
aXMpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0ZW0oaWQsIHRoaXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZURvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCks
ICp0aGlzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTIyNSw3ICsyMjUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxJ
CiAgICAgfQogCiAgICAgaWYgKGluc2VydGlvblBvaW50LmluRG9jdW1lbnQoKSAmJiAhbV9sb3dl
cmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVu
dEJ5TG93ZXJjYXNlZFVzZW1hcChtX2xvd2VyY2FzZWRVc2VtYXAsICp0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKm1fbG93ZXJjYXNl
ZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYmVlbiBpbnNlcnRl
ZCBmcm9tIGEgcmVuZGVyZXItbGVzcyBkb2N1bWVudCwKICAgICAvLyBvdXIgbG9hZGVyIG1heSBo
YXZlIG5vdCBmZXRjaGVkIHRoZSBpbWFnZSwgc28gZG8gaXQgbm93LgpAQCAtMjQxLDcgKzI0MSw3
IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGEKICAgICAgICAgbV9m
b3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogCiAgICAgaWYgKGluc2VydGlvblBvaW50Lmlu
RG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBkb2N1
bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChtX2xvd2VyY2FzZWRV
c2VtYXAsICp0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUxv
d2VyY2FzZWRVc2VtYXAoKm1fbG93ZXJjYXNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKIAogICAg
IG1fZm9ybSA9IDA7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NTY5MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksMTEgQEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6bWFwTW91c2VF
dmVudChMYXlvdQogCiBIVE1MSW1hZ2VFbGVtZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVt
ZW50KCkKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5pbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRV
c2VtYXAobV9uYW1lLmxvd2VyKCkpOworICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBBdG9taWNTdHJpbmcgbG93ZXJjYXNlZE5hbWUgPSBtX25hbWUubG93
ZXIoKTsKKyAgICBBU1NFUlQobG93ZXJjYXNlZE5hbWUuaW1wbCgpKTsKKyAgICByZXR1cm4gZG9j
dW1lbnQoKS5pbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoKmxvd2VyY2FzZWROYW1lLmlt
cGwoKSk7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC05NSwxMyAr
OTksMTMgQEAgdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29ucwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQot
ICAgICAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZUltYWdlTWFwKHRoaXMpOworICAgICAgICAg
ICAgdHJlZVNjb3BlKCktPnJlbW92ZUltYWdlTWFwKCp0aGlzKTsKICAgICAgICAgU3RyaW5nIG1h
cE5hbWUgPSB2YWx1ZTsKICAgICAgICAgaWYgKG1hcE5hbWVbMF0gPT0gJyMnKQogICAgICAgICAg
ICAgbWFwTmFtZSA9IG1hcE5hbWUuc3Vic3RyaW5nKDEpOwogICAgICAgICBtX25hbWUgPSBkb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmxvd2VyKCkgOiBtYXBOYW1lOwogICAg
ICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgdHJlZVNjb3BlKCktPmFkZEltYWdl
TWFwKHRoaXMpOworICAgICAgICAgICAgdHJlZVNjb3BlKCktPmFkZEltYWdlTWFwKCp0aGlzKTsK
IAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE3LDE0ICsxMjEsMTQgQEAgUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gSFRNTE1hcEVsZW1lbgogTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBIVE1MTWFwRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGlu
c2VydGlvblBvaW50KQogewogICAgIGlmIChpbnNlcnRpb25Qb2ludC5pbkRvY3VtZW50KCkpCi0g
ICAgICAgIHRyZWVTY29wZSgpLT5hZGRJbWFnZU1hcCh0aGlzKTsKKyAgICAgICAgdHJlZVNjb3Bl
KCktPmFkZEltYWdlTWFwKCp0aGlzKTsKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50byhpbnNlcnRpb25Qb2ludCk7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQogewogICAgIGlmIChpbnNlcnRpb25Q
b2ludC5pbkRvY3VtZW50KCkpCi0gICAgICAgIHRyZWVTY29wZSgpLT5yZW1vdmVJbWFnZU1hcCh0
aGlzKTsKKyAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZUltYWdlTWFwKCp0aGlzKTsKICAgICBI
VE1MRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2OTI3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNywxNyArNDI3LDE3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURv
Y05hbWVkSXQKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IGdldElkQXR0cmlidXRl
KCk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNOYW1l
ZEl0ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmFkZERvY3VtZW50TmFtZWRJdGVtKGlk
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC0+YWRkRG9jdW1lbnROYW1lZEl0ZW0o
KmlkLmltcGwoKSwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRv
Y3VtZW50LT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbShpZCwgdGhpcyk7CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQtPnJlbW92ZURvY3VtZW50TmFtZWRJdGVtKCppZC5pbXBsKCksICp0aGlzKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGdldE5hbWVB
dHRyaWJ1dGUoKTsKICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSAmJiBpZCAhPSBuYW1lKSB7
CiAgICAgICAgICAgICBpZiAoaXNOYW1lZEl0ZW0pCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQt
PmFkZERvY3VtZW50TmFtZWRJdGVtKG5hbWUsIHRoaXMpOworICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LT5hZGREb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCksICp0aGlzKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRG9jdW1lbnROYW1lZEl0
ZW0obmFtZSwgdGhpcyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlbW92ZURvY3VtZW50
TmFtZWRJdGVtKCpuYW1lLmltcGwoKSwgKnRoaXMpOwogICAgICAgICB9CiAgICAgfQogICAgIG1f
ZG9jTmFtZWRJdGVtID0gaXNOYW1lZEl0ZW07Cg==
</data>
<flag name="review"
          id="235794"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>