<?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>149544</bug_id>
          
          <creation_ts>2015-09-24 15:45:36 -0700</creation_ts>
          <short_desc>Make custom properties store the parser value list for variable resolution</short_desc>
          <delta_ts>2015-12-04 18:19:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jonlee</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1128597</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-09-24 15:45:36 -0700</bug_when>
    <thetext>Refactor custom property parsing so that we hold the actual CSSParserValueList of parsed terms, functions and operators. This will allow us to iterate directly over the already-parsed terms, functions and operators when we do variable resolution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128625</commentid>
    <comment_count>1</comment_count>
      <attachid>261904</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-09-24 17:24:25 -0700</bug_when>
    <thetext>Created attachment 261904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128626</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-24 17:27:25 -0700</bug_when>
    <thetext>Attachment 261904 did not pass style-queue:


ERROR: Source/WebCore/css/CSSCustomPropertyValue.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128627</commentid>
    <comment_count>3</comment_count>
      <attachid>261905</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-09-24 17:29:29 -0700</bug_when>
    <thetext>Created attachment 261905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128628</commentid>
    <comment_count>4</comment_count>
      <attachid>261906</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-09-24 17:31:34 -0700</bug_when>
    <thetext>Created attachment 261906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128629</commentid>
    <comment_count>5</comment_count>
      <attachid>261906</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-09-24 17:41:09 -0700</bug_when>
    <thetext>Comment on attachment 261906
Patch

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

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2122
&gt; +    Node* styledNode = this-&gt;styledNode();
&gt; +    if (!styledNode)
&gt; +        return emptyString();
&gt; +
&gt; +    RefPtr&lt;RenderStyle&gt; style = computeRenderStyleForProperty(styledNode, m_pseudoElementSpecifier, CSSPropertyCustom);
&gt; +    if (!style || !style-&gt;hasCustomProperty(propertyName))
&gt; +        return emptyString();
&gt; +
&gt; +    return style-&gt;getCustomPropertyValue(propertyName)-&gt;cssText();

Can&apos;t all this use customPropertyValue?

Something like

RefPtr&lt;CSSValue&gt; propertyValue = this-&gt;customPropertyValue(propertyName);
return propertyValue ? propertyValue-&gt;cssText() : emptyString();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128631</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-09-24 17:55:18 -0700</bug_when>
    <thetext>Landed in r190231.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146539</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-12-04 18:19:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/23771248&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261904</attachid>
            <date>2015-09-24 17:24:25 -0700</date>
            <delta_ts>2015-09-24 17:29:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25011</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE1LTA5LTI0ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBLZWVwIHRoZSBhbHJlYWR5LXBhcnNl
ZCBsaXN0IG9mIHRlcm1zIGluIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMgc28gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHJlLXBhcnNlIHRoZW0KKyAgICAgICAgbGF0ZXIgd2hlbiBkb2luZyB2YXJpYWJs
ZSByZXNvbHV0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VzdG9tUHJvcGVydHlUZXh0
KToKKyAgICAgICAgQWRkIGEgaGVscGVyIGZvciBnZXR0aW5nIHRoZSByYXcgdGV4dC4gTW9yZSBj
bG9zZWx5IHBhcmFsbGVscyBob3cgbm9uLWN1c3RvbSBwcm9wZXJ0aWVzIHdvcmsgd2l0aCB0aGUK
KyAgICAgICAgZXh0cmFjdG9yLgorCisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgQ2hhbmdlIHByb3BlcnR5VmFsdWUgdG8g
dXNlIGN1c3RvbVByb3BlcnR5VGV4dC4KKworICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIERvbid0IGNvcHkgQ1NT
IGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIHN0eWxlIGRlY2xhcmF0aW9uLiBUaGlzIGlzIGp1
c3QgdXNlZCBmb3IgdGhpbmdzIGxpa2UgZWRpdGluZywgc28KKyAgICAgICAgd2UgZGlkbid0IG5l
ZWQgdG8gYmUgcHV0dGluZyB0aGUgY3VzdG9tIHByb3BlcnRpZXMgaW50byB0aGlzIHNldC4KKwor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKToKKyAgICAgICAgUGF0Y2hlZCB0byBqdXN0IHJldHVybiBudWxscHRyIGZvciBj
dXN0b20gcHJvcGVydGllcy4KKworICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgUGF0Y2hlZCB0byBnbyBzdHJh
aWdodCB0byB0aGUgc2VyaWFsaXplZCBzdHJpbmcgdmFsdWUuCisKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBSZXBsYWNlZCBieSBjdXN0b21Qcm9wZXJ0eVRleHQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIFJlbmFtZSBjdXN0b21Qcm9w
ZXJ0eVZhbHVlIHRvIGN1c3RvbVByb3BlcnR5VGV4dCBhbmQgbWFrZSBpdCBqdXN0IHJldHVybiBh
IFN0cmluZy4KKworICAgICAgICAqIGNzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1c3RvbVByb3BlcnR5VmFsdWU6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgQ2hhbmdlZCB0byBob2xkIGJvdGggYSBDU1NQYXJzZXJWYWx1ZUxpc3QsIHdoaWNoIGl0IGFk
b3B0cyBmcm9tIHRoZSBDU1NQYXJzZXIsIGFuZCBhIHN0cmluZyB2YWx1ZSB0aGF0CisgICAgICAg
IGlzIGNvbnN0cnVjdGVkIGxhemlseSBvbmx5IGlmIHRoZSB2YWx1ZSBpcyBzZXJpYWxpemVkLiBO
b3cgdGhlIHByb2JsZW1hdGljIHNlcmlhbGl6YXRpb24gY29kZSB3aWxsIG9ubHkKKyAgICAgICAg
cnVuIGlmIHNvbWVvbmUgdXNlcyB0aGUgQ1NTIE9NIHRvIHRyaWdnZXIgYSBzZXJpYWxpemF0aW9u
ICh0aGlzIHNob3VsZCBiZSBhIHJhcmUgb2NjdXJyZW5jZSwgc28gcGVyZgorICAgICAgICBpbXBy
b3ZlcyB3aXRoIHRoaXMgY2hhbmdlKS4KKworICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnkuaW46
CisgICAgICAgIENoYW5nZSBwYXJzaW5nIG9mIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGJlIGlkZW50
aWNhbCB0byByZWd1bGFyIHByb3BlcnRpZXMuIFRoaXMgcmVmYWN0b3JpbmcgYWxsb3dzCisgICAg
ICAgIHVzIHRvIHNpbXBseSBpbnZva2UgdGhlIHBhcnNlciBmcm9tIHN0eWxlIGRlY2xhcmF0aW9u
cyBhcyB3ZWxsIGFuZCBtYWtlcyBldmVyeXRoaW5nIGJlaGF2ZSBtb3JlCisgICAgICAgIHNpbWls
YXJseSB0byBub3JtYWwgcHJvcGVydHkgcGFyc2luZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpzZXRDdXN0b21Qcm9wZXJ0eU5hbWUpOgorICAgICAgICBXZSBub3cgaGF2
ZSBhIG1ldGhvZCBmb3IgcGFyc2luZyBjdXN0b20gcHJvcGVydGllcyB0aGF0IGNhbiBiZSBpbnZv
a2VkIGZyb20gc3R5bGUgZGVjbGFyYXRpb25zLiBUaGUKKyAgICAgICAgcGFyc2VyIGxpc3QgaXMg
bm93IGFkb3B0ZWQgYnkgdGhlIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuCisKKyAgICAgICAgKiBj
c3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclZhbHVl
TGlzdDo6dG9TdHJpbmcpOgorICAgICAgICBCdWlsZCB0aGUgc3RyaW5nIHNlcmlhbGl6YXRpb24g
Y29kZSByaWdodCBpbnRvIENTU1BhcnNlclZhbHVlTGlzdC4KKworICAgICAgICAqIGNzcy9DU1NQ
YXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgQWRkIGEgdG9TdHJpbmcoKSBtZXRob2QgZm9yIHNlcmlh
bGl6YXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldEN1c3RvbVByb3BlcnR5KToKKyAg
ICAgICAgQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBDU1NQYXJzZXIgZnVuY3Rpb25zLiBUaGlzIG1h
a2VzIHRoZSBjb2RlIGJlaGF2ZSBhbG1vc3QgaWRlbnRpY2FsbHkgdG8gcmVndWxhcgorICAgICAg
ICBwcm9wZXJ0eSBwYXJzaW5nLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmg6CisgICAgICAgIENoYW5nZSB0aGUgbWFwcGlu
ZyBvbiBSZW5kZXJTdHlsZSB0byBzdG9yZSB0aGUgY3VzdG9tIENTUyB2YWx1ZXMuIFRoaXMgaXMg
bW9yZSBmdXR1cmUgcHJvb2YgaWYgd2UKKyAgICAgICAgd2FudCB0byBwYXJzZSB0aGVzZSBhcyBz
b21ldGhpbmcgb3RoZXIgdGhhbiBzdHJpbmdzLCBhbmQgaXQgYWxzbyBhdm9pZHMgc3RyaW5nIHNl
cmlhbGl6YXRpb24gdW5sZXNzCisgICAgICAgIHRoZSB2YWx1ZSBpcyBhc2tlZCBmb3IgZnJvbSBj
b21wdXRlZCBzdHlsZS4gRmFzdGVyIQorCiAyMDE1LTA5LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV3cml0ZSBSYW5nZTo6aW5zZXJ0Tm9kZSgpIGFzIHBl
ciB0aGUgbGF0ZXN0IERPTSBzcGVjaWZpY2F0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTkwMjA5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMDYsOCArMjEwNiwyMCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmhhc0N1c3Rv
bVByb3BlcnR5KHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
U3RyaW5nIHJlc3VsdCA9IHN0eWxlLT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFt
ZSk7Ci0gICAgcmV0dXJuIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShwcm9wZXJ0eU5h
bWUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHN0eWxlLT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5TmFtZSk7Cit9CisKK1N0cmluZyBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXN0b21Q
cm9wZXJ0eVRleHQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgTm9k
ZSogc3R5bGVkTm9kZSA9IHRoaXMtPnN0eWxlZE5vZGUoKTsKKyAgICBpZiAoIXN0eWxlZE5vZGUp
CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSA9IGNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KHN0eWxlZE5vZGUsIG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllciwgQ1NTUHJvcGVydHlDdXN0b20pOworICAgIGlmICghc3R5bGUg
fHwgIXN0eWxlLT5oYXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiBzdHlsZS0+Z2V0Q3VzdG9tUHJvcGVydHlW
YWx1ZShwcm9wZXJ0eU5hbWUpLT5jc3NUZXh0KCk7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIEVVcGRhdGVMYXlvdXQgdXBkYXRlTGF5b3V0KSBjb25zdApAQCAtMzU5NSw3ICszNjA3LDcg
QEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlmICghc3R5
bGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFN0cmluZz4qIGN1c3RvbVByb3BlcnRpZXMgPSBzdHlsZS0+Y3VzdG9tUHJvcGVydGllcygpOwor
ICAgIGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiogY3VzdG9t
UHJvcGVydGllcyA9IHN0eWxlLT5jdXN0b21Qcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIG51bUNv
bXB1dGVkUHJvcGVydGllcyArIChjdXN0b21Qcm9wZXJ0aWVzID8gY3VzdG9tUHJvcGVydGllcy0+
c2l6ZSgpIDogMCk7CiB9CiAKQEAgLTM3MDQsMjIgKzM3MTYsNiBAQCBSZWY8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gQ29tcHV0ZWRTdHlsCiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAg
IGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkp
OwogICAgIH0KLSAgICAKLSAgICBhdXRvKiBzdHlsZWROb2RlID0gdGhpcy0+c3R5bGVkTm9kZSgp
OwotICAgIGlmIChzdHlsZWROb2RlKSB7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGUgPSBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShzdHlsZWROb2RlLCBtX3BzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5Q3VzdG9tKTsKLSAgICAgICAgaWYgKHN0eWxlKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvKiBjdXN0b21Qcm9wZXJ0aWVzID0gc3R5bGUtPmN1c3Rv
bVByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGN1c3RvbVByb3BlcnRpZXMtPmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9tUHJv
cGVydGllcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmNyZWF0ZShpdC0+a2V5LCBpdC0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBs
aXN0LmFwcGVuZChDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWUucmVsZWFzZSgp
LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICAKICAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKGxp
c3QuZGF0YSgpLCBsaXN0LnNpemUoKSk7CiB9CiAKQEAgLTM3MzAsMTAgKzM3MjYsOCBAQCBDU1NS
dWxlKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnBhCiAKIFJlZlB0cjxDU1NWYWx1ZT4g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShwcm9w
ZXJ0eU5hbWUpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yKG1fbm9kZSwgbV9hbGxvd1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKS5jdXN0b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSA/IHZhbHVlLT5jbG9uZUZvckNTU09NKCkgOiBudWxscHRyOwotICAgIH0KKyAg
ICBpZiAoaXNDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJu
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobV9ub2RlLCBtX2FsbG93VmlzaXRlZFN0eWxlLCBtX3Bz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIpLmN1c3RvbVByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKTsK
IAogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlO
YW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCkBAIC0zNzQ0LDEyICszNzM4LDggQEAgUmVmUHRy
PENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYQogCiBTdHJpbmcgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlO
YW1lKQogewotICAgIGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG1f
bm9kZSwgbV9hbGxvd1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKS5jdXN0
b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgp
OwotICAgIH0KKyAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKKyAg
ICAgICAgcmV0dXJuIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobV9ub2RlLCBtX2FsbG93VmlzaXRl
ZFN0eWxlLCBtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpLmN1c3RvbVByb3BlcnR5VGV4dChwcm9w
ZXJ0eU5hbWUpOwogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghcHJvcGVydHlJRCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDE5
MDIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcihQYXNzUmVmUHRyPE5vZGU+LCBib29sIGFsbG93VmlzaXRlZFN0eWxlID0g
ZmFsc2UsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwcm9w
ZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQgPSBVcGRhdGVMYXlvdXQpIGNv
bnN0OworICAgIFN0cmluZyBjdXN0b21Qcm9wZXJ0eVRleHQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyBmb3IgSFRNTCBlZGl0aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1c3RvbVBy
b3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMyArMjcsNDYg
QEAKICNkZWZpbmUgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZV9oCiAKICNpbmNsdWRlICJDU1NWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU0N1c3RvbVByb3Bl
cnR5VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZT4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJWYWx1ZUxpc3Q+JiB2YWx1ZUxpc3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENTU0N1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgdmFsdWVMaXN0KSk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0N1c3RvbVByb3BlcnR5VmFs
dWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gb3RoZXIubV9uYW1lICYmIG1fdmFs
dWUgPT0gb3RoZXIubV92YWx1ZTsgfQotCi0gICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpOyB9CisgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFtX3NlcmlhbGl6ZWQpIHsKKyAgICAgICAgICAgIG1fc2VyaWFs
aXplZCA9IHRydWU7CisgICAgICAgICAgICBtX3N0cmluZ1ZhbHVlID0gbV9wYXJzZXJWYWx1ZSA/
IG1fcGFyc2VyVmFsdWUtPnRvU3RyaW5nKCkgOiAiIjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKKyAgICB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIAorICAgIC8vIEZJWE1FOiBTaG91bGQgYXJndWFi
bHkgaW1wbGVtZW50IGVxdWFscyBvbiBhbGwgb2YgdGhlIENTU1BhcnNlclZhbHVlcywgYnV0IENT
U1ZhbHVlIGVxdWl2YWxlbmNlCisgICAgLy8gaXMgcmFyZWx5IHVzZWQsIHNvIHNlcmlhbGl6YXRp
b24gdG8gY29tcGFyZSBpcyBwcm9iYWJseSBmaW5lLgorICAgIGJvb2wgZXF1YWxzKGNvbnN0IENT
U0N1c3RvbVByb3BlcnR5VmFsdWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gb3Ro
ZXIubV9uYW1lICYmIGN1c3RvbUNTU1RleHQoKSA9PSBvdGhlci5jdXN0b21DU1NUZXh0KCk7IH0K
KwogcHJpdmF0ZToKLSAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVl
TGlzdD4mIHZhbHVlTGlzdCkKICAgICAgICAgOiBDU1NWYWx1ZShDdXN0b21Qcm9wZXJ0eUNsYXNz
KQogICAgICAgICAsIG1fbmFtZShuYW1lKQotICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
ICAgICwgbV9wYXJzZXJWYWx1ZShXVEY6Om1vdmUodmFsdWVMaXN0KSkKKyAgICAgICAgLCBtX3Nl
cmlhbGl6ZWQoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyBt
X25hbWU7Ci0gICAgY29uc3QgU3RyaW5nIG1fdmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclZhbHVlTGlzdD4gbV9wYXJzZXJWYWx1ZTsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3N0
cmluZ1ZhbHVlOworICAgIG11dGFibGUgYm9vbCBtX3NlcmlhbGl6ZWQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Lmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHJldmlz
aW9uIDE5MDIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTE1MzksMTAgKzE1MzksMjEgQEAgZGVjbF9saXN0X3JlY292ZXJ5OgogCiBk
ZWNsYXJhdGlvbjoKICAgICBDVVNUT01fUFJPUEVSVFkgbWF5YmVfc3BhY2UgJzonIG1heWJlX3Nw
YWNlIGV4cHIgcHJpb3JpdHkgeworICAgICAgICAkJCA9IGZhbHNlOworICAgICAgICBib29sIGlz
UHJvcGVydHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clZhbHVlTGlzdD4gcHJvcGVydHlWYWx1ZSgkNSk7Ci0gICAgICAgIHBhcnNlci0+YWRkQ3VzdG9t
UHJvcGVydHlEZWNsYXJhdGlvbigkMSwgcHJvcGVydHlWYWx1ZS5nZXQoKSwgJDYpOwotICAgICAg
ICAkJCA9IHRydWU7Ci0gICAgICAgIHBhcnNlci0+bWFya1Byb3BlcnR5RW5kKCQ2LCB0cnVlKTsK
KyAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgICAgIHBhcnNlci0+bV92YWx1
ZUxpc3QgPSBXVEY6Om1vdmUocHJvcGVydHlWYWx1ZSk7CisgICAgICAgICAgICBpbnQgb2xkUGFy
c2VkUHJvcGVydGllcyA9IHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICAg
ICAgICAgIHBhcnNlci0+c2V0Q3VzdG9tUHJvcGVydHlOYW1lKCQxKTsKKyAgICAgICAgICAgICQk
ID0gcGFyc2VyLT5wYXJzZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCAkNik7CisgICAgICAgICAg
ICBpZiAoISQkKQorICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVydGll
cyhwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1Byb3BlcnR5UGFyc2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHBhcnNlci0+bV92YWx1ZUxpc3QgPSBudWxscHRyOworICAgICAg
ICB9CisgICAgICAgIHBhcnNlci0+bWFya1Byb3BlcnR5RW5kKCQ2LCBpc1Byb3BlcnR5UGFyc2Vk
KTsKICAgICB9CiAgICAgfCBwcm9wZXJ0eSAnOicgbWF5YmVfc3BhY2UgZXhwciBwcmlvcml0eSB7
CiAgICAgICAgICQkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2
aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNTEsNiArMTM1MSwxOSBAQCBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENT
U1BhcnNlcjo6cGFyc2VWCiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9u
LCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQpOwogfQog
CitDU1NQYXJzZXI6OlBhcnNlUmVzdWx0IENTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZh
bHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0
eWxlU2hlZXQpCit7CisgICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KGNzc1BhcnNlck1vZGUp
OworICAgIGlmIChjb250ZXh0U3R5bGVTaGVldCkgeworICAgICAgICBjb250ZXh0ID0gY29udGV4
dFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC5tb2RlID0gY3Nz
UGFyc2VyTW9kZTsKKyAgICB9CisKKyAgICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOworICAg
IHBhcnNlci5zZXRDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4g
cGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5Q3VzdG9tLCBzdHJpbmcs
IGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQpOworfQorCiBDU1NQYXJzZXI6OlBhcnNlUmVz
dWx0IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJh
dGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAg
ICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CkBAIC0xODk1LDYgKzE5MDgsMTIg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRAogewogICAgIGlmICgh
bV92YWx1ZUxpc3QgfHwgIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAocHJvcElkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBGb3Igbm93IHB1dCB0aGlzIGFoZWFkIG9mIGluaGVyaXQvaW5pdGlhbCBw
cm9jZXNzaW5nLgorICAgICAgICAvLyBFdmVudHVhbGx5IHdlIHdhbnQgdG8gc3VwcG9ydCBpbml0
aWFsIGFuZCBpbmhlcml0LgorICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xh
cmF0aW9uKGltcG9ydGFudCk7CisgICAgfQogCiAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFs
dWVXaXRoQ2FsY3VsYXRpb24oKm1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwogICAgIENTU1ZhbHVl
SUQgaWQgPSB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmlkOwpAQCAtNDEzNywyNiArNDE1
NiwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbHQoQ1NTUHJvcGVydHlJRCBwCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIENTU1BhcnNlcjo6YWRkQ3VzdG9tUHJvcGVydHlEZWNsYXJh
dGlvbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIG5hbWUsIENTU1BhcnNlclZhbHVlTGlzdCogdmFs
dWUsIGJvb2wgaW1wb3J0YW50KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlE
ZWNsYXJhdGlvbihib29sIGltcG9ydGFudCkKIHsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBUaGUgY3VzdG9tIHByb3BlcnR5IGNvbWVzIGluIGFzIGEgcGFyc2Vk
IHNldCBvZiBDU1NQYXJzZXJWYWx1ZXMgY29sbGVjdGVkIGludG8gYSBsaXN0LgotICAgIC8vIEZv
ciBDU1MgdmFyaWFibGVzLCB3ZSBqdXN0IHdhbnQgdG8gdHJlYXQgdGhlIGVudGlyZSBzZXQgb2Yg
dmFsdWVzIGFzIGEgc3RyaW5nLCBzbyB3aGF0IHdlIGRvCi0gICAgLy8gaXMgYnVpbGQgdXAgYSBz
ZXQgb2YgQ1NTVmFsdWVzIGFuZCBzZXJpYWxpemUgdGhlbSB1c2luZyBjc3NUZXh0LCBzZXBhcmF0
aW5nIG11bHRpcGxlIHZhbHVlcwotICAgIC8vIHdpdGggc3BhY2VzLgotICAgIEF0b21pY1N0cmlu
ZyBwcm9wZXJ0eU5hbWUgPSBuYW1lOwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUtPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlm
IChpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiBjc3NWYWx1ZSA9IHZhbHVlLT52YWx1ZUF0KGkpLT5jcmVhdGVDU1NWYWx1ZSgpOwot
ICAgICAgICBpZiAoIWNzc1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWls
ZGVyLmFwcGVuZChjc3NWYWx1ZS0+Y3NzVGV4dCgpKTsKLSAgICB9Ci0gICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDdXN0b20sIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShwcm9wZXJ0
eU5hbWUsIGJ1aWxkZXIudG9TdHJpbmcoKS5sb3dlcigpKSwgaW1wb3J0YW50LCBmYWxzZSk7Cisg
ICAgaWYgKG1fY3VzdG9tUHJvcGVydHlOYW1lLmlzRW1wdHkoKSB8fCAhbV92YWx1ZUxpc3QpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwg
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKG1fY3VzdG9tUHJvcGVydHlOYW1lLCBtX3Zh
bHVlTGlzdCksIGltcG9ydGFudCwgZmFsc2UpOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBb
IDxzdHJpbmc+IHwgPHVyaT4gfCA8Y291bnRlcj4gfCBhdHRyKFgpIHwgb3Blbi1xdW90ZSB8IGNs
b3NlLXF1b3RlIHwgbm8tb3Blbi1xdW90ZSB8IG5vLWNsb3NlLXF1b3RlIF0rIHwgaW5oZXJpdApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgcGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25zdCBTdHJpbmcmKTsK
IAogICAgIHN0YXRpYyBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRp
ZXMqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFy
c2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CisgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBh
cnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBD
U1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKIAog
ICAgIHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwg
Ym9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFN5c3RlbUNvbG9y
VmFsdWUoQ1NTVmFsdWVJRCk7CkBAIC0xNDMsNyArMTQ0LDcgQEAgcHVibGljOgogICAgIGJvb2wg
cGFyc2VRdW90ZXMoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwogICAgIGJvb2wgcGFy
c2VBbHQoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwogICAgIAotICAgIHZvaWQgYWRk
Q3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihjb25zdCBDU1NQYXJzZXJTdHJpbmcmLCBDU1NQYXJz
ZXJWYWx1ZUxpc3QqLCBib29sIGltcG9ydGFudCk7CisgICAgYm9vbCBwYXJzZUN1c3RvbVByb3Bl
cnR5RGVjbGFyYXRpb24oYm9vbCBpbXBvcnRhbnQpOwogICAgIAogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcGFyc2VBdHRyKENTU1BhcnNlclZhbHVlTGlzdCYgYXJncyk7CiAKQEAgLTM5NSw2ICszOTYs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIG1faW1wb3J0YW50OwogICAgIENTU1Byb3BlcnR5SUQg
bV9pZDsKKyAgICBBdG9taWNTdHJpbmcgbV9jdXN0b21Qcm9wZXJ0eU5hbWU7CiAgICAgU3R5bGVT
aGVldENvbnRlbnRzKiBtX3N0eWxlU2hlZXQ7CiAgICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IG1f
cnVsZTsKICAgICBSZWZQdHI8U3R5bGVLZXlmcmFtZT4gbV9rZXlmcmFtZTsKQEAgLTQ2Niw2ICs0
NjgsOCBAQCBwdWJsaWM6CiAgICAgTG9jYXRpb24gY3VycmVudExvY2F0aW9uKCk7CiAgICAgc3Rh
dGljIGJvb2wgaXNDYWxjdWxhdGlvbihDU1NQYXJzZXJWYWx1ZSYpOwogCisgICAgdm9pZCBzZXRD
dXN0b21Qcm9wZXJ0eU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIHsgbV9j
dXN0b21Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7IH0KKwogcHJpdmF0ZToKICAgICBib29s
IGlzOEJpdFNvdXJjZSgpIHsgcmV0dXJuIG1faXM4Qml0U291cmNlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCShyZXZpc2lvbiAxOTAyMDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0
b3JMaXN0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2
LDYgKzY3LDI0IEBAIHZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0OjpleHRlbmQoQ1NTUGFyc2UKICAg
ICAgICAgbV92YWx1ZXMuYXBwZW5kKCoodmFsdWVMaXN0LnZhbHVlQXQoaSkpKTsKIH0KIAorU3Ry
aW5nIENTU1BhcnNlclZhbHVlTGlzdDo6dG9TdHJpbmcoKQoreworICAgIC8vIEJ1aWxkIHVwIGEg
c2V0IG9mIENTU1ZhbHVlcyBhbmQgc2VyaWFsaXplIHRoZW0gdXNpbmcgY3NzVGV4dCwgc2VwYXJh
dGluZyBtdWx0aXBsZSB2YWx1ZXMKKyAgICAvLyB3aXRoIHNwYWNlcy4KKyAgICAvLyBGSVhNRTog
VGVhY2ggQ1NTUGFyc2VyVmFsdWVzIGhvdyB0byBzZXJpYWxpemUgc28gdGhhdCB3ZSBkb24ndCBo
YXZlIHRvIGNyZWF0ZSBDU1NWYWx1ZXMKKyAgICAvLyBqdXN0IHRvIHBlcmZvcm0gdGhpcyBzZXJp
YWxpemF0aW9uLgorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0g
dmFsdWVBdChpKS0+Y3JlYXRlQ1NTVmFsdWUoKTsKKyAgICAgICAgaWYgKCFjc3NWYWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoY3NzVmFsdWUtPmNz
c1RleHQoKSk7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCkubG93ZXIoKTsK
K30KKwogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyVmFsdWU6OmNyZWF0ZUNTU1ZhbHVl
KCkKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2aXNpb24gMTkwMjA2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDgg
QEAgcHVibGljOgogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZUF0KHVuc2lnbmVkIGkpIHsgcmV0
dXJuIGkgPCBtX3ZhbHVlcy5zaXplKCkgPyAmbV92YWx1ZXNbaV0gOiAwOyB9CiAKICAgICB2b2lk
IGNsZWFyKCkgeyBtX3ZhbHVlcy5jbGVhcigpOyB9CisgICAgCisgICAgU3RyaW5nIHRvU3RyaW5n
KCk7CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDE5MDIwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsNyAr
NzI4LDcgQEAgYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eQogICAgIHJl
dHVybiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgY3NzUGFyc2VyTW9kZSgpLCBjb250ZXh0U3R5bGVTaGVldCkgPT0gQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdDo6Q2hhbmdlZDsKIH0KIAotYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpz
ZXRDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogLypjb250ZXh0U3R5
bGVTaGVldCovKQorYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRDdXN0b21Qcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAg
Ly8gU2V0dGluZyB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUg
cHJvcGVydHkgaW4gYm90aCBJRSBhbmQgR2Vja28uCiAgICAgLy8gU2V0dGluZyBpdCB0byBudWxs
IHNlZW1zIHRvIHByb2R1Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBp
dCBqdXN0IHRoZSBzYW1lLgpAQCAtNzM3LDEwICs3MzcsNyBAQCBib29sIE11dGFibGVTdHlsZVBy
b3BlcnRpZXM6OnNldEN1c3RvbVByCiAKICAgICAvLyBXaGVuIHJlcGxhY2luZyBhbiBleGlzdGlu
ZyBwcm9wZXJ0eSB2YWx1ZSwgdGhpcyBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0
aGUgbGlzdC4KICAgICAvLyBGaXJlZm94IHByZXNlcnZlcyB0aGUgcG9zaXRpb24sIGFuZCBNU0lF
IG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgYmVnaW5uaW5nLgotICAgIFJlZlB0cjxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPiBjdXN0b21WYWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNy
ZWF0ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICBhZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgY3VzdG9tVmFsdWUsIGltcG9ydGFudCkpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVy
dHlWYWx1ZSh0aGlzLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1v
ZGUoKSwgY29udGV4dFN0eWxlU2hlZXQpID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5n
ZWQ7CiB9CiAKIHZvaWQgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwcnBWYWx1ZSwgYm9vbCBp
bXBvcnRhbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lv
biAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MDEsNyArMTkwMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQ
cm9wZXJ0eShDU1NQcm8KICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsK
ICAgICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHkgPSAmZG93bmNh
c3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjdXN0b21Qcm9wZXJ0eS0+bmFtZSgpLCBjdXN0b21Q
cm9wZXJ0eS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3Bl
cnR5VmFsdWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxMywxMCArNTEzLDEwIEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IFBzZXVkb1N0eWxlQ2FjaGUqIGNhY2hlZFBzZXVkb1N0eWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkUHNldWRvU3R5bGVzLmdldCgpOyB9CiAKLSAgICB2b2lk
IHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKSB7IHJhcmVJbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3Bl
cnRpZXMuYWNjZXNzKCktPnNldEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgdmFsdWUpOyB9Ci0g
ICAgU3RyaW5nIGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVzLT5n
ZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOyB9CisgICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0
eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdWUpIHsgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJvcGVydGllcy5h
Y2Nlc3MoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCB2YWx1ZSk7IH0KKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVz
LT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUpOyB9CiAgICAgYm9vbCBoYXNDdXN0b21Qcm9w
ZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0
ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmhhc0N1c3RvbVByb3BlcnR5KG5hbWUpOyB9Ci0g
ICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz4qIGN1c3RvbVByb3BlcnRpZXMo
KSBjb25zdCB7IHJldHVybiAmKHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMt
Pm1fdmFsdWVzKTsgfQorICAgIGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NT
VmFsdWU+PiogY3VzdG9tUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuICYocmFyZUluaGVyaXRl
ZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+bV92YWx1ZXMpOyB9CiAKICAgICB2b2lkIHNldEhh
c1ZpZXdwb3J0VW5pdHMoYm9vbCBoYXNWaWV3cG9ydFVuaXRzID0gdHJ1ZSkgeyBub25pbmhlcml0
ZWRfZmxhZ3Muc2V0SGFzVmlld3BvcnRVbml0cyhoYXNWaWV3cG9ydFVuaXRzKTsgfQogICAgIGJv
b2wgaGFzVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFncy5o
YXNWaWV3cG9ydFVuaXRzKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZUN1c3RvbVByb3BlcnR5RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbVByb3BlcnR5RGF0YS5oCShyZXZpc2lvbiAxOTAy
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0
eURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEzIEBACiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NWYWx1
ZTsKKwogY2xhc3MgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxT
dHlsZUN1c3RvbVByb3BlcnR5RGF0YT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3R5bGVD
dXN0b21Qcm9wZXJ0eURhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVD
dXN0b21Qcm9wZXJ0eURhdGEpOyB9CkBAIC0zNywxMSArNDAsMTEgQEAgcHVibGljOgogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YSYgbykgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMgPT0gby5tX3ZhbHVlczsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YSAmbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
KTsgfQogICAgIAotICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV92YWx1ZXMuc2V0KG5hbWUsIHZh
bHVlKTsgfQotICAgIFN0cmluZyBnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZ2V0KG5hbWUpOyB9CisgICAgdm9p
ZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3Qg
UmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUpIHsgbV92YWx1ZXMuc2V0KG5hbWUsIHZhbHVlKTsgfQor
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gZ2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmdldChuYW1lKTsgfQogICAgIGJv
b2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5jb250YWlucyhuYW1lKTsgfQogCi0gICAgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIFN0cmluZz4gbV92YWx1ZXM7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxD
U1NWYWx1ZT4+IG1fdmFsdWVzOwogICAgIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTdHlsZUN1
c3RvbVByb3BlcnR5RGF0YSgpCkBAIC00OSw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgeyB9CiAg
ICAgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEoY29uc3QgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEm
IG90aGVyKQogICAgICAgICA6IFJlZkNvdW50ZWQ8U3R5bGVDdXN0b21Qcm9wZXJ0eURhdGE+KCkK
LSAgICAgICAgLCBtX3ZhbHVlcyhIYXNoTWFwPEF0b21pY1N0cmluZywgU3RyaW5nPihvdGhlci5t
X3ZhbHVlcykpCisgICAgICAgICwgbV92YWx1ZXMoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0
cjxDU1NWYWx1ZT4+KG90aGVyLm1fdmFsdWVzKSkKICAgICB7IH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261905</attachid>
            <date>2015-09-24 17:29:29 -0700</date>
            <delta_ts>2015-09-24 17:31:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25045</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDE1LTA5LTI0ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBLZWVwIHRoZSBhbHJlYWR5LXBhcnNl
ZCBsaXN0IG9mIHRlcm1zIGluIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMgc28gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHJlLXBhcnNlIHRoZW0KKyAgICAgICAgbGF0ZXIgd2hlbiBkb2luZyB2YXJpYWJs
ZSByZXNvbHV0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VzdG9tUHJvcGVydHlUZXh0
KToKKyAgICAgICAgQWRkIGEgaGVscGVyIGZvciBnZXR0aW5nIHRoZSByYXcgdGV4dC4gTW9yZSBj
bG9zZWx5IHBhcmFsbGVscyBob3cgbm9uLWN1c3RvbSBwcm9wZXJ0aWVzIHdvcmsgd2l0aCB0aGUK
KyAgICAgICAgZXh0cmFjdG9yLgorCisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgQ2hhbmdlIHByb3BlcnR5VmFsdWUgdG8g
dXNlIGN1c3RvbVByb3BlcnR5VGV4dC4KKworICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIERvbid0IGNvcHkgQ1NT
IGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIHN0eWxlIGRlY2xhcmF0aW9uLiBUaGlzIGlzIGp1
c3QgdXNlZCBmb3IgdGhpbmdzIGxpa2UgZWRpdGluZywgc28KKyAgICAgICAgd2UgZGlkbid0IG5l
ZWQgdG8gYmUgcHV0dGluZyB0aGUgY3VzdG9tIHByb3BlcnRpZXMgaW50byB0aGlzIHNldC4KKwor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKToKKyAgICAgICAgUGF0Y2hlZCB0byBqdXN0IHJldHVybiBudWxscHRyIGZvciBj
dXN0b20gcHJvcGVydGllcy4KKworICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgUGF0Y2hlZCB0byBnbyBzdHJh
aWdodCB0byB0aGUgc2VyaWFsaXplZCBzdHJpbmcgdmFsdWUuCisKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICBSZXBsYWNlZCBieSBjdXN0b21Qcm9wZXJ0eVRleHQuCisKKyAgICAgICAgKiBjc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIFJlbmFtZSBjdXN0b21Qcm9w
ZXJ0eVZhbHVlIHRvIGN1c3RvbVByb3BlcnR5VGV4dCBhbmQgbWFrZSBpdCBqdXN0IHJldHVybiBh
IFN0cmluZy4KKworICAgICAgICAqIGNzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1c3RvbVByb3BlcnR5VmFsdWU6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgQ2hhbmdlZCB0byBob2xkIGJvdGggYSBDU1NQYXJzZXJWYWx1ZUxpc3QsIHdoaWNoIGl0IGFk
b3B0cyBmcm9tIHRoZSBDU1NQYXJzZXIsIGFuZCBhIHN0cmluZyB2YWx1ZSB0aGF0CisgICAgICAg
IGlzIGNvbnN0cnVjdGVkIGxhemlseSBvbmx5IGlmIHRoZSB2YWx1ZSBpcyBzZXJpYWxpemVkLiBO
b3cgdGhlIHByb2JsZW1hdGljIHNlcmlhbGl6YXRpb24gY29kZSB3aWxsIG9ubHkKKyAgICAgICAg
cnVuIGlmIHNvbWVvbmUgdXNlcyB0aGUgQ1NTIE9NIHRvIHRyaWdnZXIgYSBzZXJpYWxpemF0aW9u
ICh0aGlzIHNob3VsZCBiZSBhIHJhcmUgb2NjdXJyZW5jZSwgc28gcGVyZgorICAgICAgICBpbXBy
b3ZlcyB3aXRoIHRoaXMgY2hhbmdlKS4KKworICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnkuaW46
CisgICAgICAgIENoYW5nZSBwYXJzaW5nIG9mIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGJlIGlkZW50
aWNhbCB0byByZWd1bGFyIHByb3BlcnRpZXMuIFRoaXMgcmVmYWN0b3JpbmcgYWxsb3dzCisgICAg
ICAgIHVzIHRvIHNpbXBseSBpbnZva2UgdGhlIHBhcnNlciBmcm9tIHN0eWxlIGRlY2xhcmF0aW9u
cyBhcyB3ZWxsIGFuZCBtYWtlcyBldmVyeXRoaW5nIGJlaGF2ZSBtb3JlCisgICAgICAgIHNpbWls
YXJseSB0byBub3JtYWwgcHJvcGVydHkgcGFyc2luZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpzZXRDdXN0b21Qcm9wZXJ0eU5hbWUpOgorICAgICAgICBXZSBub3cgaGF2
ZSBhIG1ldGhvZCBmb3IgcGFyc2luZyBjdXN0b20gcHJvcGVydGllcyB0aGF0IGNhbiBiZSBpbnZv
a2VkIGZyb20gc3R5bGUgZGVjbGFyYXRpb25zLiBUaGUKKyAgICAgICAgcGFyc2VyIGxpc3QgaXMg
bm93IGFkb3B0ZWQgYnkgdGhlIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuCisKKyAgICAgICAgKiBj
c3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclZhbHVl
TGlzdDo6dG9TdHJpbmcpOgorICAgICAgICBCdWlsZCB0aGUgc3RyaW5nIHNlcmlhbGl6YXRpb24g
Y29kZSByaWdodCBpbnRvIENTU1BhcnNlclZhbHVlTGlzdC4KKworICAgICAgICAqIGNzcy9DU1NQ
YXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgQWRkIGEgdG9TdHJpbmcoKSBtZXRob2QgZm9yIHNlcmlh
bGl6YXRpb24uCisKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldEN1c3RvbVByb3BlcnR5KToKKyAg
ICAgICAgQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBDU1NQYXJzZXIgZnVuY3Rpb25zLiBUaGlzIG1h
a2VzIHRoZSBjb2RlIGJlaGF2ZSBhbG1vc3QgaWRlbnRpY2FsbHkgdG8gcmVndWxhcgorICAgICAg
ICBwcm9wZXJ0eSBwYXJzaW5nLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmg6CisgICAgICAgIENoYW5nZSB0aGUgbWFwcGlu
ZyBvbiBSZW5kZXJTdHlsZSB0byBzdG9yZSB0aGUgY3VzdG9tIENTUyB2YWx1ZXMuIFRoaXMgaXMg
bW9yZSBmdXR1cmUgcHJvb2YgaWYgd2UKKyAgICAgICAgd2FudCB0byBwYXJzZSB0aGVzZSBhcyBz
b21ldGhpbmcgb3RoZXIgdGhhbiBzdHJpbmdzLCBhbmQgaXQgYWxzbyBhdm9pZHMgc3RyaW5nIHNl
cmlhbGl6YXRpb24gdW5sZXNzCisgICAgICAgIHRoZSB2YWx1ZSBpcyBhc2tlZCBmb3IgZnJvbSBj
b21wdXRlZCBzdHlsZS4gRmFzdGVyIQorCiAyMDE1LTA5LTI0ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV3cml0ZSBSYW5nZTo6aW5zZXJ0Tm9kZSgpIGFzIHBl
ciB0aGUgbGF0ZXN0IERPTSBzcGVjaWZpY2F0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTkwMjA5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMDYsOCArMjEwNiwyMCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENv
bXB1dGVkU3R5bGVFeHRyYWN0b3I6CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmhhc0N1c3Rv
bVByb3BlcnR5KHByb3BlcnR5TmFtZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
U3RyaW5nIHJlc3VsdCA9IHN0eWxlLT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFt
ZSk7Ci0gICAgcmV0dXJuIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShwcm9wZXJ0eU5h
bWUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHN0eWxlLT5nZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5TmFtZSk7Cit9CisKK1N0cmluZyBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXN0b21Q
cm9wZXJ0eVRleHQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgTm9k
ZSogc3R5bGVkTm9kZSA9IHRoaXMtPnN0eWxlZE5vZGUoKTsKKyAgICBpZiAoIXN0eWxlZE5vZGUp
CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSA9IGNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KHN0eWxlZE5vZGUsIG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllciwgQ1NTUHJvcGVydHlDdXN0b20pOworICAgIGlmICghc3R5bGUg
fHwgIXN0eWxlLT5oYXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiBzdHlsZS0+Z2V0Q3VzdG9tUHJvcGVydHlW
YWx1ZShwcm9wZXJ0eU5hbWUpLT5jc3NUZXh0KCk7CiB9CiAKIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIEVVcGRhdGVMYXlvdXQgdXBkYXRlTGF5b3V0KSBjb25zdApAQCAtMzU5NSw3ICszNjA3LDcg
QEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlmICghc3R5
bGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFN0cmluZz4qIGN1c3RvbVByb3BlcnRpZXMgPSBzdHlsZS0+Y3VzdG9tUHJvcGVydGllcygpOwor
ICAgIGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiogY3VzdG9t
UHJvcGVydGllcyA9IHN0eWxlLT5jdXN0b21Qcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIG51bUNv
bXB1dGVkUHJvcGVydGllcyArIChjdXN0b21Qcm9wZXJ0aWVzID8gY3VzdG9tUHJvcGVydGllcy0+
c2l6ZSgpIDogMCk7CiB9CiAKQEAgLTM3MDQsMjIgKzM3MTYsNiBAQCBSZWY8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gQ29tcHV0ZWRTdHlsCiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAg
IGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkp
OwogICAgIH0KLSAgICAKLSAgICBhdXRvKiBzdHlsZWROb2RlID0gdGhpcy0+c3R5bGVkTm9kZSgp
OwotICAgIGlmIChzdHlsZWROb2RlKSB7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5
bGUgPSBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShzdHlsZWROb2RlLCBtX3BzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5Q3VzdG9tKTsKLSAgICAgICAgaWYgKHN0eWxlKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvKiBjdXN0b21Qcm9wZXJ0aWVzID0gc3R5bGUtPmN1c3Rv
bVByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGN1c3RvbVByb3BlcnRpZXMtPmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9tUHJv
cGVydGllcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmNyZWF0ZShpdC0+a2V5LCBpdC0+dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBs
aXN0LmFwcGVuZChDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWUucmVsZWFzZSgp
LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICAKICAgICByZXR1cm4gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKGxp
c3QuZGF0YSgpLCBsaXN0LnNpemUoKSk7CiB9CiAKQEAgLTM3MzAsMTAgKzM3MjYsOCBAQCBDU1NS
dWxlKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnBhCiAKIFJlZlB0cjxDU1NWYWx1ZT4g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShwcm9w
ZXJ0eU5hbWUpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yKG1fbm9kZSwgbV9hbGxvd1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKS5jdXN0b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSA/IHZhbHVlLT5jbG9uZUZvckNTU09NKCkgOiBudWxscHRyOwotICAgIH0KKyAg
ICBpZiAoaXNDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJu
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobV9ub2RlLCBtX2FsbG93VmlzaXRlZFN0eWxlLCBtX3Bz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIpLmN1c3RvbVByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKTsK
IAogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlO
YW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCkBAIC0zNzQ0LDEyICszNzM4LDggQEAgUmVmUHRy
PENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYQogCiBTdHJpbmcgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlO
YW1lKQogewotICAgIGlmIChpc0N1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG1f
bm9kZSwgbV9hbGxvd1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKS5jdXN0
b21Qcm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgp
OwotICAgIH0KKyAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkKKyAg
ICAgICAgcmV0dXJuIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobV9ub2RlLCBtX2FsbG93VmlzaXRl
ZFN0eWxlLCBtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpLmN1c3RvbVByb3BlcnR5VGV4dChwcm9w
ZXJ0eU5hbWUpOwogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghcHJvcGVydHlJRCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDE5
MDIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcihQYXNzUmVmUHRyPE5vZGU+LCBib29sIGFsbG93VmlzaXRlZFN0eWxlID0g
ZmFsc2UsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwcm9w
ZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQgPSBVcGRhdGVMYXlvdXQpIGNv
bnN0OworICAgIFN0cmluZyBjdXN0b21Qcm9wZXJ0eVRleHQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICAvLyBIZWxwZXIgbWV0aG9k
cyBmb3IgSFRNTCBlZGl0aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1c3RvbVBy
b3BlcnR5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZS5oCShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwzNCArMjYsNDcg
QEAKICNpZm5kZWYgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZV9oCiAjZGVmaW5lIENTU0N1c3RvbVBy
b3BlcnR5VmFsdWVfaAogCisjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlIDogcHVibGljIENTU1Zh
bHVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IGNy
ZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
c3RhdGljIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBjcmVhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiYgdmFsdWVMaXN0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZShuYW1lLCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHZhbHVlTGlzdCkpOwogICAgIH0KICAgICAKLSAgICBib29s
IGVxdWFscyhjb25zdCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9uYW1lID09IG90aGVyLm1fbmFtZSAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0K
LQotICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKTsgfQor
ICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9z
ZXJpYWxpemVkKSB7CisgICAgICAgICAgICBtX3NlcmlhbGl6ZWQgPSB0cnVlOworICAgICAgICAg
ICAgbV9zdHJpbmdWYWx1ZSA9IG1fcGFyc2VyVmFsdWUgPyBtX3BhcnNlclZhbHVlLT50b1N0cmlu
ZygpIDogIiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nVmFsdWU7CisgICAg
fQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9Ci0gICAgY29uc3QgU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
ICAgICAKKyAgICAvLyBGSVhNRTogU2hvdWxkIGFyZ3VhYmx5IGltcGxlbWVudCBlcXVhbHMgb24g
YWxsIG9mIHRoZSBDU1NQYXJzZXJWYWx1ZXMsIGJ1dCBDU1NWYWx1ZSBlcXVpdmFsZW5jZQorICAg
IC8vIGlzIHJhcmVseSB1c2VkLCBzbyBzZXJpYWxpemF0aW9uIHRvIGNvbXBhcmUgaXMgcHJvYmFi
bHkgZmluZS4KKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9uYW1lID09IG90aGVyLm1fbmFtZSAmJiBjdXN0b21DU1NU
ZXh0KCkgPT0gb3RoZXIuY3VzdG9tQ1NTVGV4dCgpOyB9CisKIHByaXZhdGU6Ci0gICAgQ1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+JiB2YWx1ZUxpc3QpCiAgICAg
ICAgIDogQ1NTVmFsdWUoQ3VzdG9tUHJvcGVydHlDbGFzcykKICAgICAgICAgLCBtX25hbWUobmFt
ZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fcGFyc2VyVmFsdWUoV1RG
Ojptb3ZlKHZhbHVlTGlzdCkpCisgICAgICAgICwgbV9zZXJpYWxpemVkKGZhbHNlKQogICAgIHsK
ICAgICB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcgbV9uYW1lOwotICAgIGNvbnN0IFN0cmlu
ZyBtX3ZhbHVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IG1fcGFy
c2VyVmFsdWU7CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKKyAgICBtdXRhYmxl
IGJvb2wgbV9zZXJpYWxpemVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM5LDEwICsx
NTM5LDIxIEBAIGRlY2xfbGlzdF9yZWNvdmVyeToKIAogZGVjbGFyYXRpb246CiAgICAgQ1VTVE9N
X1BST1BFUlRZIG1heWJlX3NwYWNlICc6JyBtYXliZV9zcGFjZSBleHByIHByaW9yaXR5IHsKKyAg
ICAgICAgJCQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1Byb3BlcnR5UGFyc2VkID0gZmFsc2U7
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHByb3BlcnR5VmFs
dWUoJDUpOwotICAgICAgICBwYXJzZXItPmFkZEN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oJDEs
IHByb3BlcnR5VmFsdWUuZ2V0KCksICQ2KTsKLSAgICAgICAgJCQgPSB0cnVlOwotICAgICAgICBw
YXJzZXItPm1hcmtQcm9wZXJ0eUVuZCgkNiwgdHJ1ZSk7CisgICAgICAgIGlmIChwcm9wZXJ0eVZh
bHVlKSB7CisgICAgICAgICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gV1RGOjptb3ZlKHByb3Bl
cnR5VmFsdWUpOworICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXIt
Pm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgICAgICAgICBwYXJzZXItPnNldEN1c3Rv
bVByb3BlcnR5TmFtZSgkMSk7CisgICAgICAgICAgICAkJCA9IHBhcnNlci0+cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUN1c3RvbSwgJDYpOworICAgICAgICAgICAgaWYgKCEkJCkKKyAgICAgICAgICAg
ICAgICBwYXJzZXItPnJvbGxiYWNrTGFzdFByb3BlcnRpZXMocGFyc2VyLT5tX3BhcnNlZFByb3Bl
cnRpZXMuc2l6ZSgpIC0gb2xkUGFyc2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgaXNQcm9wZXJ0eVBhcnNlZCA9IHRydWU7CisgICAgICAgICAgICBwYXJz
ZXItPm1fdmFsdWVMaXN0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBwYXJzZXItPm1h
cmtQcm9wZXJ0eUVuZCgkNiwgaXNQcm9wZXJ0eVBhcnNlZCk7CiAgICAgfQogICAgIHwgcHJvcGVy
dHkgJzonIG1heWJlX3NwYWNlIGV4cHIgcHJpb3JpdHkgewogICAgICAgICAkJCA9IGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDE5MDIwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUxLDYgKzEz
NTEsMTkgQEAgQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVgogICAgIHJl
dHVybiBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBp
bXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKIH0KIAorQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dCBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzKiBkZWNsYXJhdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQoreworICAgIENTU1Bh
cnNlckNvbnRleHQgY29udGV4dChjc3NQYXJzZXJNb2RlKTsKKyAgICBpZiAoY29udGV4dFN0eWxl
U2hlZXQpIHsKKyAgICAgICAgY29udGV4dCA9IGNvbnRleHRTdHlsZVNoZWV0LT5wYXJzZXJDb250
ZXh0KCk7CisgICAgICAgIGNvbnRleHQubW9kZSA9IGNzc1BhcnNlck1vZGU7CisgICAgfQorCisg
ICAgQ1NTUGFyc2VyIHBhcnNlcihjb250ZXh0KTsKKyAgICBwYXJzZXIuc2V0Q3VzdG9tUHJvcGVy
dHlOYW1lKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xh
cmF0aW9uLCBDU1NQcm9wZXJ0eUN1c3RvbSwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHls
ZVNoZWV0KTsKK30KKwogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0
Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hlZXQoY29udGV4
dFN0eWxlU2hlZXQpOwpAQCAtMTg5NSw2ICsxOTA4LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQKIHsKICAgICBpZiAoIW1fdmFsdWVMaXN0IHx8ICFtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHBy
b3BJZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgeworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyBw
dXQgdGhpcyBhaGVhZCBvZiBpbmhlcml0L2luaXRpYWwgcHJvY2Vzc2luZy4KKyAgICAgICAgLy8g
RXZlbnR1YWxseSB3ZSB3YW50IHRvIHN1cHBvcnQgaW5pdGlhbCBhbmQgaW5oZXJpdC4KKyAgICAg
ICAgcmV0dXJuIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbihpbXBvcnRhbnQpOworICAg
IH0KIAogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3Zh
bHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3Vs
YXRpb24udmFsdWUoKS5pZDsKQEAgLTQxMzcsMjYgKzQxNTYsMTIgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQWx0KENTU1Byb3BlcnR5SUQgcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBD
U1NQYXJzZXI6OmFkZEN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oY29uc3QgQ1NTUGFyc2VyU3Ry
aW5nJiBuYW1lLCBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlLCBib29sIGltcG9ydGFudCkKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oYm9vbCBpbXBvcnRh
bnQpCiB7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGN1
c3RvbSBwcm9wZXJ0eSBjb21lcyBpbiBhcyBhIHBhcnNlZCBzZXQgb2YgQ1NTUGFyc2VyVmFsdWVz
IGNvbGxlY3RlZCBpbnRvIGEgbGlzdC4KLSAgICAvLyBGb3IgQ1NTIHZhcmlhYmxlcywgd2UganVz
dCB3YW50IHRvIHRyZWF0IHRoZSBlbnRpcmUgc2V0IG9mIHZhbHVlcyBhcyBhIHN0cmluZywgc28g
d2hhdCB3ZSBkbwotICAgIC8vIGlzIGJ1aWxkIHVwIGEgc2V0IG9mIENTU1ZhbHVlcyBhbmQgc2Vy
aWFsaXplIHRoZW0gdXNpbmcgY3NzVGV4dCwgc2VwYXJhdGluZyBtdWx0aXBsZSB2YWx1ZXMKLSAg
ICAvLyB3aXRoIHNwYWNlcy4KLSAgICBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lID0gbmFtZTsK
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZhbHVlLT5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSB2YWx1
ZS0+dmFsdWVBdChpKS0+Y3JlYXRlQ1NTVmFsdWUoKTsKLSAgICAgICAgaWYgKCFjc3NWYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoY3NzVmFsdWUtPmNz
c1RleHQoKSk7Ci0gICAgfQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q3VzdG9tLCBDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUocHJvcGVydHlOYW1lLCBidWlsZGVyLnRvU3RyaW5n
KCkubG93ZXIoKSksIGltcG9ydGFudCwgZmFsc2UpOworICAgIGlmIChtX2N1c3RvbVByb3BlcnR5
TmFtZS5pc0VtcHR5KCkgfHwgIW1fdmFsdWVMaXN0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIENTU0N1c3RvbVByb3BlcnR5VmFsdWU6
OmNyZWF0ZShtX2N1c3RvbVByb3BlcnR5TmFtZSwgbV92YWx1ZUxpc3QpLCBpbXBvcnRhbnQsIGZh
bHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gWyA8c3RyaW5nPiB8IDx1cmk+IHwgPGNv
dW50ZXI+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUgfCBjbG9zZS1xdW90ZSB8IG5vLW9wZW4tcXVv
dGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgJKHJldmlzaW9uIDE5MDIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHBhcnNl
U3VwcG9ydHNDb25kaXRpb24oY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgUGFyc2VSZXN1
bHQgcGFyc2VWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250
ZW50cyopOworICAgIHN0YXRpYyBQYXJzZVJlc3VsdCBwYXJzZUN1c3RvbVByb3BlcnR5VmFsdWUo
TXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
LCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVl
dENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAKICAgICBzdGF0aWMgYm9vbCBwYXJzZUNv
bG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwog
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRTeXN0ZW1Db2xvclZhbHVlKENTU1ZhbHVlSUQpOwpAQCAt
MTQzLDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHBhcnNlUXVvdGVzKENTU1Byb3BlcnR5
SUQsIGJvb2wgaW1wb3J0YW50KTsKICAgICBib29sIHBhcnNlQWx0KENTU1Byb3BlcnR5SUQsIGJv
b2wgaW1wb3J0YW50KTsKICAgICAKLSAgICB2b2lkIGFkZEN1c3RvbVByb3BlcnR5RGVjbGFyYXRp
b24oY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgQ1NTUGFyc2VyVmFsdWVMaXN0KiwgYm9vbCBpbXBv
cnRhbnQpOworICAgIGJvb2wgcGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9uKGJvb2wgaW1w
b3J0YW50KTsKICAgICAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQXR0cihDU1NQYXJzZXJW
YWx1ZUxpc3QmIGFyZ3MpOwogCkBAIC0zOTUsNiArMzk2LDcgQEAgcHVibGljOgogCiAgICAgYm9v
bCBtX2ltcG9ydGFudDsKICAgICBDU1NQcm9wZXJ0eUlEIG1faWQ7CisgICAgQXRvbWljU3RyaW5n
IG1fY3VzdG9tUHJvcGVydHlOYW1lOwogICAgIFN0eWxlU2hlZXRDb250ZW50cyogbV9zdHlsZVNo
ZWV0OwogICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBtX3J1bGU7CiAgICAgUmVmUHRyPFN0eWxl
S2V5ZnJhbWU+IG1fa2V5ZnJhbWU7CkBAIC00NjYsNiArNDY4LDggQEAgcHVibGljOgogICAgIExv
Y2F0aW9uIGN1cnJlbnRMb2NhdGlvbigpOwogICAgIHN0YXRpYyBib29sIGlzQ2FsY3VsYXRpb24o
Q1NTUGFyc2VyVmFsdWUmKTsKIAorICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSB7IG1fY3VzdG9tUHJvcGVydHlOYW1lID0gcHJv
cGVydHlOYW1lOyB9CisKIHByaXZhdGU6CiAgICAgYm9vbCBpczhCaXRTb3VyY2UoKSB7IHJldHVy
biBtX2lzOEJpdFNvdXJjZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
VmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFs
dWVzLmNwcAkocmV2aXNpb24gMTkwMjA2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
clZhbHVlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIlNl
bGVjdG9yUHNldWRvVHlwZU1hcC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2ICs2NywyNCBAQCB2b2lkIENTU1Bh
cnNlclZhbHVlTGlzdDo6ZXh0ZW5kKENTU1BhcnNlCiAgICAgICAgIG1fdmFsdWVzLmFwcGVuZCgq
KHZhbHVlTGlzdC52YWx1ZUF0KGkpKSk7CiB9CiAKK1N0cmluZyBDU1NQYXJzZXJWYWx1ZUxpc3Q6
OnRvU3RyaW5nKCkKK3sKKyAgICAvLyBCdWlsZCB1cCBhIHNldCBvZiBDU1NWYWx1ZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtIHVzaW5nIGNzc1RleHQsIHNlcGFyYXRpbmcgbXVsdGlwbGUgdmFsdWVzCisg
ICAgLy8gd2l0aCBzcGFjZXMuCisgICAgLy8gRklYTUU6IFRlYWNoIENTU1BhcnNlclZhbHVlcyBo
b3cgdG8gc2VyaWFsaXplIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjcmVhdGUgQ1NTVmFsdWVz
CisgICAgLy8ganVzdCB0byBwZXJmb3JtIHRoaXMgc2VyaWFsaXphdGlvbi4KKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgaSsr
KSB7CisgICAgICAgIGlmIChpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHZhbHVlQXQoaSktPmNyZWF0ZUNTU1Zh
bHVlKCk7CisgICAgICAgIGlmICghY3NzVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNzc1ZhbHVlLT5jc3NUZXh0KCkpOworICAgIH0KKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpLmxvd2VyKCk7Cit9CisKIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlclZhbHVlOjpjcmVhdGVDU1NWYWx1ZSgpCiB7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZWRWYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgJ
KHJldmlzaW9uIDE5MDIwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDYgKzE2OCw4IEBAIHB1YmxpYzoKICAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92YWx1ZXMuc2l6ZSgp
ID8gJm1fdmFsdWVzW2ldIDogMDsgfQogCiAgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZXMuY2xl
YXIoKTsgfQorICAgIAorICAgIFN0cmluZyB0b1N0cmluZygpOwogCiBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fY3VycmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw3IEBAIGJvb2wgTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6c2V0UHJvcGVydHkKICAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUoKSwg
Y29udGV4dFN0eWxlU2hlZXQpID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkNoYW5nZWQ7CiB9
CiAKLWJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6c2V0Q3VzdG9tUHJvcGVydHkoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBTdHlsZVNoZWV0Q29udGVudHMqIC8qY29udGV4dFN0eWxlU2hlZXQqLykKK2Jvb2wgTXV0YWJs
ZVN0eWxlUHJvcGVydGllczo6c2V0Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29u
dGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIHRv
IGFuIGVtcHR5IHN0cmluZyBqdXN0IHJlbW92ZXMgdGhlIHByb3BlcnR5IGluIGJvdGggSUUgYW5k
IEdlY2tvLgogICAgIC8vIFNldHRpbmcgaXQgdG8gbnVsbCBzZWVtcyB0byBwcm9kdWNlIGxlc3Mg
Y29uc2lzdGVudCByZXN1bHRzLCBidXQgd2UgdHJlYXQgaXQganVzdCB0aGUgc2FtZS4KQEAgLTcz
NywxMCArNzM3LDcgQEAgYm9vbCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRDdXN0b21Qcgog
CiAgICAgLy8gV2hlbiByZXBsYWNpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgdmFsdWUsIHRoaXMg
bW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgLy8gRmlyZWZv
eCBwcmVzZXJ2ZXMgdGhlIHBvc2l0aW9uLCBhbmQgTVNJRSBtb3ZlcyB0aGUgcHJvcGVydHkgdG8g
dGhlIGJlZ2lubmluZy4KLSAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gY3VzdG9t
VmFsdWUgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUocHJvcGVydHlOYW1lLCB2YWx1
ZSk7Ci0gICAgYWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20s
IGN1c3RvbVZhbHVlLCBpbXBvcnRhbnQpKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUN1c3RvbVByb3BlcnR5VmFsdWUodGhpcywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgaW1wb3J0YW50LCBjc3NQYXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0
KSA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpDaGFuZ2VkOwogfQogCiB2b2lkIE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcHJwVmFsdWUsIGJvb2wgaW1wb3J0YW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAxLDcgKzE5
MDEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgCiAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CiAgICAgICAgIENTU0N1c3RvbVByb3Bl
cnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5ID0gJmRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFs
dWU+KCp2YWx1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1c3RvbVByb3BlcnR5VmFs
dWUoY3VzdG9tUHJvcGVydHktPm5hbWUoKSwgY3VzdG9tUHJvcGVydHktPnZhbHVlKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5
LT5uYW1lKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDE5MDIw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTMsMTAgKzUxMywxMCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBQc2V1
ZG9TdHlsZUNhY2hlKiBjYWNoZWRQc2V1ZG9TdHlsZXMoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFBzZXVkb1N0eWxlcy5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyByYXJlSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT5zZXRDdXN0
b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHZhbHVlKTsgfQotICAgIFN0cmluZyBnZXRDdXN0b21Qcm9w
ZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gcmFyZUlu
aGVyaXRlZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShu
YW1lKTsgfQorICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlKSB7IHJhcmVJbmhlcml0ZWRE
YXRhLmFjY2VzcygpLT5tX2N1c3RvbVByb3BlcnRpZXMuYWNjZXNzKCktPnNldEN1c3RvbVByb3Bl
cnR5VmFsdWUobmFtZSwgdmFsdWUpOyB9CisgICAgUmVmUHRyPENTU1ZhbHVlPiBnZXRDdXN0b21Q
cm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gcmFy
ZUluaGVyaXRlZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1
ZShuYW1lKTsgfQogICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0
aWVzLT5oYXNDdXN0b21Qcm9wZXJ0eShuYW1lKTsgfQotICAgIGNvbnN0IEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBTdHJpbmc+KiBjdXN0b21Qcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gJihyYXJl
SW5oZXJpdGVkRGF0YS0+bV9jdXN0b21Qcm9wZXJ0aWVzLT5tX3ZhbHVlcyk7IH0KKyAgICBjb25z
dCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU1ZhbHVlPj4qIGN1c3RvbVByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiAmKHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRp
ZXMtPm1fdmFsdWVzKTsgfQogCiAgICAgdm9pZCBzZXRIYXNWaWV3cG9ydFVuaXRzKGJvb2wgaGFz
Vmlld3BvcnRVbml0cyA9IHRydWUpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLnNldEhhc1ZpZXdwb3J0
VW5pdHMoaGFzVmlld3BvcnRVbml0cyk7IH0KICAgICBib29sIGhhc1ZpZXdwb3J0VW5pdHMoKSBj
b25zdCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuaGFzVmlld3BvcnRVbml0cygpOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21Qcm9wZXJ0eURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVD
dXN0b21Qcm9wZXJ0eURhdGEuaAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDEwICsyNSwxMyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTVmFsdWU7CisKIGNsYXNzIFN0eWxlQ3VzdG9t
UHJvcGVydHlEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVDdXN0b21Qcm9wZXJ0eURhdGE+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhKTsgfQpA
QCAtMzcsMTEgKzQwLDExIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5
bGVDdXN0b21Qcm9wZXJ0eURhdGEmIG8pIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzID09IG8ubV92
YWx1ZXM7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDdXN0b21Qcm9wZXJ0eURh
dGEgJm8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KICAgICAKLSAgICB2b2lkIHNl
dEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IG1fdmFsdWVzLnNldChuYW1lLCB2YWx1ZSk7IH0KLSAgICBTdHJpbmcgZ2V0
Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmdldChuYW1lKTsgfQorICAgIHZvaWQgc2V0Q3VzdG9tUHJvcGVydHlWYWx1
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVl
KSB7IG1fdmFsdWVzLnNldChuYW1lLCB2YWx1ZSk7IH0KKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGdl
dEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5nZXQobmFtZSk7IH0KICAgICBib29sIGhhc0N1c3RvbVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY29udGFpbnMo
bmFtZSk7IH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmc+IG1fdmFsdWVzOwor
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PiBtX3ZhbHVlczsKICAg
ICAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU3R5bGVDdXN0b21Qcm9wZXJ0eURhdGEoKQpAQCAt
NDksNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHsgfQogICAgIFN0eWxlQ3VzdG9tUHJvcGVydHlE
YXRhKGNvbnN0IFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhJiBvdGhlcikKICAgICAgICAgOiBSZWZD
b3VudGVkPFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhPigpCi0gICAgICAgICwgbV92YWx1ZXMoSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFN0cmluZz4ob3RoZXIubV92YWx1ZXMpKQorICAgICAgICAsIG1f
dmFsdWVzKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q1NTVmFsdWU+PihvdGhlci5tX3Zh
bHVlcykpCiAgICAgeyB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261906</attachid>
            <date>2015-09-24 17:31:34 -0700</date>
            <delta_ts>2015-09-24 17:41:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24830</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDIzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE1LTA5LTI0ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBLZWVwIHRoZSBhbHJlYWR5LXBhcnNl
ZCBsaXN0IG9mIHRlcm1zIGluIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMgc28gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHJlLXBhcnNlIHRoZW0KKyAgICAgICAgbGF0ZXIgd2hlbiBkb2luZyB2YXJpYWJs
ZSByZXNvbHV0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5NTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VzdG9tUHJvcGVydHlUZXh0
KToKKyAgICAgICAgQWRkIGEgaGVscGVyIGZvciBnZXR0aW5nIHRoZSByYXcgdGV4dC4gTW9yZSBj
bG9zZWx5IHBhcmFsbGVscyBob3cgbm9uLWN1c3RvbSBwcm9wZXJ0aWVzIHdvcmsgd2l0aCB0aGUK
KyAgICAgICAgZXh0cmFjdG9yLgorCisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpwcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgQ2hhbmdlIHByb3BlcnR5VmFsdWUgdG8g
dXNlIGN1c3RvbVByb3BlcnR5VGV4dC4KKworICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIERvbid0IGNvcHkgQ1NT
IGN1c3RvbSBwcm9wZXJ0aWVzIGludG8gdGhlIHN0eWxlIGRlY2xhcmF0aW9uLiBUaGlzIGlzIGp1
c3QgdXNlZCBmb3IgdGhpbmdzIGxpa2UgZWRpdGluZywgc28KKyAgICAgICAgd2UgZGlkbid0IG5l
ZWQgdG8gYmUgcHV0dGluZyB0aGUgY3VzdG9tIHByb3BlcnRpZXMgaW50byB0aGlzIHNldC4KKwor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgUGF0Y2hlZCB0byBnbyBzdHJhaWdodCB0byB0aGUgc2VyaWFsaXpl
ZCBzdHJpbmcgdmFsdWUuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OmN1c3RvbVByb3BlcnR5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICBSZXBsYWNlZCBieSBj
dXN0b21Qcm9wZXJ0eVRleHQuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmg6CisgICAgICAgIFJlbmFtZSBjdXN0b21Qcm9wZXJ0eVZhbHVlIHRvIGN1c3RvbVBy
b3BlcnR5VGV4dCBhbmQgbWFrZSBpdCBqdXN0IHJldHVybiBhIFN0cmluZy4KKworICAgICAgICAq
IGNzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
OjpDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1c3RvbVBy
b3BlcnR5VmFsdWU6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgQ2hhbmdlZCB0byBob2xkIGJv
dGggYSBDU1NQYXJzZXJWYWx1ZUxpc3QsIHdoaWNoIGl0IGFkb3B0cyBmcm9tIHRoZSBDU1NQYXJz
ZXIsIGFuZCBhIHN0cmluZyB2YWx1ZSB0aGF0CisgICAgICAgIGlzIGNvbnN0cnVjdGVkIGxhemls
eSBvbmx5IGlmIHRoZSB2YWx1ZSBpcyBzZXJpYWxpemVkLiBOb3cgdGhlIHByb2JsZW1hdGljIHNl
cmlhbGl6YXRpb24gY29kZSB3aWxsIG9ubHkKKyAgICAgICAgcnVuIGlmIHNvbWVvbmUgdXNlcyB0
aGUgQ1NTIE9NIHRvIHRyaWdnZXIgYSBzZXJpYWxpemF0aW9uICh0aGlzIHNob3VsZCBiZSBhIHJh
cmUgb2NjdXJyZW5jZSwgc28gcGVyZgorICAgICAgICBpbXByb3ZlcyB3aXRoIHRoaXMgY2hhbmdl
KS4KKworICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnkuaW46CisgICAgICAgIENoYW5nZSBwYXJz
aW5nIG9mIGN1c3RvbSBwcm9wZXJ0aWVzIHRvIGJlIGlkZW50aWNhbCB0byByZWd1bGFyIHByb3Bl
cnRpZXMuIFRoaXMgcmVmYWN0b3JpbmcgYWxsb3dzCisgICAgICAgIHVzIHRvIHNpbXBseSBpbnZv
a2UgdGhlIHBhcnNlciBmcm9tIHN0eWxlIGRlY2xhcmF0aW9ucyBhcyB3ZWxsIGFuZCBtYWtlcyBl
dmVyeXRoaW5nIGJlaGF2ZSBtb3JlCisgICAgICAgIHNpbWlsYXJseSB0byBub3JtYWwgcHJvcGVy
dHkgcGFyc2luZy4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6YWRkQ3VzdG9tUHJvcGVydHlEZWNsYXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXRDdXN0
b21Qcm9wZXJ0eU5hbWUpOgorICAgICAgICBXZSBub3cgaGF2ZSBhIG1ldGhvZCBmb3IgcGFyc2lu
ZyBjdXN0b20gcHJvcGVydGllcyB0aGF0IGNhbiBiZSBpbnZva2VkIGZyb20gc3R5bGUgZGVjbGFy
YXRpb25zLiBUaGUKKyAgICAgICAgcGFyc2VyIGxpc3QgaXMgbm93IGFkb3B0ZWQgYnkgdGhlIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclZhbHVlTGlzdDo6dG9TdHJpbmcpOgorICAg
ICAgICBCdWlsZCB0aGUgc3RyaW5nIHNlcmlhbGl6YXRpb24gY29kZSByaWdodCBpbnRvIENTU1Bh
cnNlclZhbHVlTGlzdC4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAg
ICAgQWRkIGEgdG9TdHJpbmcoKSBtZXRob2QgZm9yIHNlcmlhbGl6YXRpb24uCisKKyAgICAgICAg
KiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGFibGVTdHls
ZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGFibGVTdHls
ZVByb3BlcnRpZXM6OnNldEN1c3RvbVByb3BlcnR5KToKKyAgICAgICAgQ2hhbmdlZCB0byB1c2Ug
dGhlIG5ldyBDU1NQYXJzZXIgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHRoZSBjb2RlIGJlaGF2ZSBh
bG1vc3QgaWRlbnRpY2FsbHkgdG8gcmVndWxhcgorICAgICAgICBwcm9wZXJ0eSBwYXJzaW5nLgor
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3VzdG9tUHJvcGVy
dHlEYXRhLmg6CisgICAgICAgIENoYW5nZSB0aGUgbWFwcGluZyBvbiBSZW5kZXJTdHlsZSB0byBz
dG9yZSB0aGUgY3VzdG9tIENTUyB2YWx1ZXMuIFRoaXMgd2F5IHdlIGNhbiBnZXQgdG8gdGhlIG9y
aWdpbmFsCisgICAgICAgIHBhcnNlciBsaXN0cyBmb3IgZWFjaCB2YXJpYWJsZSB3aGVuIGl0IGNv
bWVzIHRpbWUgdG8gZG8gdmFyaWFibGUgcmVzb2x1dGlvbi4KKwogMjAxNS0wOS0yNCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJld3JpdGUgUmFuZ2U6Omluc2Vy
dE5vZGUoKSBhcyBwZXIgdGhlIGxhdGVzdCBET00gc3BlY2lmaWNhdGlvbgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDE5MDIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA2LDggKzIxMDYsMjAgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgIGlmICghc3R5bGUgfHwgIXN0
eWxlLT5oYXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIFN0cmluZyByZXN1bHQgPSBzdHlsZS0+Z2V0Q3VzdG9tUHJvcGVydHlWYWx1
ZShwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVh
dGUocHJvcGVydHlOYW1lLCByZXN1bHQpOworICAgIHJldHVybiBzdHlsZS0+Z2V0Q3VzdG9tUHJv
cGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpOworfQorCitTdHJpbmcgQ29tcHV0ZWRTdHlsZUV4dHJh
Y3Rvcjo6Y3VzdG9tUHJvcGVydHlUZXh0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBjb25z
dAoreworICAgIE5vZGUqIHN0eWxlZE5vZGUgPSB0aGlzLT5zdHlsZWROb2RlKCk7CisgICAgaWYg
KCFzdHlsZWROb2RlKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShzdHls
ZWROb2RlLCBtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5Q3VzdG9tKTsKKyAg
ICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+aGFzQ3VzdG9tUHJvcGVydHkocHJvcGVydHlOYW1lKSkK
KyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICByZXR1cm4gc3R5bGUtPmdldEN1
c3RvbVByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKS0+Y3NzVGV4dCgpOwogfQogCiBSZWZQdHI8
Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0IHVwZGF0ZUxheW91dCkgY29uc3QKQEAgLTM1
OTUsNyArMzYwNyw3IEBAIHVuc2lnbmVkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGUK
ICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNvbnN0IEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTdHJpbmc+KiBjdXN0b21Qcm9wZXJ0aWVzID0gc3R5bGUtPmN1c3RvbVBy
b3BlcnRpZXMoKTsKKyAgICBjb25zdCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU1Zh
bHVlPj4qIGN1c3RvbVByb3BlcnRpZXMgPSBzdHlsZS0+Y3VzdG9tUHJvcGVydGllcygpOwogICAg
IHJldHVybiBudW1Db21wdXRlZFByb3BlcnRpZXMgKyAoY3VzdG9tUHJvcGVydGllcyA/IGN1c3Rv
bVByb3BlcnRpZXMtPnNpemUoKSA6IDApOwogfQogCkBAIC0zNzA0LDIyICszNzE2LDYgQEAgUmVm
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IENvbXB1dGVkU3R5bAogICAgICAgICBpZiAodmFsdWUp
CiAgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVh
c2UoKSwgZmFsc2UpKTsKICAgICB9Ci0gICAgCi0gICAgYXV0byogc3R5bGVkTm9kZSA9IHRoaXMt
PnN0eWxlZE5vZGUoKTsKLSAgICBpZiAoc3R5bGVkTm9kZSkgewotICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gY29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkoc3R5bGVkTm9k
ZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyLCBDU1NQcm9wZXJ0eUN1c3RvbSk7Ci0gICAgICAg
IGlmIChzdHlsZSkgewotICAgICAgICAgICAgY29uc3QgYXV0byogY3VzdG9tUHJvcGVydGllcyA9
IHN0eWxlLT5jdXN0b21Qcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBpZiAoY3VzdG9tUHJvcGVy
dGllcykgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBjdXN0b21Qcm9wZXJ0aWVzLT5lbmQoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGN1c3RvbVByb3BlcnRpZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWUgPSBDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoaXQtPmtleSwgaXQtPnZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZh
bHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRp
ZXM6OmNyZWF0ZShsaXN0LmRhdGEoKSwgbGlzdC5zaXplKCkpOwogfQogCkBAIC0zNzMwLDEwICsz
NzI2LDggQEAgQ1NTUnVsZSogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpwYQogCiBSZWZQ
dHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoaXNDdXN0b21Qcm9w
ZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
ID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcihtX25vZGUsIG1fYWxsb3dWaXNpdGVkU3R5bGUsIG1f
cHNldWRvRWxlbWVudFNwZWNpZmllcikuY3VzdG9tUHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUp
OwotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+Y2xvbmVGb3JDU1NPTSgpIDogbnVsbHB0
cjsKLSAgICB9CisgICAgaWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpCisg
ICAgICAgIHJldHVybiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG1fbm9kZSwgbV9hbGxvd1Zpc2l0
ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKS5jdXN0b21Qcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5TmFtZSk7CiAKICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQpAQCAtMzc0NCwxMiArMzcz
OCw4IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmEKIAogU3RyaW5n
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJp
bmcgJnByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ29tcHV0ZWRTdHls
ZUV4dHJhY3RvcihtX25vZGUsIG1fYWxsb3dWaXNpdGVkU3R5bGUsIG1fcHNldWRvRWxlbWVudFNw
ZWNpZmllcikuY3VzdG9tUHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAo
IXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFs
dWUtPmNzc1RleHQoKTsKLSAgICB9CisgICAgaWYgKGlzQ3VzdG9tUHJvcGVydHlOYW1lKHByb3Bl
cnR5TmFtZSkpCisgICAgICAgIHJldHVybiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG1fbm9kZSwg
bV9hbGxvd1Zpc2l0ZWRTdHlsZSwgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKS5jdXN0b21Qcm9w
ZXJ0eVRleHQocHJvcGVydHlOYW1lKTsKIAogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9
IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
CShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgog
ICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoUGFzc1JlZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zp
c2l0ZWRTdHlsZSA9IGZhbHNlLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKIAogICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0ID0gVXBk
YXRlTGF5b3V0KSBjb25zdDsKKyAgICBTdHJpbmcgY3VzdG9tUHJvcGVydHlUZXh0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1c3RvbVBy
b3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgLy8g
SGVscGVyIG1ldGhvZHMgZm9yIEhUTUwgZWRpdGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMzQgKzI2LDQ3IEBACiAjaWZuZGVmIENTU0N1c3RvbVByb3BlcnR5VmFsdWVfaAogI2RlZmlu
ZSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlX2gKIAorI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSA6
IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHN0YXRpYyBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gY3JlYXRlKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclZhbHVlTGlz
dD4mIHZhbHVlTGlzdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0N1
c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCB2YWx1ZUxpc3QpKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBvdGhlci5tX25hbWUgJiYgbV92YWx1ZSA9PSBvdGhl
ci5tX3ZhbHVlOyB9Ci0KLSAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0IHsgcmV0dXJu
IHZhbHVlKCk7IH0KKyAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fc2VyaWFsaXplZCkgeworICAgICAgICAgICAgbV9zZXJpYWxpemVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1fc3RyaW5nVmFsdWUgPSBtX3BhcnNlclZhbHVlID8gbV9wYXJzZXJW
YWx1ZS0+dG9TdHJpbmcoKSA6ICIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3N0cmlu
Z1ZhbHVlOworICAgIH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CiAgICAgCisgICAgLy8gRklYTUU6IFNob3VsZCBhcmd1YWJseSBpbXBsZW1l
bnQgZXF1YWxzIG9uIGFsbCBvZiB0aGUgQ1NTUGFyc2VyVmFsdWVzLCBidXQgQ1NTVmFsdWUgZXF1
aXZhbGVuY2UKKyAgICAvLyBpcyByYXJlbHkgdXNlZCwgc28gc2VyaWFsaXphdGlvbiB0byBjb21w
YXJlIGlzIHByb2JhYmx5IGZpbmUuCisgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBvdGhlci5tX25hbWUg
JiYgY3VzdG9tQ1NTVGV4dCgpID09IG90aGVyLmN1c3RvbUNTU1RleHQoKTsgfQorCiBwcml2YXRl
OgotICAgIENTU0N1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgIENTU0N1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiYgdmFs
dWVMaXN0KQogICAgICAgICA6IENTU1ZhbHVlKEN1c3RvbVByb3BlcnR5Q2xhc3MpCiAgICAgICAg
ICwgbV9uYW1lKG5hbWUpCi0gICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3Bh
cnNlclZhbHVlKFdURjo6bW92ZSh2YWx1ZUxpc3QpKQorICAgICAgICAsIG1fc2VyaWFsaXplZChm
YWxzZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nIG1fbmFtZTsKLSAg
ICBjb25zdCBTdHJpbmcgbV92YWx1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFs
dWVMaXN0PiBtX3BhcnNlclZhbHVlOworICAgIG11dGFibGUgU3RyaW5nIG1fc3RyaW5nVmFsdWU7
CisgICAgbXV0YWJsZSBib29sIG1fc2VyaWFsaXplZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgkocmV2aXNpb24gMTkwMjA5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgkod29ya2luZyBjb3B5KQpA
QCAtMTUzOSwxMCArMTUzOSwyMSBAQCBkZWNsX2xpc3RfcmVjb3Zlcnk6CiAKIGRlY2xhcmF0aW9u
OgogICAgIENVU1RPTV9QUk9QRVJUWSBtYXliZV9zcGFjZSAnOicgbWF5YmVfc3BhY2UgZXhwciBw
cmlvcml0eSB7CisgICAgICAgICQkID0gZmFsc2U7CisgICAgICAgIGJvb2wgaXNQcm9wZXJ0eVBh
cnNlZCA9IGZhbHNlOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0
PiBwcm9wZXJ0eVZhbHVlKCQ1KTsKLSAgICAgICAgcGFyc2VyLT5hZGRDdXN0b21Qcm9wZXJ0eURl
Y2xhcmF0aW9uKCQxLCBwcm9wZXJ0eVZhbHVlLmdldCgpLCAkNik7Ci0gICAgICAgICQkID0gdHJ1
ZTsKLSAgICAgICAgcGFyc2VyLT5tYXJrUHJvcGVydHlFbmQoJDYsIHRydWUpOworICAgICAgICBp
ZiAocHJvcGVydHlWYWx1ZSkgeworICAgICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IFdU
Rjo6bW92ZShwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgICAgIGludCBvbGRQYXJzZWRQcm9wZXJ0
aWVzID0gcGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgICAgICAgICAgcGFy
c2VyLT5zZXRDdXN0b21Qcm9wZXJ0eU5hbWUoJDEpOworICAgICAgICAgICAgJCQgPSBwYXJzZXIt
PnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sICQ2KTsKKyAgICAgICAgICAgIGlmICghJCQp
CisgICAgICAgICAgICAgICAgcGFyc2VyLT5yb2xsYmFja0xhc3RQcm9wZXJ0aWVzKHBhcnNlci0+
bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlzUHJvcGVydHlQYXJzZWQgPSB0cnVlOworICAg
ICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgcGFyc2VyLT5tYXJrUHJvcGVydHlFbmQoJDYsIGlzUHJvcGVydHlQYXJzZWQpOwogICAgIH0K
ICAgICB8IHByb3BlcnR5ICc6JyBtYXliZV9zcGFjZSBleHByIHByaW9yaXR5IHsKICAgICAgICAg
JCQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxOTAy
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM1MSw2ICsxMzUxLDE5IEBAIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VyOjpw
YXJzZVYKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5
SUQsIHN0cmluZywgaW1wb3J0YW50LCBjb250ZXh0U3R5bGVTaGVldCk7CiB9CiAKK0NTU1BhcnNl
cjo6UGFyc2VSZXN1bHQgQ1NTUGFyc2VyOjpwYXJzZUN1c3RvbVByb3BlcnR5VmFsdWUoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVy
dHlOYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkK
K3sKKyAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQoY3NzUGFyc2VyTW9kZSk7CisgICAgaWYg
KGNvbnRleHRTdHlsZVNoZWV0KSB7CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0U3R5bGVTaGVl
dC0+cGFyc2VyQ29udGV4dCgpOworICAgICAgICBjb250ZXh0Lm1vZGUgPSBjc3NQYXJzZXJNb2Rl
OworICAgIH0KKworICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7CisgICAgcGFyc2VyLnNl
dEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBwYXJzZXIucGFy
c2VWYWx1ZShkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlDdXN0b20sIHN0cmluZywgaW1wb3J0YW50
LCBjb250ZXh0U3R5bGVTaGVldCk7Cit9CisKIENTU1BhcnNlcjo6UGFyc2VSZXN1bHQgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFu
dCwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICBzZXRTdHls
ZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKQEAgLTE4OTUsNiArMTkwOCwxMiBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiB7CiAgICAgaWYgKCFtX3ZhbHVlTGlz
dCB8fCAhbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKKyAgICAgICAgLy8gRklY
TUU6IEZvciBub3cgcHV0IHRoaXMgYWhlYWQgb2YgaW5oZXJpdC9pbml0aWFsIHByb2Nlc3Npbmcu
CisgICAgICAgIC8vIEV2ZW50dWFsbHkgd2Ugd2FudCB0byBzdXBwb3J0IGluaXRpYWwgYW5kIGlu
aGVyaXQuCisgICAgICAgIHJldHVybiBwYXJzZUN1c3RvbVByb3BlcnR5RGVjbGFyYXRpb24oaW1w
b3J0YW50KTsKKyAgICB9CiAKICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxj
dWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHZh
bHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CkBAIC00MTM3LDI2ICs0MTU2LDEyIEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUFsdChDU1NQcm9wZXJ0eUlEIHAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjphZGRDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9uKGNvbnN0
IENTU1BhcnNlclN0cmluZyYgbmFtZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQpCitib29sIENTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eURlY2xhcmF0aW9u
KGJvb2wgaW1wb3J0YW50KQogewotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFRoZSBjdXN0b20gcHJvcGVydHkgY29tZXMgaW4gYXMgYSBwYXJzZWQgc2V0IG9mIENT
U1BhcnNlclZhbHVlcyBjb2xsZWN0ZWQgaW50byBhIGxpc3QuCi0gICAgLy8gRm9yIENTUyB2YXJp
YWJsZXMsIHdlIGp1c3Qgd2FudCB0byB0cmVhdCB0aGUgZW50aXJlIHNldCBvZiB2YWx1ZXMgYXMg
YSBzdHJpbmcsIHNvIHdoYXQgd2UgZG8KLSAgICAvLyBpcyBidWlsZCB1cCBhIHNldCBvZiBDU1NW
YWx1ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHVzaW5nIGNzc1RleHQsIHNlcGFyYXRpbmcgbXVsdGlw
bGUgdmFsdWVzCi0gICAgLy8gd2l0aCBzcGFjZXMuCi0gICAgQXRvbWljU3RyaW5nIHByb3BlcnR5
TmFtZSA9IG5hbWU7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2YWx1ZS0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGkpCi0gICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNz
c1ZhbHVlID0gdmFsdWUtPnZhbHVlQXQoaSktPmNyZWF0ZUNTU1ZhbHVlKCk7Ci0gICAgICAgIGlm
ICghY3NzVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGNzc1ZhbHVlLT5jc3NUZXh0KCkpOwotICAgIH0KLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUN1c3RvbSwgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKHByb3BlcnR5TmFtZSwgYnVp
bGRlci50b1N0cmluZygpLmxvd2VyKCkpLCBpbXBvcnRhbnQsIGZhbHNlKTsKKyAgICBpZiAobV9j
dXN0b21Qcm9wZXJ0eU5hbWUuaXNFbXB0eSgpIHx8ICFtX3ZhbHVlTGlzdCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q3VzdG9tLCBDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlOjpjcmVhdGUobV9jdXN0b21Qcm9wZXJ0eU5hbWUsIG1fdmFsdWVMaXN0KSwg
aW1wb3J0YW50LCBmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFsgPHN0cmluZz4g
fCA8dXJpPiB8IDxjb3VudGVyPiB8IGF0dHIoWCkgfCBvcGVuLXF1b3RlIHwgY2xvc2UtcXVvdGUg
fCBuby1vcGVuLXF1b3RlIHwgbm8tY2xvc2UtcXVvdGUgXSsgfCBpbmhlcml0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBwYXJzZVN1cHBvcnRzQ29uZGl0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgc3Rh
dGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIENTU1By
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBT
dHlsZVNoZWV0Q29udGVudHMqKTsKKyAgICBzdGF0aWMgUGFyc2VSZXN1bHQgcGFyc2VDdXN0b21Q
cm9wZXJ0eVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMqLCBjb25zdCBBdG9taWNTdHJpbmcm
IHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1v
ZGUsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCiAgICAgc3RhdGlj
IGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmlj
dCA9IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShDU1NW
YWx1ZUlEKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJzZVF1b3Rl
cyhDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CiAgICAgYm9vbCBwYXJzZUFsdChDU1NQ
cm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CiAgICAgCi0gICAgdm9pZCBhZGRDdXN0b21Qcm9w
ZXJ0eURlY2xhcmF0aW9uKGNvbnN0IENTU1BhcnNlclN0cmluZyYsIENTU1BhcnNlclZhbHVlTGlz
dCosIGJvb2wgaW1wb3J0YW50KTsKKyAgICBib29sIHBhcnNlQ3VzdG9tUHJvcGVydHlEZWNsYXJh
dGlvbihib29sIGltcG9ydGFudCk7CiAgICAgCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUF0
dHIoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKTsKIApAQCAtMzk1LDYgKzM5Niw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgbV9pbXBvcnRhbnQ7CiAgICAgQ1NTUHJvcGVydHlJRCBtX2lkOworICAg
IEF0b21pY1N0cmluZyBtX2N1c3RvbVByb3BlcnR5TmFtZTsKICAgICBTdHlsZVNoZWV0Q29udGVu
dHMqIG1fc3R5bGVTaGVldDsKICAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gbV9ydWxlOwogICAg
IFJlZlB0cjxTdHlsZUtleWZyYW1lPiBtX2tleWZyYW1lOwpAQCAtNDY2LDYgKzQ2OCw4IEBAIHB1
YmxpYzoKICAgICBMb2NhdGlvbiBjdXJyZW50TG9jYXRpb24oKTsKICAgICBzdGF0aWMgYm9vbCBp
c0NhbGN1bGF0aW9uKENTU1BhcnNlclZhbHVlJik7CiAKKyAgICB2b2lkIHNldEN1c3RvbVByb3Bl
cnR5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkgeyBtX2N1c3RvbVByb3Bl
cnR5TmFtZSA9IHByb3BlcnR5TmFtZTsgfQorCiBwcml2YXRlOgogICAgIGJvb2wgaXM4Qml0U291
cmNlKCkgeyByZXR1cm4gbV9pczhCaXRTb3VyY2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlclZhbHVlcy5jcHAJKHJldmlzaW9uIDE5MDIwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIK
ICNpbmNsdWRlICJTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsNiArNjcsMjQg
QEAgdm9pZCBDU1NQYXJzZXJWYWx1ZUxpc3Q6OmV4dGVuZChDU1NQYXJzZQogICAgICAgICBtX3Zh
bHVlcy5hcHBlbmQoKih2YWx1ZUxpc3QudmFsdWVBdChpKSkpOwogfQogCitTdHJpbmcgQ1NTUGFy
c2VyVmFsdWVMaXN0Ojp0b1N0cmluZygpCit7CisgICAgLy8gQnVpbGQgdXAgYSBzZXQgb2YgQ1NT
VmFsdWVzIGFuZCBzZXJpYWxpemUgdGhlbSB1c2luZyBjc3NUZXh0LCBzZXBhcmF0aW5nIG11bHRp
cGxlIHZhbHVlcworICAgIC8vIHdpdGggc3BhY2VzLgorICAgIC8vIEZJWE1FOiBUZWFjaCBDU1NQ
YXJzZXJWYWx1ZXMgaG93IHRvIHNlcmlhbGl6ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY3Jl
YXRlIENTU1ZhbHVlcworICAgIC8vIGp1c3QgdG8gcGVyZm9ybSB0aGlzIHNlcmlhbGl6YXRpb24u
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcgJyk7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSB2YWx1ZUF0KGkp
LT5jcmVhdGVDU1NWYWx1ZSgpOworICAgICAgICBpZiAoIWNzc1ZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuICIiOworICAgICAgICBidWlsZGVyLmFwcGVuZChjc3NWYWx1ZS0+Y3NzVGV4dCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKS5sb3dlcigpOworfQorCiBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJWYWx1ZTo6Y3JlYXRlQ1NTVmFsdWUoKQogewogICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlclZhbHVlcy5oCShyZXZpc2lvbiAxOTAyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsOCBAQCBwdWJsaWM6
CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlQXQodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1f
dmFsdWVzLnNpemUoKSA/ICZtX3ZhbHVlc1tpXSA6IDA7IH0KIAogICAgIHZvaWQgY2xlYXIoKSB7
IG1fdmFsdWVzLmNsZWFyKCk7IH0KKyAgICAKKyAgICBTdHJpbmcgdG9TdHJpbmcoKTsKIAogcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVQcm9wZXJ0aWVzLmNwcAkocmV2aXNpb24gMTkwMjA5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw3ICs3MjgsNyBAQCBi
b29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5CiAgICAgcmV0dXJuIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBjc3NQ
YXJzZXJNb2RlKCksIGNvbnRleHRTdHlsZVNoZWV0KSA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0
OjpDaGFuZ2VkOwogfQogCi1ib29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldEN1c3RvbVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCwgU3R5bGVTaGVldENvbnRlbnRzKiAvKmNvbnRleHRTdHlsZVNoZWV0Ki8p
Citib29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldEN1c3RvbVByb3BlcnR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
U3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBTZXR0aW5n
IHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1vdmVzIHRoZSBwcm9wZXJ0eSBp
biBib3RoIElFIGFuZCBHZWNrby4KICAgICAvLyBTZXR0aW5nIGl0IHRvIG51bGwgc2VlbXMgdG8g
cHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdlIHRyZWF0IGl0IGp1c3QgdGhl
IHNhbWUuCkBAIC03MzcsMTAgKzczNyw3IEBAIGJvb2wgTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
c2V0Q3VzdG9tUHIKIAogICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5
IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0Lgog
ICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5kIE1TSUUgbW92ZXMgdGhl
IHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5
VmFsdWU+IGN1c3RvbVZhbHVlID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKHByb3Bl
cnR5TmFtZSwgdmFsdWUpOwotICAgIGFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KENTU1By
b3BlcnR5Q3VzdG9tLCBjdXN0b21WYWx1ZSwgaW1wb3J0YW50KSk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VDdXN0b21Qcm9wZXJ0eVZhbHVlKHRo
aXMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGltcG9ydGFudCwgY3NzUGFyc2VyTW9kZSgpLCBjb250
ZXh0U3R5bGVTaGVldCkgPT0gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZDsKIH0KIAog
dm9pZCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBycFZhbHVlLCBib29sIGltcG9ydGFudCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE5MDIwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkwMSw3ICsxOTAxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1BybwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewogICAgICAgICBD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9ICZkb3duY2FzdDxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWUpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXN0
b21Qcm9wZXJ0eVZhbHVlKGN1c3RvbVByb3BlcnR5LT5uYW1lKCksIGN1c3RvbVByb3BlcnR5LT52
YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShj
dXN0b21Qcm9wZXJ0eS0+bmFtZSgpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShy
ZXZpc2lvbiAxOTAyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDEwICs1MTMsMTAgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgUHNldWRvU3R5bGVDYWNoZSogY2FjaGVkUHNldWRvU3R5bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRQc2V1ZG9TdHlsZXMuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0Q3VzdG9t
UHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpIHsgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fY3VzdG9tUHJvcGVydGllcy5hY2Nl
c3MoKS0+c2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCB2YWx1ZSk7IH0KLSAgICBTdHJpbmcg
Z2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsg
cmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmdldEN1c3RvbVBy
b3BlcnR5VmFsdWUobmFtZSk7IH0KKyAgICB2b2lkIHNldEN1c3RvbVByb3BlcnR5VmFsdWUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZSkgeyBy
YXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9jdXN0b21Qcm9wZXJ0aWVzLmFjY2VzcygpLT5z
ZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHZhbHVlKTsgfQorICAgIFJlZlB0cjxDU1NWYWx1
ZT4gZ2V0Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5tX2N1c3RvbVByb3BlcnRpZXMtPmdldEN1c3Rv
bVByb3BlcnR5VmFsdWUobmFtZSk7IH0KICAgICBib29sIGhhc0N1c3RvbVByb3BlcnR5KGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPm1f
Y3VzdG9tUHJvcGVydGllcy0+aGFzQ3VzdG9tUHJvcGVydHkobmFtZSk7IH0KLSAgICBjb25zdCBI
YXNoTWFwPEF0b21pY1N0cmluZywgU3RyaW5nPiogY3VzdG9tUHJvcGVydGllcygpIGNvbnN0IHsg
cmV0dXJuICYocmFyZUluaGVyaXRlZERhdGEtPm1fY3VzdG9tUHJvcGVydGllcy0+bV92YWx1ZXMp
OyB9CisgICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxDU1NWYWx1ZT4+KiBj
dXN0b21Qcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gJihyYXJlSW5oZXJpdGVkRGF0YS0+bV9j
dXN0b21Qcm9wZXJ0aWVzLT5tX3ZhbHVlcyk7IH0KIAogICAgIHZvaWQgc2V0SGFzVmlld3BvcnRV
bml0cyhib29sIGhhc1ZpZXdwb3J0VW5pdHMgPSB0cnVlKSB7IG5vbmluaGVyaXRlZF9mbGFncy5z
ZXRIYXNWaWV3cG9ydFVuaXRzKGhhc1ZpZXdwb3J0VW5pdHMpOyB9CiAgICAgYm9vbCBoYXNWaWV3
cG9ydFVuaXRzKCkgY29uc3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLmhhc1ZpZXdwb3J0
VW5pdHMoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ3Vz
dG9tUHJvcGVydHlEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlQ3VzdG9tUHJvcGVydHlEYXRhLmgJKHJldmlzaW9uIDE5MDIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbVByb3BlcnR5RGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTMgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
SGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU1ZhbHVlOworCiBjbGFz
cyBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlQ3VzdG9t
UHJvcGVydHlEYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdHlsZUN1c3RvbVByb3Bl
cnR5RGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHlsZUN1c3RvbVByb3Bl
cnR5RGF0YSk7IH0KQEAgLTM3LDExICs0MCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0eWxlQ3VzdG9tUHJvcGVydHlEYXRhJiBvKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcyA9PSBvLm1fdmFsdWVzOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ3Vz
dG9tUHJvcGVydHlEYXRhICZvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAgICAg
Ci0gICAgdm9pZCBzZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlcy5zZXQobmFtZSwgdmFsdWUpOyB9Ci0g
ICAgU3RyaW5nIGdldEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5nZXQobmFtZSk7IH0KKyAgICB2b2lkIHNldEN1c3Rv
bVByb3BlcnR5VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8Q1NT
VmFsdWU+JiB2YWx1ZSkgeyBtX3ZhbHVlcy5zZXQobmFtZSwgdmFsdWUpOyB9CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBnZXRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZ2V0KG5hbWUpOyB9CiAgICAgYm9vbCBoYXNDdXN0
b21Qcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmNvbnRhaW5zKG5hbWUpOyB9CiAKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgU3RyaW5n
PiBtX3ZhbHVlczsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU1ZhbHVlPj4g
bV92YWx1ZXM7CiAgICAgCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFN0eWxlQ3VzdG9tUHJvcGVy
dHlEYXRhKCkKQEAgLTQ5LDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB7IH0KICAgICBTdHlsZUN1
c3RvbVByb3BlcnR5RGF0YShjb25zdCBTdHlsZUN1c3RvbVByb3BlcnR5RGF0YSYgb3RoZXIpCiAg
ICAgICAgIDogUmVmQ291bnRlZDxTdHlsZUN1c3RvbVByb3BlcnR5RGF0YT4oKQotICAgICAgICAs
IG1fdmFsdWVzKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBTdHJpbmc+KG90aGVyLm1fdmFsdWVzKSkK
KyAgICAgICAgLCBtX3ZhbHVlcyhIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPENTU1ZhbHVl
Pj4ob3RoZXIubV92YWx1ZXMpKQogICAgIHsgfQogfTsKIAo=
</data>
<flag name="review"
          id="287099"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>