<?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>91046</bug_id>
          
          <creation_ts>2012-07-11 20:55:10 -0700</creation_ts>
          <short_desc>invalidateNodeListsCacheAfterAttributeChanged should dynamically figure out which attribute needs invalidation</short_desc>
          <delta_ts>2012-07-31 05:01:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90326</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>arko</cc>
    
    <cc>d-r</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>s.choi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>667374</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 20:55:10 -0700</bug_when>
    <thetext>Right now invalidateNodeListsCacheAfterAttributeChanged has a hard coded list of attributes to watch out but this is problematic if wanted to also support HTMLCollection here because HTMLCollection depends on more attributes. Also, we currently invalidate node lists when an attribute that&apos;s relevant to any node list type regardless of whether such a node list exists in the document or not. We can do better by remembering which node list types are present in the document, and avoiding the invalidation altogether when some attribute changes and node lists that care about the attribute doesn&apos;t exist in the document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667388</commentid>
    <comment_count>1</comment_count>
      <attachid>151854</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 21:50:48 -0700</bug_when>
    <thetext>Created attachment 151854
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667391</commentid>
    <comment_count>2</comment_count>
      <attachid>151855</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 21:56:52 -0700</bug_when>
    <thetext>Created attachment 151855
Renamed shouldInvalidateNodeList to shouldInvalidateDynamicSubtreeNodeList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667406</commentid>
    <comment_count>3</comment_count>
      <attachid>151859</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 22:35:13 -0700</bug_when>
    <thetext>Created attachment 151859
Fixed a bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667408</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 22:37:52 -0700</bug_when>
    <thetext>This is one of the most important patches in this refactoring effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667415</commentid>
    <comment_count>5</comment_count>
      <attachid>151859</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-11 22:46:10 -0700</bug_when>
    <thetext>Comment on attachment 151859
Fixed a bug

Attachment 151859 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13221081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667421</commentid>
    <comment_count>6</comment_count>
      <attachid>151863</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-11 22:52:29 -0700</bug_when>
    <thetext>Created attachment 151863
Fixed build for microdata</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668158</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-12 13:31:14 -0700</bug_when>
    <thetext>Committed r122498: &lt;http://trac.webkit.org/changeset/122498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678004</commentid>
    <comment_count>8</comment_count>
      <attachid>154342</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-07-25 07:01:36 -0700</bug_when>
    <thetext>Created attachment 154342
backtrace

I&apos;m hitting this assertion when running a internal test suite we have here.

Unfortunately I could not create a test yet that maps exactly what triggers this assertion, but what the test suit does is:

- It has a frameset with two frames, one for the test (A) another one for progress (B).
- Loads a test case on the frame A.
- Does some checks to find out when the test is done on the frame A.
- Manipulates the DOM inside the progress frame B.
- Replaces the src from the frame A with a new test case.
- Looks like the crash happens at the moment the src from frame A is replaced.

I could reproduce the crash on Qt too running the same test suite. Any insight?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678174</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-25 10:05:10 -0700</bug_when>
    <thetext>Please file a new bug instead of commenting here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682933</commentid>
    <comment_count>10</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-07-31 05:01:38 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Please file a new bug instead of commenting here.

Moved to bug 92742.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151854</attachid>
            <date>2012-07-11 21:50:48 -0700</date>
            <delta_ts>2012-07-11 21:56:48 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-91046-20120711215423.patch</filename>
            <type>text/plain</type>
            <size>31431</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA3LTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGludmFsaWRhdGVOb2RlTGlzdHND
YWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCBzaG91bGQgZHluYW1pY2FsbHkgZmlndXJlIG91dCB3
aGljaCBhdHRyaWJ1dGUgbmVlZHMgaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTA0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGFuIGFycmF5IG9mIGNvdW50ZXJzIChtX25v
ZGVMaXN0Q291bnRzKSBmb3IgZWFjaCBzZXQgb2YgYXR0cmlidXRlcyAoTm9kZUxpc3RJbnZhbGlk
YXRpb25UeXBlKSBub2RlIGxpc3RzIGNhcmUgYWJvdXQKKyAgICAgICAgdG8gRG9jdW1lbnQsIGFu
ZCBtYWRlIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QncyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rv
ciBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGVzZSBjb3VudGVycyB2aWEKKyAgICAgICAgcmVn
aXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCByZXNwZWN0aXZlbHkuIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdCwgd2hpY2ggaXMg
Y2FsbGVkCisgICAgICAgIGJ5IGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRl
Q2hhbmdlZCwgdGhlbiB1c2UgdGhlc2UgY291bnRlcnMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBn
aXZlbiBhdHRyaWJ1dGUgY2hhbmdlCisgICAgICAgIHNob3VsZCByZXN1bHQgaW4gbm9kZSBsaXN0
IGludmFsaWRhdGlvbnMuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIG1fbnVtTm9kZUxpc3RDYWNo
ZXMgZnJvbSBUcmVlU2NvcGUgYmVjYXVzZSB0aGlzIGNvdW50ZXIgaGFzIG5vdyBiZWNvbWUgcmVk
dW5kYW50IHdpdGggbV9ub2RlTGlzdENvdW50cy4KKworICAgICAgICAqIGRvbS9DaGlsZE5vZGVM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3Qp
OiBEbyBub3QgaW52YWxpZGF0ZSBvbiBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAgKiBkb20v
Q2xhc3NOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc05vZGVMaXN0OjpDbGFz
c05vZGVMaXN0KTogSW52YWxpZGF0ZSBvbiBjbGFzcyBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3Vt
ZW50KTogSW5pdGlhbGl6ZSBtX25vZGVMaXN0Q291bnRzLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6On5Eb2N1bWVudCk6IEFkZCBhc3NlcnRpb25zIHRvIG1ha2Ugc3VyZSBtX2xpc3RzSW52
YWxpZGF0ZWRBdERvY3VtZW50LCBtX25vZGVMaXN0Q291bnRzLCBhbmQKKyAgICAgICAgbV9jb2xs
ZWN0aW9ucyBhcmUgYWxsIGVtcHR5LgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlZ2lz
dGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6IFRoaXMgZnVuY3Rpb24gaXMgbm93IGNhbGxlZCBm
b3IgYWxsIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RzIHN1cHBvc2VkCisgICAgICAgIHRvIGp1c3Qg
b25lcyByb290ZWQgYXQgdGhlIGRvY3VtZW50IGluIG9yZGVyIHRvIGluY3JlbWVudCB0aGUgY291
bnRlciBmb3IgZWFjaCBpbnZhbGlkYXRpb24gdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0Rm9yVHlwZSk6IENoZWNrcyB0aGUgYXR0
cmlidXRlIG5hbWUgYWdhaW5zdCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0KTogUmV0dXJucyB0cnVl
IGlmIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSBtYXRjaGVzIHRoZSBpbnZhbGlkYXRpb24gdHlw
ZSBvZgorICAgICAgICB0aGUgZXhpc3RpbmcgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgaW4gdGhl
IGRvY3VtZW50LiBJZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgbm90IGdpdmVuICh1c2VkIHdoZW4g
Y2hpbGRyZW4gY2hhbmdlKSwKKyAgICAgICAgdGhlbiBpdCBjaGVja3MgZm9yIHRoZSBleGlzdGVu
Y2Ugb2YgYW55IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3RzLiBDb25jZXB0dWFsbHksIHRoaXMgZnVu
Y3Rpb24gY2FuIGJlIHdyaXR0ZW4gYXMgYSBsaXN0IG9mCisgICAgICAgICJpZiIgc3RhdGVtZW50
cyB0aGF0IGNoZWNrcyB2YWx1ZXMgaW4gbV9ub2RlTGlzdENvdW50cyBhbmQgdGhlIGF0dHJpYnV0
ZSBuYW1lLiBXZSB1c2UgImZvciIgbG9vcCBhbmQgc3dpdGNoIHN0YXRlbWVudCBpbnN0ZWFkCisg
ICAgICAgIHRvIHNoYXJlIGxvZ2ljIGFuZCBkZXRlY3QgZnV0dXJlIGFkZGl0aW9uIG9mIHZhbHVl
cyB0byBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgIChEb2N1bWVudCk6IE1vdmVkIFJvb3RUeXBlIGFuZCBJbnZhbGlkYXRpb25UeXBl
IGZyb20gRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIGFuZCByZW5hbWVkIHRoZW0gdG8gTm9kZUxp
c3RSb290VHlwZSBhbmQKKyAgICAgICAgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHJlc3BlY3Rp
dmVseSBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBuYW1lIGNv
bGxpc2lvbnMuIEFsc28gdGhlIGludmFsaWRhdGlvbiB0eXBlCisgICAgICAgIG5vdyBjb250YWlu
cyA2IHZhbHVlcyBpbnN0ZWFkIG9mIDIuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2Rl
TGlzdENhY2hlQmFzZSk6IAorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVC
YXNlOjpzaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpyb290VHlwZSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjppbnZhbGlkYXRpb25UeXBlKTogQWRk
ZWQuCisgICAgICAgIChEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOiBVc2VzIDMgYml0cyB0byBz
dG9yZSBpbnZhbGlkYXRpb24gdHlwZSBub3cgdGhhdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBoYXZl
IGluY3JlYXNlZCBmcm9tIDIgdG8gNi4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlz
dDo6RHluYW1pY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Q6On5EeW5hbWljU3VidHJlZU5vZGVMaXN0KTogQ2FsbCB1bnJlZ2lzdGVyRHluYW1pY1N1
YnRyZWVOb2RlTGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QpOiBDYWxsIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdC4KKyAgICAgICAgKiBkb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWljcm9EYXRhSXRlbUxpc3Q6Ok1pY3JvRGF0YUl0ZW1MaXN0KTogSW52YWxpZGF0ZSBv
biBpdGVtc2NvcGUsIGl0ZW1wcm9wLCBhbmQgaXRlbXR5cGUgY29udGVudCBhdHRyaWJ1dGUgY2hh
bmdlcy4KKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KTogSW52YWxpZGF0ZSBvbiBuYW1lIGF0dHJpYnV0
ZSBjaGFuZ2VzLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNsZWFyUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKTogUmVwbGFjZWQgdGhlIGhhcmQgY29k
ZWQgY2hlY2sgbGlzdCBvZiBhdHRyaWJ1dGVzLCBieSBhIGNhbGwKKyAgICAgICAgdG8gc2hvdWxk
SW52YWxpZGF0ZU5vZGVMaXN0LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5v
ZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQpOiBDYWxscyBzaG91bGRJbnZhbGlkYXRl
Tm9kZUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmdldEVsZW1lbnRzQnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmdldEVsZW1lbnRzQnlDbGFzc05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmFkaW9Ob2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmNyZWF0ZU5v
ZGVMaXN0cyk6CisgICAgICAgICogZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkb3B0VHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTm9kZUxpc3RzKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6
CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05v
ZGVMaXN0OjpUYWdOb2RlTGlzdCk6IERvIG5vdCBpbnZhbGlkYXRlIG9uIGFueSBhdHRyaWJ1dGUg
Y2hhbmdlcy4KKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZTo6VHJlZVNjb3BlKTogTm8gbG9uZ2VyIGluaXRpYWxpemVzIG1fbnVtTm9kZUxp
c3RDYWNoZXMgc2luY2UgaXQgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgKiBkb20vVHJlZVNj
b3BlLmg6CisgICAgICAgIChUcmVlU2NvcGUpOiBSZW1vdmVkIG1fbnVtTm9kZUxpc3RDYWNoZXMu
CisgICAgICAgICogZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3BlKToKKyAgICAgICAgKiBodG1sL0hU
TUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFz
ZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2UpOiBKdXN0IHBhc3MgaW4gRG9Ob3RJbnZhbGlkYXRl
T25BdHRyaWJ1dGVDaGFuZ2VzIGZvciBub3cgc2luY2UKKyAgICAgICAgaXQncyBuZXZlciB1c2Vk
IGluIEhUTUxDb2xsZWN0aW9ucy4KKyAgICAgICAgKiBodG1sL0xhYmVsYWJsZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxhYmxlRWxlbWVudDo6bGFiZWxzKToKKyAgICAgICAg
KiBodG1sL0xhYmVsc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVM
aXN0OjpMYWJlbHNOb2RlTGlzdCk6IEludmFsaWRhdGUgb24gZm9yIGNvbnRlbnQgYXR0cmlidXRl
IGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVM
aXN0KToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2RlTGlzdCk6IEludmFsaWRhdGUgb24gaWQsIG5hbWUs
IGFuZCBmb3IgY29udGVudCBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJh
ZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKwogMjAxMi0wNy0xMSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIENvbXBpbGF0aW9uIGVy
cm9yIHdpdGggR0xFUzIgd2hlbiB1c2luZyBnbDJleHQuaCBmcm9tIEFOR0xFLgpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQotICAgIDogRHluYW1pY05vZGVMaXN0KG5vZGUsIFJv
b3RlZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpCisgICAgOiBEeW5h
bWljTm9kZUxpc3Qobm9kZSwgTm9kZUxpc3RJc1Jvb3RlZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRl
T25BdHRyaWJ1dGVDaGFuZ2VzKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xh
c3NOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9k
ZUxpc3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCi0gICAgOiBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KHJvb3ROb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9k
ZSwgSW52YWxpZGF0ZU9uQ2xhc3NBdHRyQ2hhbmdlKQogICAgICwgbV9jbGFzc05hbWVzKGNsYXNz
TmFtZXMsIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQogICAgICwgbV9vcmlnaW5hbENsYXNz
TmFtZXMoY2xhc3NOYW1lcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTY0LDcgKzU2NCwxMCBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBLCiAKICAgICBzdGF0aWMgaW50IGRvY0lEID0gMDsKICAgICBtX2RvY0lEID0gZG9j
SUQrKzsKLSAgICAKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKG1fbm9kZUxpc3RDb3VudHMpOyBpKyspCisgICAgICAgIG1fbm9kZUxpc3RDb3VudHNbaV0g
PSAwOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9j
b2xsZWN0aW9ucyk7IGkrKykKICAgICAgICAgbV9jb2xsZWN0aW9uc1tpXSA9IDA7CiAKQEAgLTY0
OCw2ICs2NTEsMTQgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgpCiAgICAgaWYgKGhhc1JhcmVEYXRh
KCkpCiAgICAgICAgIGNsZWFyUmFyZURhdGEoKTsKIAorICAgIEFTU0VSVCghbV9saXN0c0ludmFs
aWRhdGVkQXREb2N1bWVudC5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlzdENvdW50cyk7IGkrKykKKyAgICAgICAgQVNTRVJU
KCFtX25vZGVMaXN0Q291bnRzW2ldKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKG1fY29sbGVjdGlvbnMpOyBpKyspCisgICAgICAgIEFTU0VSVCghbV9j
b2xsZWN0aW9uc1tpXSk7CisKICAgICBtX2RvY3VtZW50ID0gMDsKIAogICAgIEluc3BlY3RvckNv
dW50ZXJzOjpkZWNyZW1lbnRDb3VudGVyKEluc3BlY3RvckNvdW50ZXJzOjpEb2N1bWVudENvdW50
ZXIpOwpAQCAtMzg2NSwxNCArMzg3Niw1MiBAQCB2b2lkIERvY3VtZW50OjpzZXRDU1NUYXJnZXQo
RWxlbWVudCogbikKICAgICAgICAgbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCogbGlzdCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0LCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RU
eXBlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKK3sKKyAgICBt
X25vZGVMaXN0Q291bnRzW2ludmFsaWRhdGlvblR5cGVdKys7CisgICAgaWYgKHJvb3RUeXBlID09
IE5vZGVMaXN0SXNSb290ZWRBdERvY3VtZW50KQorICAgICAgICBtX2xpc3RzSW52YWxpZGF0ZWRB
dERvY3VtZW50LmFkZChsaXN0KTsKK30KKwordm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCwgTm9kZUxpc3RS
b290VHlwZSByb290VHlwZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5
cGUpCit7CisgICAgbV9ub2RlTGlzdENvdW50c1tpbnZhbGlkYXRpb25UeXBlXS0tOworICAgIGlm
IChyb290VHlwZSA9PSBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCkgeworICAgICAgICBBU1NF
UlQobV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5jb250YWlucyhsaXN0KSk7CisgICAgICAg
IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQucmVtb3ZlKGxpc3QpOworICAgIH0KK30KKwor
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RGb3JUeXBl
KE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB0eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKIHsKLSAgICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmFkZChsaXN0KTsKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEludmFsaWRhdGVPbkNsYXNzQXR0ckNoYW5nZToK
KyAgICAgICAgcmV0dXJuIGF0dHJOYW1lID09IGNsYXNzQXR0cjsKKyAgICBjYXNlIEludmFsaWRh
dGVPbk5hbWVBdHRyQ2hhbmdlOgorICAgICAgICByZXR1cm4gYXR0ck5hbWUgPT0gbmFtZUF0dHI7
CisgICAgY2FzZSBJbnZhbGlkYXRlT25Gb3JBdHRyQ2hhbmdlOgorICAgICAgICByZXR1cm4gYXR0
ck5hbWUgPT0gZm9yQXR0cjsKKyAgICBjYXNlIEludmFsaWRhdGVPbklkTmFtZUZvckF0dHJDaGFu
Z2U6CisgICAgICAgIHJldHVybiBhdHRyTmFtZSA9PSBuYW1lQXR0ciB8fCBhdHRyTmFtZSA9PSBp
ZEF0dHIgfHwgYXR0ck5hbWUgPT0gZm9yQXR0cjsKKyAgICBjYXNlIEludmFsaWRhdGVPbkl0ZW1B
dHRyQ2hhbmdlOgorI2lmIEVOQUJMRShNSUNST0RBVEEpCisgICAgICAgIHJldHVybiBhdHRyTmFt
ZSA9PSBpdGVtc2NvcGVBdHRyIHx8IGF0dHJOYW1lID09IGl0ZW1wcm9wQXR0ciB8fCBhdHRyTmFt
ZSA9PSBpdGVtdHlwZUF0dHI7CisjZW5kaWYgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2gK
KyAgICBjYXNlIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlczoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQorYm9vbCBEb2N1bWVudDo6c2hv
dWxkSW52YWxpZGF0ZU5vZGVMaXN0KGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKSBjb25z
dAogewotICAgIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQucmVtb3ZlKGxpc3QpOworICAg
IGZvciAoaW50IHR5cGUgPSBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXMgKyAxOyB0
eXBlIDwgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlczsgdHlwZSsrKSB7CisgICAgICAgIGlm
IChtX25vZGVMaXN0Q291bnRzW3R5cGVdICYmICghYXR0ck5hbWUgfHwgc2hvdWxkSW52YWxpZGF0
ZU5vZGVMaXN0Rm9yVHlwZShzdGF0aWNfY2FzdDxOb2RlTGlzdEludmFsaWRhdGlvblR5cGU+KHR5
cGUpLCAqYXR0ck5hbWUpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBEb2N1bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hlcygp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYsMjEgQEAg
ZW51bSBQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2UgewogCiBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRh
dGVGbGFnIHsgUmVjYWxjU3R5bGVJbW1lZGlhdGVseSwgRGVmZXJSZWNhbGNTdHlsZSwgUmVjYWxj
U3R5bGVJZk5lZWRlZCB9OwogCitlbnVtIE5vZGVMaXN0Um9vdFR5cGUgeworICAgIE5vZGVMaXN0
SXNSb290ZWRBdE5vZGUsCisgICAgTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQsCit9OworCitl
bnVtIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7CisgICAgRG9Ob3RJbnZhbGlkYXRlT25BdHRy
aWJ1dGVDaGFuZ2VzID0gMCwKKyAgICBJbnZhbGlkYXRlT25DbGFzc0F0dHJDaGFuZ2UsCisgICAg
SW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2UsCisgICAgSW52YWxpZGF0ZU9uRm9yQXR0ckNoYW5n
ZSwKKyAgICBJbnZhbGlkYXRlT25JZE5hbWVGb3JBdHRyQ2hhbmdlLAorICAgIEludmFsaWRhdGVP
bkl0ZW1BdHRyQ2hhbmdlLAorfTsKK2NvbnN0IGludCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5
cGVzID0gSW52YWxpZGF0ZU9uSXRlbUF0dHJDaGFuZ2UgKyAxOworCiBjbGFzcyBEb2N1bWVudCA6
IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCkKQEAgLTcyMyw4ICs3MzgsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1BlbmRpbmdTdHlsZVJlY2FsYygpIGNvbnN0OwogICAgIHZv
aWQgc3R5bGVSZWNhbGNUaW1lckZpcmVkKFRpbWVyPERvY3VtZW50PiopOwogCi0gICAgdm9pZCBy
ZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOwot
ICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QqLCBOb2RlTGlzdFJvb3RUeXBlLCBOb2RlTGlzdEludmFsaWRhdGlv
blR5cGUpOworICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCosIE5vZGVMaXN0Um9vdFR5cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9u
VHlwZSk7CisgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3QoY29uc3QgUXVhbGlmaWVk
TmFtZSogYXR0ck5hbWUpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJOb2RlTGlzdENhY2hlcygpOwog
CiAgICAgdm9pZCBhdHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkBAIC0xNDA5LDYg
KzE0MjUsNyBAQCBwcml2YXRlOgogICAgIEluaGVyaXRlZEJvb2wgbV9kZXNpZ25Nb2RlOwogCiAg
ICAgSGFzaFNldDxEeW5hbWljU3VidHJlZU5vZGVMaXN0Kj4gbV9saXN0c0ludmFsaWRhdGVkQXRE
b2N1bWVudDsKKyAgICB1bnNpZ25lZCBtX25vZGVMaXN0Q291bnRzW251bU5vZGVMaXN0SW52YWxp
ZGF0aW9uVHlwZXNdOwogCiAgICAgSFRNTENvbGxlY3Rpb24qIG1fY29sbGVjdGlvbnNbTnVtVW5u
YW1lZERvY3VtZW50Q2FjaGVkVHlwZXNdOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIEhUTUxOYW1lQ29sbGVjdGlvbio+IE5hbWVkQ29sbGVjdGlvbk1hcDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTAgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EeW5hbWljU3VidHJlZU5vZGVM
aXN0Ojp+RHluYW1pY1N1YnRyZWVOb2RlTGlzdCgpCi17Ci19Ci0KIHVuc2lnbmVkIER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVW
YWxpZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24g
MTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwyNiArMzYsMTkgQEAgY2xhc3MgTm9kZTsKIAogY2xhc3MgRHluYW1pY05v
ZGVMaXN0Q2FjaGVCYXNlIHsKIHB1YmxpYzoKLSAgICBlbnVtIFJvb3RUeXBlIHsKLSAgICAgICAg
Um9vdGVkQXROb2RlLAotICAgICAgICBSb290ZWRBdERvY3VtZW50LAotICAgIH07Ci0KLSAgICBl
bnVtIEludmFsaWRhdGlvblR5cGUgewotICAgICAgICBBbHdheXNJbnZhbGlkYXRlLAotICAgICAg
ICBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSwKLSAgICB9OwotCi0gICAgRHluYW1p
Y05vZGVMaXN0Q2FjaGVCYXNlKFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRpb25UeXBlIGlu
dmFsaWRhdGlvblR5cGUpCi0gICAgICAgIDogbV9yb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09
IFJvb3RlZEF0RG9jdW1lbnQpCi0gICAgICAgICwgbV9zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1
dGVDaGFuZ2UoaW52YWxpZGF0aW9uVHlwZSA9PSBBbHdheXNJbnZhbGlkYXRlKQorICAgIER5bmFt
aWNOb2RlTGlzdENhY2hlQmFzZShOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlzdElu
dmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKKyAgICAgICAgOiBtX3Jvb3RlZEF0RG9j
dW1lbnQocm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQpCisgICAgICAgICwg
bV9pbnZhbGlkYXRpb25UeXBlKGludmFsaWRhdGlvblR5cGUpCiAgICAgeworICAgICAgICBBU1NF
UlQobV9pbnZhbGlkYXRpb25UeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnZhbGlkYXRp
b25UeXBlKSk7CiAgICAgICAgIGNsZWFyQ2FjaGUoKTsKICAgICB9CiAKIHB1YmxpYzoKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNSb290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9y
b290ZWRBdERvY3VtZW50OyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkSW52YWxpZGF0ZU9u
QXR0cmlidXRlQ2hhbmdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW52YWxpZGF0aW9uVHlwZSAh
PSBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXM7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUoKSB7IHJldHVybiBtX3Jvb3RlZEF0RG9jdW1lbnQg
PyBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCA6IE5vZGVMaXN0SXNSb290ZWRBdE5vZGU7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25U
eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBl
PihtX2ludmFsaWRhdGlvblR5cGUpOyB9CiAKIHByb3RlY3RlZDoKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtQ2FjaGVWYWxp
ZDsgfQpAQCAtOTIsNyArODUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRnJvbSBEeW5hbWljTm9k
ZUxpc3QKICAgICBjb25zdCB1bnNpZ25lZCBtX3Jvb3RlZEF0RG9jdW1lbnQgOiAxOwotICAgIGNv
bnN0IHVuc2lnbmVkIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlIDogMTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBtX2ludmFsaWRhdGlvblR5cGUgOiAzOwogfTsKIAogY2xhc3MgRHlu
YW1pY05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0LCBwdWJsaWMgRHluYW1pY05vZGVMaXN0Q2Fj
aGVCYXNlIHsKQEAgLTEwNiw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgTGFiZWxzTm9kZUxp
c3RUeXBlLAogICAgICAgICBNaWNyb0RhdGFJdGVtTGlzdFR5cGUsCiAgICAgfTsKLSAgICBEeW5h
bWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBvd25lck5vZGUsIFJvb3RUeXBlIHJvb3RUeXBl
LCBJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUpCisgICAgRHluYW1pY05vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gb3duZXJOb2RlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBO
b2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKICAgICAgICAgOiBEeW5h
bWljTm9kZUxpc3RDYWNoZUJhc2Uocm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUpCiAgICAgICAg
ICwgbV9vd25lck5vZGUob3duZXJOb2RlKQogICAgIHsgfQpAQCAtMTM4LDE0ICsxMzEsMTkgQEAg
cHJpdmF0ZToKIAogY2xhc3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWlj
Tm9kZUxpc3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
KTsKKyAgICB2aXJ0dWFsIH5EeW5hbWljU3VidHJlZU5vZGVMaXN0KCkKKyAgICB7CisgICAgICAg
IGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMsIHJvb3RU
eXBlKCksIGludmFsaWRhdGlvblR5cGUoKSk7CisgICAgfQogICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCBPVkVSUklERTsKIAogcHJvdGVjdGVkOgotICAgIER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSByb290VHlwZSA9IFJvb3Rl
ZEF0Tm9kZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlID0gQWx3YXlzSW52YWxp
ZGF0ZSkKKyAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwg
Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUsIE5vZGVMaXN0Um9vdFR5
cGUgcm9vdFR5cGUgPSBOb2RlTGlzdElzUm9vdGVkQXROb2RlKQogICAgICAgICA6IER5bmFtaWNO
b2RlTGlzdChub2RlLCByb290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKLSAgICB7IH0KKyAgICB7
CisgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlz
LCByb290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIE5v
ZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQs
IGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01p
Y3JvRGF0YUl0ZW1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWlj
cm9EYXRhSXRlbUxpc3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTWljcm9EYXRhSXRlbUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
IGNvbnN0IFN0cmluZyYgTWljcm9EYXRhSXRlbUxpc3Q6OnVuZGVmaW4KIH0KIAogTWljcm9EYXRh
SXRlbUxpc3Q6Ok1pY3JvRGF0YUl0ZW1MaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNv
bnN0IFN0cmluZyYgdHlwZU5hbWVzKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290
Tm9kZSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIEludmFsaWRhdGVP
bkl0ZW1BdHRyQ2hhbmdlKQogICAgICwgbV90eXBlTmFtZXModHlwZU5hbWVzLCBkb2N1bWVudCgp
LT5pblF1aXJrc01vZGUoKSkKICAgICAsIG1fb3JpZ2luYWxUeXBlTmFtZXModHlwZU5hbWVzKQog
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjM4NykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIE5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Qocm9vdE5vZGUpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBJ
bnZhbGlkYXRlT25OYW1lQXR0ckNoYW5nZSkKICAgICAsIG1fbmFtZShuYW1lKQogewogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksOCArNDg5LDYgQEAgT3duUHRyPE5vZGVS
YXJlRGF0YT4gTm9kZTo6Y3JlYXRlUmFyZURhdAogdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkK
IHsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgaWYgKHRyZWVTY29wZSgpICYmIHJh
cmVEYXRhKCktPm5vZGVMaXN0cygpKQotICAgICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxp
c3RDYWNoZSgpOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBBU1NFUlQo
IXRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHx8IHRyYW5zaWVudE11dGF0aW9u
T2JzZXJ2ZXJSZWdpc3RyeSgpLT5pc0VtcHR5KCkpOwpAQCAtOTY1LDI4ICs5NjMsMTEgQEAgdm9p
ZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlcgogICAgIGlmICghYXR0cmlidXRl
T3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogTW92ZSB0aGUg
bGlzdCBvZiBhdHRyaWJ1dGVzIGVhY2ggTm9kZUxpc3QgdHlwZSBjYXJlcyBhYm91dCB0byBiZSBh
IHN0YXRpYyBvbiB0aGUKLSAgICAvLyBhcHByb3ByaWF0ZSBOb2RlTGlzdCBjbGFzcy4gVGhlbiB1
c2UgdGhvc2UgbGlzdHMgaGVyZSBhbmQgaW4gaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0
dHJpYnV0ZXMKLSAgICAvLyB0byBvbmx5IGludmFsaWRhdGUgdGhlIGNhY2hlIHR5cGVzIHRoYXQg
ZGVwZW5kIG9uIHRoZSBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkLgotICAgIC8vIEZJWE1FOiBLZWVw
IHRyYWNrIG9mIHdoZW4gd2UgaGF2ZSBubyBjYWNoZXMgb2YgYSBnaXZlbiB0eXBlIHNvIHRoYXQg
d2UgY2FuIGF2b2lkIHRoZSBmb3ItbG9vcAotICAgIC8vIGJlbG93IGV2ZW4gaWYgYSByZWxhdGVk
IGF0dHJpYnV0ZSBjaGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFkaW9Ob2RlTGlzdHMsIHdl
IGRvbid0IG5lZWQKLSAgICAvLyB0byBpbnZhbGlkYXRlIGFueSBjYWNoZXMgd2hlbiBpZCBhdHRy
aWJ1dGVzIGNoYW5nZS4pCi0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgotI2lmIEVOQUJM
RShNSUNST0RBVEEpCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0dHIKLSAgICAg
ICAgJiYgYXR0ck5hbWUgIT0gaXRlbXByb3BBdHRyCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0
ZW10eXBlQXR0cgotI2VuZGlmCi0gICAgICAgICYmIGF0dHJOYW1lICE9IG5hbWVBdHRyCi0gICAg
ICAgICYmIGF0dHJOYW1lICE9IGZvckF0dHIKLSAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0
ciB8fCAhYXR0cmlidXRlT3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKKyAg
ICBpZiAoIWRvY3VtZW50KCktPnNob3VsZEludmFsaWRhdGVOb2RlTGlzdCgmYXR0ck5hbWUpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBkb2N1bWVudCgpLT5jbGVhck5vZGVMaXN0Q2FjaGVzKCk7
CiAKLSAgICBpZiAoIXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzID09IG5vZGUgfHwgIW5vZGUtPmlz
QXR0cmlidXRlTm9kZSgpKTsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQpAQCAt
MTAwNCwxMSArOTg1LDExIEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0
ZXIKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGls
ZE5vZGVMaXN0Q2FjaGUoKTsKIAotICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMo
KTsKLQotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCisgICAgaWYg
KCFkb2N1bWVudCgpLT5zaG91bGRJbnZhbGlkYXRlTm9kZUxpc3QoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygpOworCiAgICAgZm9yIChO
b2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTE1NjMsOCArMTU0NCw4IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRz
QnkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0
aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFnTm9kZUxpc3Q+KHRoaXMsIER5bmFt
aWNOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwotICAgIHJldHVybiBlbnN1
cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05h
bWU8VGFnTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBs
b2NhbE5hbWUpOworICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxp
c3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5h
bWljTm9kZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gZW5z
dXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8
VGFnTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBsb2Nh
bE5hbWUpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5VGFn
TmFtZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSkKQEAgLTE1NzUsMjMgKzE1NTYsMjMgQEAgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gc3RhckF0b20p
CiAgICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZShsb2NhbE5hbWUpOwogCi0gICAg
cmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVX
aXRoUXVhbGlmaWVkTmFtZSh0aGlzLCBuYW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20g
OiBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhRdWFsaWZpZWROYW1lKHRoaXMsIG5hbWVz
cGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRvbSA6IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsK
IH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUoY29uc3Qg
U3RyaW5nJiBlbGVtZW50TmFtZSkKIHsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPE5hbWVOb2RlTGlzdD4o
dGhpcywgRHluYW1pY05vZGVMaXN0OjpOYW1lTm9kZUxpc3RUeXBlLCBlbGVtZW50TmFtZSk7Cisg
ICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdp
dGhBdG9taWNOYW1lPE5hbWVOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpOYW1lTm9k
ZUxpc3RUeXBlLCBlbGVtZW50TmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQogewotICAg
IHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hl
V2l0aE5hbWU8Q2xhc3NOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpDbGFzc05vZGVM
aXN0VHlwZSwgY2xhc3NOYW1lcyk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhOYW1lPENsYXNzTm9kZUxpc3Q+KHRoaXMsIER5bmFt
aWNOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdFR5cGUsIGNsYXNzTmFtZXMpOwogfQogCiBQYXNzUmVm
UHRyPFJhZGlvTm9kZUxpc3Q+IE5vZGU6OnJhZGlvTm9kZUxpc3QoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGhhc1RhZ05hbWUo
ZmllbGRzZXRUYWcpKTsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxp
c3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxpc3Q+KHRoaXMsIER5
bmFtaWNOb2RlTGlzdDo6UmFkaW9Ob2RlTGlzdFR5cGUsIG5hbWUpOworICAgIHJldHVybiBlbnN1
cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxS
YWRpb05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBu
YW1lKTsKIH0KIAogUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0
IEF0b21pY1N0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTI3ODAsMTIg
KzI3NjEsOSBAQCB2b2lkIE5vZGU6OnNldEl0ZW1UeXBlKGNvbnN0IFN0cmluZyYgdmFsCiAKICNl
bmRpZgogCi12b2lkIE5vZGVSYXJlRGF0YTo6Y3JlYXRlTm9kZUxpc3RzKE5vZGUqIG5vZGUpCit2
b2lkIE5vZGVSYXJlRGF0YTo6Y3JlYXRlTm9kZUxpc3RzKCkKIHsKLSAgICBBU1NFUlQobm9kZSk7
CiAgICAgc2V0Tm9kZUxpc3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgaWYg
KFRyZWVTY29wZSogdHJlZVNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCkpCi0gICAgICAgIHRyZWVT
Y29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogfQogCiB2b2lkIE5vZGVSYXJlRGF0YTo6Y2xlYXJD
aGlsZE5vZGVMaXN0Q2FjaGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2
aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9h
dG9taWNOYW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX25hbWVDYWNoZXMuaXNFbXB0eSgpICYmIG1f
dGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1wdHkoKTsKICAgICB9CiAKLSAgICB2b2lkIGFkb3B0VHJl
ZVNjb3BlKFRyZWVTY29wZSogb2xkVHJlZVNjb3BlLCBUcmVlU2NvcGUqIG5ld1RyZWVTY29wZSwg
RG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCisgICAgdm9pZCBh
ZG9wdFRyZWVTY29wZShEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVu
dCkKICAgICB7CiAgICAgICAgIGludmFsaWRhdGVDYWNoZXMoKTsKIApAQCAtMTM4LDggKzEzOCw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAoTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IGF0
b21pY05hbWVDYWNoZUVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QqIGxpc3QgPSBpdC0+c2Vjb25kOwogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5p
c1Jvb3RlZEF0RG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+
dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Cisg
ICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChsaXN0LCBsaXN0LT5yb290VHlwZSgpLCBsaXN0LT5pbnZhbGlkYXRpb25UeXBlKCkp
OworICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KGxpc3QsIGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5cGUo
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNDcsMTUgKzE0Nywx
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7
ICsraXQpIHsKICAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0g
aXQtPnNlY29uZDsKICAgICAgICAgICAgICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KGxpc3QpOwotICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOworICAgICAgICAgICAgICAgICAg
ICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCwgbGlz
dC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxpZGF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0LCBs
aXN0LT5yb290VHlwZSgpLCBsaXN0LT5pbnZhbGlkYXRpb25UeXBlKCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGlmIChvbGRUcmVlU2Nv
cGUpCi0gICAgICAgICAgICBvbGRUcmVlU2NvcGUtPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKLSAg
ICAgICAgbmV3VHJlZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtMjE1LDEwICsyMTEsMTAgQEAgcHVibGljOiAgICAKICAgICB2b2lkIGNsZWFyTm9kZUxp
c3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigpOyB9CiAgICAgdm9pZCBzZXROb2RlTGlzdHMoUGFz
c093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbGlzdHMpIHsgbV9ub2RlTGlzdHMgPSBsaXN0czsg
fQogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMoKSBjb25zdCB7IHJldHVybiBtX25v
ZGVMaXN0cy5nZXQoKTsgfQotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1cmVOb2RlTGlzdHMo
Tm9kZSogbm9kZSkKKyAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxpc3RzKCkKICAg
ICB7CiAgICAgICAgIGlmICghbV9ub2RlTGlzdHMpCi0gICAgICAgICAgICBjcmVhdGVOb2RlTGlz
dHMobm9kZSk7CisgICAgICAgICAgICBjcmVhdGVOb2RlTGlzdHMoKTsKICAgICAgICAgcmV0dXJu
IG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KICAgICB2b2lkIGNsZWFyQ2hpbGROb2RlTGlzdENh
Y2hlKCk7CkBAIC0zNDAsNyArMzM2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0TmVlZHNG
b2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2goYm9vbCBuZWVkcykgeyBtX25lZWRz
Rm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoID0gbmVlZHM7IH0KIAogcHJpdmF0
ZToKLSAgICB2b2lkIGNyZWF0ZU5vZGVMaXN0cyhOb2RlKik7CisgICAgdm9pZCBjcmVhdGVOb2Rl
TGlzdHMoKTsKIAogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7CiAgICAgT3duUHRyPE5vZGVM
aXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdO
b2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0
LmNwcAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBUYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSwgUm9vdGVkQXRO
b2RlLCBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSkKKyAgICA6IER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Qocm9vdE5vZGUsIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykK
ICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1fbG9jYWxOYW1lKGxv
Y2FsTmFtZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZpc2lvbiAxMjIz
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogVHJlZVNjb3BlOjpU
cmVlU2NvcGUoQ29udGFpbmVyTm9kZSogcm9vdE5vZGUpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQogICAgICwgbV9wYXJlbnRUcmVlU2NvcGUoMCkKLSAgICAsIG1fbnVtTm9kZUxpc3RDYWNo
ZXMoMCkKIHsKICAgICBBU1NFUlQocm9vdE5vZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGUuaAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMCArNjEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCopOwogICAgIEhUTUxNYXBFbGVtZW50KiBnZXRJbWFn
ZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZE5vZGVMaXN0Q2Fj
aGUoKSB7ICsrbV9udW1Ob2RlTGlzdENhY2hlczsgfQotICAgIHZvaWQgcmVtb3ZlTm9kZUxpc3RD
YWNoZSgpIHsgQVNTRVJUKG1fbnVtTm9kZUxpc3RDYWNoZXMgPiAwKTsgLS1tX251bU5vZGVMaXN0
Q2FjaGVzOyB9Ci0gICAgYm9vbCBoYXNOb2RlTGlzdENhY2hlcygpIGNvbnN0IHsgcmV0dXJuIG1f
bnVtTm9kZUxpc3RDYWNoZXM7IH0KLQogICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCkg
Y29uc3Q7CiAKICAgICAvLyBGaW5kIGZpcnN0IGFuY2hvciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpA
QCAtOTUsOCArOTEsNiBAQCBwcml2YXRlOgogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2VsZW1l
bnRzQnlJZDsKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNCeU5hbWU7CiAKLSAg
ICB1bnNpZ25lZCBtX251bU5vZGVMaXN0Q2FjaGVzOwotCiAgICAgbXV0YWJsZSBSZWZQdHI8RE9N
U2VsZWN0aW9uPiBtX3NlbGVjdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCB2
b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAgICAgZm9yIChOb2RlKiBu
b2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsK
ICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnNldFRyZWVTY29wZShuZXdE
b2N1bWVudCA9PSBtX25ld1Njb3BlID8gMCA6IG1fbmV3U2NvcGUpOwogICAgICAgICBpZiAocmFy
ZURhdGEgJiYgcmFyZURhdGEtPm5vZGVMaXN0cygpKQotICAgICAgICAgICAgcmFyZURhdGEtPm5v
ZGVMaXN0cygpLT5hZG9wdFRyZWVTY29wZShtX29sZFNjb3BlLCBtX25ld1Njb3BlLCBvbGREb2N1
bWVudCwgbmV3RG9jdW1lbnQpOworICAgICAgICAgICAgcmFyZURhdGEtPm5vZGVMaXN0cygpLT5h
ZG9wdFRyZWVTY29wZShvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogCiAgICAgICAgIGlmICh3
aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAgICAgICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQo
bm9kZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBO
b2RlTGlzdDsKIGNsYXNzIEhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlIDogcHVibGljIER5bmFtaWNO
b2RlTGlzdENhY2hlQmFzZSB7CiBwdWJsaWM6CiAgICAgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2Uo
Q29sbGVjdGlvblR5cGUgdHlwZSwgYm9vbCBpbmNsdWRlQ2hpbGRyZW4pCi0gICAgICAgIDogRHlu
YW1pY05vZGVMaXN0Q2FjaGVCYXNlKFJvb3RlZEF0Tm9kZSwgQWx3YXlzSW52YWxpZGF0ZSkgLy8g
VGhlc2UgdHdvIGZsYWdzIGFyZSBuZXZlciB1c2VkCisgICAgICAgIDogRHluYW1pY05vZGVMaXN0
Q2FjaGVCYXNlKE5vZGVMaXN0SXNSb290ZWRBdE5vZGUsIERvTm90SW52YWxpZGF0ZU9uQXR0cmli
dXRlQ2hhbmdlcykgLy8gVGhlc2UgdHdvIGZsYWdzIGFyZSBuZXZlciB1c2VkCiAgICAgICAgICwg
bV9jYWNoZWRFbGVtZW50c0FycmF5T2Zmc2V0KDApCiAgICAgICAgICwgbV9jYWNoZVRyZWVWZXJz
aW9uKDApCiAgICAgICAgICwgbV9oYXNOYW1lQ2FjaGUoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDcgKzQ3LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTGFiZWxhYmxlRWxlbWVudDo6bAogICAg
IGlmICghZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gZW5zdXJl
UmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1l
PExhYmVsc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0VHlw
ZSwgc3RhckF0b20pOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlz
dHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxMYWJlbHNOb2RlTGlzdD4odGhpcywgRHluYW1p
Y05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdFR5cGUsIHN0YXJBdG9tKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViY29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJ
KHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNSArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05v
ZGVMaXN0KE5vZGUqIGZvck5vZGUpCi0gICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KGZvck5v
ZGUsIFJvb3RlZEF0RG9jdW1lbnQpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KGZvck5v
ZGUsIEludmFsaWRhdGVPbkZvckF0dHJDaGFuZ2UsIE5vZGVMaXN0SXNSb290ZWRBdERvY3VtZW50
KQogewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlz
KTsKIH0KIAogTGFiZWxzTm9kZUxpc3Q6On5MYWJlbHNOb2RlTGlzdCgpCiB7CiAgICAgb3duZXJO
b2RlKCktPm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIER5bmFt
aWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7Ci0gICAgZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9IAogICAgIAogYm9v
bCBMYWJlbHNOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjM4NykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDE2ICszOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCiBSYWRpb05vZGVMaXN0OjpSYWRpb05vZGVMaXN0KE5vZGUqIHJvb3ROb2Rl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCi0gICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0
KHJvb3ROb2RlLCByb290Tm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSA/IFJvb3RlZEF0RG9jdW1l
bnQgOiBSb290ZWRBdE5vZGUpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2Rl
LCBJbnZhbGlkYXRlT25JZE5hbWVGb3JBdHRyQ2hhbmdlLCByb290Tm9kZS0+aGFzVGFnTmFtZShm
b3JtVGFnKSA/IE5vZGVMaXN0SXNSb290ZWRBdERvY3VtZW50IDogTm9kZUxpc3RJc1Jvb3RlZEF0
Tm9kZSkKICAgICAsIG1fbmFtZShuYW1lKQogewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogUmFkaW9Ob2RlTGlzdDo6flJhZGlvTm9k
ZUxpc3QoKQogewogICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRo
QXRvbWljTmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBtX25h
bWUpOwotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRo
aXMpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRvUmFkaW9CdXR0b25J
bnB1dEVsZW1lbnQoTm9kZSogbm9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151855</attachid>
            <date>2012-07-11 21:56:52 -0700</date>
            <delta_ts>2012-07-11 21:59:37 -0700</delta_ts>
            <desc>Renamed shouldInvalidateNodeList to shouldInvalidateDynamicSubtreeNodeList</desc>
            <filename>bug-91046-20120711220028.patch</filename>
            <type>text/plain</type>
            <size>31561</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEyLTA3LTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGludmFsaWRhdGVOb2RlTGlzdHND
YWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCBzaG91bGQgZHluYW1pY2FsbHkgZmlndXJlIG91dCB3
aGljaCBhdHRyaWJ1dGUgbmVlZHMgaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTA0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGFuIGFycmF5IG9mIGNvdW50ZXJzIChtX25v
ZGVMaXN0Q291bnRzKSBmb3IgZWFjaCBzZXQgb2YgYXR0cmlidXRlcyAoTm9kZUxpc3RJbnZhbGlk
YXRpb25UeXBlKSBub2RlIGxpc3RzIGNhcmUgYWJvdXQKKyAgICAgICAgdG8gRG9jdW1lbnQsIGFu
ZCBtYWRlIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QncyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rv
ciBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGVzZSBjb3VudGVycyB2aWEKKyAgICAgICAgcmVn
aXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCByZXNwZWN0aXZlbHkuIHNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVM
aXN0LAorICAgICAgICB3aGljaCBpcyBjYWxsZWQgYnkgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkLCB0aGVuIHVzZSB0aGVzZSBjb3VudGVycyB0byBkZXRlcm1p
bmUgd2hldGhlciBhIGdpdmVuCisgICAgICAgIGF0dHJpYnV0ZSBjaGFuZ2Ugc2hvdWxkIHJlc3Vs
dCBpbiBub2RlIGxpc3QgaW52YWxpZGF0aW9ucy4KKworICAgICAgICBBbHNvIHJlbW92ZWQgbV9u
dW1Ob2RlTGlzdENhY2hlcyBmcm9tIFRyZWVTY29wZSBiZWNhdXNlIHRoaXMgY291bnRlciBoYXMg
bm93IGJlY29tZSByZWR1bmRhbnQgd2l0aCBtX25vZGVMaXN0Q291bnRzLgorCisgICAgICAgICog
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6
Q2hpbGROb2RlTGlzdCk6IERvIG5vdCBpbnZhbGlkYXRlIG9uIGF0dHJpYnV0ZSBjaGFuZ2VzLgor
ICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNz
Tm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QpOiBJbnZhbGlkYXRlIG9uIGNsYXNzIGF0dHJpYnV0ZSBj
aGFuZ2VzLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6RG9jdW1lbnQpOiBJbml0aWFsaXplIG1fbm9kZUxpc3RDb3VudHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KTogQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBz
dXJlIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQsIG1fbm9kZUxpc3RDb3VudHMsIGFuZAor
ICAgICAgICBtX2NvbGxlY3Rpb25zIGFyZSBhbGwgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogVGhpcyBmdW5jdGlvbiBp
cyBub3cgY2FsbGVkIGZvciBhbGwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgc3VwcG9zZWQKKyAg
ICAgICAgdG8ganVzdCBvbmVzIHJvb3RlZCBhdCB0aGUgZG9jdW1lbnQgaW4gb3JkZXIgdG8gaW5j
cmVtZW50IHRoZSBjb3VudGVyIGZvciBlYWNoIGludmFsaWRhdGlvbiB0eXBlLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdEZvclR5cGUpOiBDaGVja3MgdGhlIGF0dHJpYnV0ZSBuYW1lIGFnYWluc3QgTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZEludmFs
aWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBh
dHRyaWJ1dGUgbmFtZSBtYXRjaGVzIHRoZSBpbnZhbGlkYXRpb24KKyAgICAgICAgdHlwZSBvZiB0
aGUgZXhpc3RpbmcgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgaW4gdGhlIGRvY3VtZW50LiBJZiB0
aGUgYXR0cmlidXRlIG5hbWUgaXMgbm90IGdpdmVuICh1c2VkIHdoZW4gY2hpbGRyZW4gY2hhbmdl
KSwKKyAgICAgICAgdGhlbiBpdCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW55IER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3RzLiBDb25jZXB0dWFsbHksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHdy
aXR0ZW4gYXMgYSBsaXN0IG9mCisgICAgICAgICJpZiIgc3RhdGVtZW50cyB0aGF0IGNoZWNrcyB2
YWx1ZXMgaW4gbV9ub2RlTGlzdENvdW50cyBhbmQgdGhlIGF0dHJpYnV0ZSBuYW1lLiBXZSB1c2Ug
ImZvciIgbG9vcCBhbmQgc3dpdGNoIHN0YXRlbWVudCBpbnN0ZWFkCisgICAgICAgIHRvIHNoYXJl
IGxvZ2ljIGFuZCBkZXRlY3QgZnV0dXJlIGFkZGl0aW9uIG9mIHZhbHVlcyB0byBOb2RlTGlzdElu
dmFsaWRhdGlvblR5cGUuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1
bWVudCk6IE1vdmVkIFJvb3RUeXBlIGFuZCBJbnZhbGlkYXRpb25UeXBlIGZyb20gRHluYW1pY05v
ZGVMaXN0Q2FjaGVCYXNlIGFuZCByZW5hbWVkIHRoZW0gdG8gTm9kZUxpc3RSb290VHlwZSBhbmQK
KyAgICAgICAgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHJlc3BlY3RpdmVseSBpbiBvcmRlciB0
byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBuYW1lIGNvbGxpc2lvbnMuIEFsc28g
dGhlIGludmFsaWRhdGlvbiB0eXBlCisgICAgICAgIG5vdyBjb250YWlucyA2IHZhbHVlcyBpbnN0
ZWFkIG9mIDIuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSk6
IAorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91bGRJbnZh
bGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVM
aXN0Q2FjaGVCYXNlOjpyb290VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y05vZGVMaXN0Q2FjaGVCYXNlOjppbnZhbGlkYXRpb25UeXBlKTogQWRkZWQuCisgICAgICAgIChE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOiBVc2VzIDMgYml0cyB0byBzdG9yZSBpbnZhbGlkYXRp
b24gdHlwZSBub3cgdGhhdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBoYXZlIGluY3JlYXNlZCBmcm9t
IDIgdG8gNi4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWlj
U3VidHJlZU5vZGVMaXN0KTogQ2FsbCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4K
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QpOiBDYWxsIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4KKyAgICAgICAg
KiBkb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRh
SXRlbUxpc3Q6Ok1pY3JvRGF0YUl0ZW1MaXN0KTogSW52YWxpZGF0ZSBvbiBpdGVtc2NvcGUsIGl0
ZW1wcm9wLCBhbmQgaXRlbXR5cGUgY29udGVudCBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAg
KiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
TmFtZU5vZGVMaXN0KTogSW52YWxpZGF0ZSBvbiBuYW1lIGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyUmFyZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0
ZXJBdHRyaWJ1dGVDaGFuZ2VkKTogUmVwbGFjZWQgdGhlIGhhcmQgY29kZWQgY2hlY2sgbGlzdCBv
ZiBhdHRyaWJ1dGVzLCBieSBhIGNhbGwKKyAgICAgICAgdG8gc2hvdWxkSW52YWxpZGF0ZUR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9k
ZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCk6IENhbGxzIHNob3VsZEludmFsaWRhdGVE
eW5hbWljU3VidHJlZU5vZGVMaXN0LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVu
dHNCeVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05h
bWVOUyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnJhZGlvTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVE
YXRhOjpjcmVhdGVOb2RlTGlzdHMpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OmVuc3VyZU5vZGVMaXN0cyk6CisgICAgICAgIChO
b2RlUmFyZURhdGEpOgorICAgICAgICAqIGRvbS9UYWdOb2RlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QpOiBEbyBub3QgaW52YWxpZGF0ZSBvbiBh
bnkgYXR0cmlidXRlIGNoYW5nZXMuCisgICAgICAgICogZG9tL1RyZWVTY29wZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OlRyZWVTY29wZSk6IE5vIGxvbmdlciBpbml0aWFsaXpl
cyBtX251bU5vZGVMaXN0Q2FjaGVzIHNpbmNlIGl0IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAg
ICogZG9tL1RyZWVTY29wZS5oOgorICAgICAgICAoVHJlZVNjb3BlKTogUmVtb3ZlZCBtX251bU5v
ZGVMaXN0Q2FjaGVzLgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wZSk6CisgICAg
ICAgICogaHRtbC9IVE1MQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb25DYWNoZUJhc2U6OkhUTUxDb2xsZWN0aW9uQ2FjaGVCYXNlKTogSnVzdCBwYXNzIGluIERv
Tm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcyBmb3Igbm93IHNpbmNlCisgICAgICAgIGl0
J3MgbmV2ZXIgdXNlZCBpbiBIVE1MQ29sbGVjdGlvbnMuCisgICAgICAgICogaHRtbC9MYWJlbGFi
bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsYWJsZUVsZW1lbnQ6OmxhYmVs
cyk6CisgICAgICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbHNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3QpOiBJbnZhbGlkYXRlIG9uIGZvciBjb250
ZW50IGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxpc3Q6
On5MYWJlbHNOb2RlTGlzdCk6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QpOiBJbnZhbGlkYXRl
IG9uIGlkLCBuYW1lLCBhbmQgZm9yIGNvbnRlbnQgYXR0cmlidXRlIGNoYW5nZXMuCisgICAgICAg
IChXZWJDb3JlOjpSYWRpb05vZGVMaXN0Ojp+UmFkaW9Ob2RlTGlzdCk6CisKIDIwMTItMDctMTEg
IE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBD
b21waWxhdGlvbiBlcnJvciB3aXRoIEdMRVMyIHdoZW4gdXNpbmcgZ2wyZXh0LmggZnJvbSBBTkdM
RS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjM4
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDaGlsZE5vZGVMaXN0
OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKLSAgICA6IER5bmFtaWNOb2Rl
TGlzdChub2RlLCBSb290ZWRBdE5vZGUsIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdl
KQorICAgIDogRHluYW1pY05vZGVMaXN0KG5vZGUsIE5vZGVMaXN0SXNSb290ZWRBdE5vZGUsIERv
Tm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQotICAgIDog
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3Qocm9vdE5vZGUsIEludmFsaWRhdGVPbkNsYXNzQXR0ckNoYW5nZSkKICAgICAsIG1fY2xh
c3NOYW1lcyhjbGFzc05hbWVzLCBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKICAgICAsIG1f
b3JpZ2luYWxDbGFzc05hbWVzKGNsYXNzTmFtZXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsMTAgQEAgRG9jdW1lbnQ6OkRvY3VtZW50
KEZyYW1lKiBmcmFtZSwgY29uc3QgSwogCiAgICAgc3RhdGljIGludCBkb2NJRCA9IDA7CiAgICAg
bV9kb2NJRCA9IGRvY0lEKys7Ci0gICAgCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChtX25vZGVMaXN0Q291bnRzKTsgaSsrKQorICAgICAgICBtX25vZGVM
aXN0Q291bnRzW2ldID0gMDsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJS
QVlfTEVOR1RIKG1fY29sbGVjdGlvbnMpOyBpKyspCiAgICAgICAgIG1fY29sbGVjdGlvbnNbaV0g
PSAwOwogCkBAIC02NDgsNiArNjUxLDE0IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogICAgIGlm
IChoYXNSYXJlRGF0YSgpKQogICAgICAgICBjbGVhclJhcmVEYXRhKCk7CiAKKyAgICBBU1NFUlQo
IW1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuc2l6ZSgpKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fbm9kZUxpc3RDb3VudHMpOyBpKyspCisg
ICAgICAgIEFTU0VSVCghbV9ub2RlTGlzdENvdW50c1tpXSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX2NvbGxlY3Rpb25zKTsgaSsrKQorICAgICAg
ICBBU1NFUlQoIW1fY29sbGVjdGlvbnNbaV0pOworCiAgICAgbV9kb2N1bWVudCA9IDA7CiAKICAg
ICBJbnNwZWN0b3JDb3VudGVyczo6ZGVjcmVtZW50Q291bnRlcihJbnNwZWN0b3JDb3VudGVyczo6
RG9jdW1lbnRDb3VudGVyKTsKQEAgLTM4NjUsMTQgKzM4NzYsNTIgQEAgdm9pZCBEb2N1bWVudDo6
c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiAgICAgICAgIG4tPnNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3QpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCwgTm9kZUxpc3RS
b290VHlwZSByb290VHlwZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5
cGUpCit7CisgICAgbV9ub2RlTGlzdENvdW50c1tpbnZhbGlkYXRpb25UeXBlXSsrOworICAgIGlm
IChyb290VHlwZSA9PSBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCkKKyAgICAgICAgbV9saXN0
c0ludmFsaWRhdGVkQXREb2N1bWVudC5hZGQobGlzdCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxp
c3QsIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBp
bnZhbGlkYXRpb25UeXBlKQoreworICAgIG1fbm9kZUxpc3RDb3VudHNbaW52YWxpZGF0aW9uVHlw
ZV0tLTsKKyAgICBpZiAocm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQpIHsK
KyAgICAgICAgQVNTRVJUKG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuY29udGFpbnMobGlz
dCkpOworICAgICAgICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsK
KyAgICB9Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkSW52YWxpZGF0ZU5v
ZGVMaXN0Rm9yVHlwZShOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgdHlwZSwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpCiB7Ci0gICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5h
ZGQobGlzdCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbnZhbGlkYXRlT25DbGFz
c0F0dHJDaGFuZ2U6CisgICAgICAgIHJldHVybiBhdHRyTmFtZSA9PSBjbGFzc0F0dHI7CisgICAg
Y2FzZSBJbnZhbGlkYXRlT25OYW1lQXR0ckNoYW5nZToKKyAgICAgICAgcmV0dXJuIGF0dHJOYW1l
ID09IG5hbWVBdHRyOworICAgIGNhc2UgSW52YWxpZGF0ZU9uRm9yQXR0ckNoYW5nZToKKyAgICAg
ICAgcmV0dXJuIGF0dHJOYW1lID09IGZvckF0dHI7CisgICAgY2FzZSBJbnZhbGlkYXRlT25JZE5h
bWVGb3JBdHRyQ2hhbmdlOgorICAgICAgICByZXR1cm4gYXR0ck5hbWUgPT0gbmFtZUF0dHIgfHwg
YXR0ck5hbWUgPT0gaWRBdHRyIHx8IGF0dHJOYW1lID09IGZvckF0dHI7CisgICAgY2FzZSBJbnZh
bGlkYXRlT25JdGVtQXR0ckNoYW5nZToKKyNpZiBFTkFCTEUoTUlDUk9EQVRBKQorICAgICAgICBy
ZXR1cm4gYXR0ck5hbWUgPT0gaXRlbXNjb3BlQXR0ciB8fCBhdHRyTmFtZSA9PSBpdGVtcHJvcEF0
dHIgfHwgYXR0ck5hbWUgPT0gaXRlbXR5cGVBdHRyOworI2VuZGlmIC8vIEludGVudGlvbmFsbHkg
ZmFsbCB0aHJvdWdoCisgICAgY2FzZSBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXM6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCkKK2Jvb2wg
RG9jdW1lbnQ6OnNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KGNvbnN0IFF1
YWxpZmllZE5hbWUqIGF0dHJOYW1lKSBjb25zdAogewotICAgIG1fbGlzdHNJbnZhbGlkYXRlZEF0
RG9jdW1lbnQucmVtb3ZlKGxpc3QpOworICAgIGZvciAoaW50IHR5cGUgPSBEb05vdEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZXMgKyAxOyB0eXBlIDwgbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25U
eXBlczsgdHlwZSsrKSB7CisgICAgICAgIGlmIChtX25vZGVMaXN0Q291bnRzW3R5cGVdICYmICgh
YXR0ck5hbWUgfHwgc2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0Rm9yVHlwZShzdGF0aWNfY2FzdDxO
b2RlTGlzdEludmFsaWRhdGlvblR5cGU+KHR5cGUpLCAqYXR0ck5hbWUpKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6Y2xlYXJOb2RlTGlzdENhY2hlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw2ICsxODYsMjEgQEAgZW51bSBQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2Ug
ewogCiBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVGbGFnIHsgUmVjYWxjU3R5bGVJbW1lZGlhdGVs
eSwgRGVmZXJSZWNhbGNTdHlsZSwgUmVjYWxjU3R5bGVJZk5lZWRlZCB9OwogCitlbnVtIE5vZGVM
aXN0Um9vdFR5cGUgeworICAgIE5vZGVMaXN0SXNSb290ZWRBdE5vZGUsCisgICAgTm9kZUxpc3RJ
c1Jvb3RlZEF0RG9jdW1lbnQsCit9OworCitlbnVtIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7
CisgICAgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzID0gMCwKKyAgICBJbnZhbGlk
YXRlT25DbGFzc0F0dHJDaGFuZ2UsCisgICAgSW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2UsCisg
ICAgSW52YWxpZGF0ZU9uRm9yQXR0ckNoYW5nZSwKKyAgICBJbnZhbGlkYXRlT25JZE5hbWVGb3JB
dHRyQ2hhbmdlLAorICAgIEludmFsaWRhdGVPbkl0ZW1BdHRyQ2hhbmdlLAorfTsKK2NvbnN0IGlu
dCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uSXRlbUF0dHJDaGFu
Z2UgKyAxOworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMg
VHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtV
UkwmIHVybCkKQEAgLTcyMyw4ICs3MzgsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1BlbmRpbmdT
dHlsZVJlY2FsYygpIGNvbnN0OwogICAgIHZvaWQgc3R5bGVSZWNhbGNUaW1lckZpcmVkKFRpbWVy
PERvY3VtZW50PiopOwogCi0gICAgdm9pZCByZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOwotICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJE
eW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqLCBOb2RlTGlzdFJv
b3RUeXBlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUpOworICAgIHZvaWQgdW5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCosIE5vZGVMaXN0Um9v
dFR5cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSk7CisgICAgYm9vbCBzaG91bGRJbnZhbGlk
YXRlRHluYW1pY1N1YnRyZWVOb2RlTGlzdChjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSA9
IDApIGNvbnN0OwogICAgIHZvaWQgY2xlYXJOb2RlTGlzdENhY2hlcygpOwogCiAgICAgdm9pZCBh
dHRhY2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkBAIC0xNDA5LDYgKzE0MjUsNyBAQCBw
cml2YXRlOgogICAgIEluaGVyaXRlZEJvb2wgbV9kZXNpZ25Nb2RlOwogCiAgICAgSGFzaFNldDxE
eW5hbWljU3VidHJlZU5vZGVMaXN0Kj4gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudDsKKyAg
ICB1bnNpZ25lZCBtX25vZGVMaXN0Q291bnRzW251bU5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZXNd
OwogCiAgICAgSFRNTENvbGxlY3Rpb24qIG1fY29sbGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50
Q2FjaGVkVHlwZXNdOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEhUTUxOYW1l
Q29sbGVjdGlvbio+IE5hbWVkQ29sbGVjdGlvbk1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdCgpCi17Ci19Ci0KIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3Q6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMTIyMzg3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwyNiArMzYsMTkgQEAgY2xhc3MgTm9kZTsKIAogY2xhc3MgRHluYW1pY05vZGVMaXN0Q2FjaGVC
YXNlIHsKIHB1YmxpYzoKLSAgICBlbnVtIFJvb3RUeXBlIHsKLSAgICAgICAgUm9vdGVkQXROb2Rl
LAotICAgICAgICBSb290ZWRBdERvY3VtZW50LAotICAgIH07Ci0KLSAgICBlbnVtIEludmFsaWRh
dGlvblR5cGUgewotICAgICAgICBBbHdheXNJbnZhbGlkYXRlLAotICAgICAgICBEb05vdEludmFs
aWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSwKLSAgICB9OwotCi0gICAgRHluYW1pY05vZGVMaXN0Q2Fj
aGVCYXNlKFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5
cGUpCi0gICAgICAgIDogbV9yb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IFJvb3RlZEF0RG9j
dW1lbnQpCi0gICAgICAgICwgbV9zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoaW52
YWxpZGF0aW9uVHlwZSA9PSBBbHdheXNJbnZhbGlkYXRlKQorICAgIER5bmFtaWNOb2RlTGlzdENh
Y2hlQmFzZShOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5
cGUgaW52YWxpZGF0aW9uVHlwZSkKKyAgICAgICAgOiBtX3Jvb3RlZEF0RG9jdW1lbnQocm9vdFR5
cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQpCisgICAgICAgICwgbV9pbnZhbGlkYXRp
b25UeXBlKGludmFsaWRhdGlvblR5cGUpCiAgICAgeworICAgICAgICBBU1NFUlQobV9pbnZhbGlk
YXRpb25UeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnZhbGlkYXRpb25UeXBlKSk7CiAg
ICAgICAgIGNsZWFyQ2FjaGUoKTsKICAgICB9CiAKIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNSb290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290ZWRBdERvY3Vt
ZW50OyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hh
bmdlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0
ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW52YWxpZGF0aW9uVHlwZSAhPSBEb05vdEludmFs
aWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIE5vZGVMaXN0Um9v
dFR5cGUgcm9vdFR5cGUoKSB7IHJldHVybiBtX3Jvb3RlZEF0RG9jdW1lbnQgPyBOb2RlTGlzdElz
Um9vdGVkQXREb2N1bWVudCA6IE5vZGVMaXN0SXNSb290ZWRBdE5vZGU7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlPihtX2ludmFsaWRh
dGlvblR5cGUpOyB9CiAKIHByb3RlY3RlZDoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJdGVt
Q2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtQ2FjaGVWYWxpZDsgfQpAQCAtOTIs
NyArODUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRnJvbSBEeW5hbWljTm9kZUxpc3QKICAgICBj
b25zdCB1bnNpZ25lZCBtX3Jvb3RlZEF0RG9jdW1lbnQgOiAxOwotICAgIGNvbnN0IHVuc2lnbmVk
IG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlIDogMTsKKyAgICBjb25zdCB1bnNp
Z25lZCBtX2ludmFsaWRhdGlvblR5cGUgOiAzOwogfTsKIAogY2xhc3MgRHluYW1pY05vZGVMaXN0
IDogcHVibGljIE5vZGVMaXN0LCBwdWJsaWMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIHsKQEAg
LTEwNiw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgTGFiZWxzTm9kZUxpc3RUeXBlLAogICAg
ICAgICBNaWNyb0RhdGFJdGVtTGlzdFR5cGUsCiAgICAgfTsKLSAgICBEeW5hbWljTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiBvd25lck5vZGUsIFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRp
b25UeXBlIGludmFsaWRhdGlvblR5cGUpCisgICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gb3duZXJOb2RlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlzdEludmFs
aWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKICAgICAgICAgOiBEeW5hbWljTm9kZUxpc3RD
YWNoZUJhc2Uocm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUpCiAgICAgICAgICwgbV9vd25lck5v
ZGUob3duZXJOb2RlKQogICAgIHsgfQpAQCAtMTM4LDE0ICsxMzEsMTkgQEAgcHJpdmF0ZToKIAog
Y2xhc3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3Qgewog
cHVibGljOgotICAgIHZpcnR1YWwgfkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoKTsKKyAgICB2aXJ0
dWFsIH5EeW5hbWljU3VidHJlZU5vZGVMaXN0KCkKKyAgICB7CisgICAgICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMsIHJvb3RUeXBlKCksIGludmFs
aWRhdGlvblR5cGUoKSk7CisgICAgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dCBPVkVSUklERTsKIAogcHJvdGVjdGVkOgotICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSByb290VHlwZSA9IFJvb3RlZEF0Tm9kZSwgSW52
YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlID0gQWx3YXlzSW52YWxpZGF0ZSkKKyAgICBE
eW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgTm9kZUxpc3RJbnZh
bGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUsIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUg
PSBOb2RlTGlzdElzUm9vdGVkQXROb2RlKQogICAgICAgICA6IER5bmFtaWNOb2RlTGlzdChub2Rl
LCByb290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgIGRv
Y3VtZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzLCByb290VHlwZSwg
aW52YWxpZGF0aW9uVHlwZSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3
YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5p
bmdPZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1M
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRlbUxp
c3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRh
SXRlbUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNvbnN0IFN0cmlu
ZyYgTWljcm9EYXRhSXRlbUxpc3Q6OnVuZGVmaW4KIH0KIAogTWljcm9EYXRhSXRlbUxpc3Q6Ok1p
Y3JvRGF0YUl0ZW1MaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYg
dHlwZU5hbWVzKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkKKyAgICA6
IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIEludmFsaWRhdGVPbkl0ZW1BdHRyQ2hh
bmdlKQogICAgICwgbV90eXBlTmFtZXModHlwZU5hbWVzLCBkb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSkKICAgICAsIG1fb3JpZ2luYWxUeXBlTmFtZXModHlwZU5hbWVzKQogewpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIE5h
bWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5v
ZGUpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25O
YW1lQXR0ckNoYW5nZSkKICAgICAsIG1fbmFtZShuYW1lKQogewogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODksOCArNDg5LDYgQEAgT3duUHRyPE5vZGVSYXJlRGF0YT4gTm9k
ZTo6Y3JlYXRlUmFyZURhdAogdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKIHsKICAgICBBU1NF
UlQoaGFzUmFyZURhdGEoKSk7Ci0gICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpKQotICAgICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwog
CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBBU1NFUlQoIXRyYW5zaWVudE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHx8IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSgpLT5pc0VtcHR5KCkpOwpAQCAtOTY1LDI4ICs5NjMsMTEgQEAgdm9pZCBOb2RlOjppbnZh
bGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlcgogICAgIGlmICghYXR0cmlidXRlT3duZXJFbGVtZW50
KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogTW92ZSB0aGUgbGlzdCBvZiBhdHRy
aWJ1dGVzIGVhY2ggTm9kZUxpc3QgdHlwZSBjYXJlcyBhYm91dCB0byBiZSBhIHN0YXRpYyBvbiB0
aGUKLSAgICAvLyBhcHByb3ByaWF0ZSBOb2RlTGlzdCBjbGFzcy4gVGhlbiB1c2UgdGhvc2UgbGlz
dHMgaGVyZSBhbmQgaW4gaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMKLSAg
ICAvLyB0byBvbmx5IGludmFsaWRhdGUgdGhlIGNhY2hlIHR5cGVzIHRoYXQgZGVwZW5kIG9uIHRo
ZSBhdHRyaWJ1dGUgdGhhdCBjaGFuZ2VkLgotICAgIC8vIEZJWE1FOiBLZWVwIHRyYWNrIG9mIHdo
ZW4gd2UgaGF2ZSBubyBjYWNoZXMgb2YgYSBnaXZlbiB0eXBlIHNvIHRoYXQgd2UgY2FuIGF2b2lk
IHRoZSBmb3ItbG9vcAotICAgIC8vIGJlbG93IGV2ZW4gaWYgYSByZWxhdGVkIGF0dHJpYnV0ZSBj
aGFuZ2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFkaW9Ob2RlTGlzdHMsIHdlIGRvbid0IG5lZWQK
LSAgICAvLyB0byBpbnZhbGlkYXRlIGFueSBjYWNoZXMgd2hlbiBpZCBhdHRyaWJ1dGVzIGNoYW5n
ZS4pCi0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgotI2lmIEVOQUJMRShNSUNST0RBVEEp
Ci0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0dHIKLSAgICAgICAgJiYgYXR0ck5h
bWUgIT0gaXRlbXByb3BBdHRyCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW10eXBlQXR0cgot
I2VuZGlmCi0gICAgICAgICYmIGF0dHJOYW1lICE9IG5hbWVBdHRyCi0gICAgICAgICYmIGF0dHJO
YW1lICE9IGZvckF0dHIKLSAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0ciB8fCAhYXR0cmli
dXRlT3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKKyAgICBpZiAoIWRvY3Vt
ZW50KCktPnNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KCZhdHRyTmFtZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMo
KTsKIAotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+
aXNBdHRyaWJ1dGVOb2RlKCkpOwogICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCkBA
IC0xMDA0LDExICs5ODUsMTEgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVB
ZnRlcgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNo
aWxkTm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hl
cygpOwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKKyAgICBp
ZiAoIWRvY3VtZW50KCktPnNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMo
KTsKKwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xNTYzLDggKzE1NDQsOCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBO
b2RlOjpnZXRFbGVtZW50c0J5CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKGRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5l
bnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVM
aXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsK
LSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRD
YWNoZVdpdGhBdG9taWNOYW1lPFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRh
Z05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2Rl
TGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7
CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNo
ZVdpdGhBdG9taWNOYW1lPFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05v
ZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6
Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0xNTc1LDIzICsxNTU2LDIzIEBAIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAobmFtZXNwYWNl
VVJJID09IHN0YXJBdG9tKQogICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUobG9j
YWxOYW1lKTsKIAotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMo
dGhpcyktPmFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhpcywgbmFtZXNwYWNlVVJJLmlzRW1w
dHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOworICAgIHJldHVybiBl
bnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoUXVhbGlmaWVk
TmFtZSh0aGlzLCBuYW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBuYW1lc3BhY2VV
UkksIGxvY2FsTmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1l
bnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgcmV0dXJuIGVuc3Vy
ZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFt
ZTxOYW1lTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TmFtZU5vZGVMaXN0VHlwZSwg
ZWxlbWVudE5hbWUpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlz
dHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxOYW1lTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNO
b2RlTGlzdDo6TmFtZU5vZGVMaXN0VHlwZSwgZWxlbWVudE5hbWUpOwogfQogCiBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xh
c3NOYW1lcykKIHsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3Rz
KHRoaXMpLT5hZGRDYWNoZVdpdGhOYW1lPENsYXNzTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2Rl
TGlzdDo6Q2xhc3NOb2RlTGlzdFR5cGUsIGNsYXNzTmFtZXMpOworICAgIHJldHVybiBlbnN1cmVS
YXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoTmFtZTxDbGFzc05vZGVM
aXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3RUeXBlLCBjbGFzc05hbWVz
KTsKIH0KIAogUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBOb2RlOjpyYWRpb05vZGVMaXN0KGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFn
KSB8fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRh
KCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxSYWRpb05v
ZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBuYW1lKTsK
KyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hl
V2l0aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpSYWRp
b05vZGVMaXN0VHlwZSwgbmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gTm9kZTo6cXVl
cnlTZWxlY3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC0yNzgwLDEyICsyNzYxLDkgQEAgdm9pZCBOb2RlOjpzZXRJdGVtVHlwZShjb25zdCBT
dHJpbmcmIHZhbAogCiAjZW5kaWYKIAotdm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0
cyhOb2RlKiBub2RlKQordm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cygpCiB7Ci0g
ICAgQVNTRVJUKG5vZGUpOwogICAgIHNldE5vZGVMaXN0cyhOb2RlTGlzdHNOb2RlRGF0YTo6Y3Jl
YXRlKCkpOwotICAgIGlmIChUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG5vZGUtPnRyZWVTY29wZSgp
KQotICAgICAgICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKIH0KIAogdm9pZCBOb2Rl
UmFyZURhdGE6OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9uYW1lQ2FjaGVz
LmlzRW1wdHkoKSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CiAgICAgfQogCi0g
ICAgdm9pZCBhZG9wdFRyZWVTY29wZShUcmVlU2NvcGUqIG9sZFRyZWVTY29wZSwgVHJlZVNjb3Bl
KiBuZXdUcmVlU2NvcGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3Vt
ZW50KQorICAgIHZvaWQgYWRvcHRUcmVlU2NvcGUoRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1
bWVudCogbmV3RG9jdW1lbnQpCiAgICAgewogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVzKCk7CiAK
QEAgLTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0QXRv
bWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5i
ZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAg
ICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKICAgICAgICAgICAg
ICAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KGxpc3QpOworICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rl
ckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52
YWxpZGF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lz
dGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0LCBsaXN0LT5yb290VHlwZSgpLCBsaXN0LT5p
bnZhbGlkYXRpb25UeXBlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApA
QCAtMTQ3LDE1ICsxNDcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5h
bWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQg
IT0gbmFtZUNhY2hlRW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmlz
Um9vdGVkQXREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51
bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KGxpc3QsIGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxpZGF0aW9uVHlwZSgp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAg
ICBpZiAob2xkVHJlZVNjb3BlKQotICAgICAgICAgICAgb2xkVHJlZVNjb3BlLT5yZW1vdmVOb2Rl
TGlzdENhY2hlKCk7Ci0gICAgICAgIG5ld1RyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOwog
ICAgIH0KIAogcHJpdmF0ZToKQEAgLTIxNSwxMCArMjExLDEwIEBAIHB1YmxpYzogICAgCiAgICAg
dm9pZCBjbGVhck5vZGVMaXN0cygpIHsgbV9ub2RlTGlzdHMuY2xlYXIoKTsgfQogICAgIHZvaWQg
c2V0Tm9kZUxpc3RzKFBhc3NPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IGxpc3RzKSB7IG1fbm9k
ZUxpc3RzID0gbGlzdHM7IH0KICAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7IH0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSog
ZW5zdXJlTm9kZUxpc3RzKE5vZGUqIG5vZGUpCisgICAgTm9kZUxpc3RzTm9kZURhdGEqIGVuc3Vy
ZU5vZGVMaXN0cygpCiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQotICAgICAgICAg
ICAgY3JlYXRlTm9kZUxpc3RzKG5vZGUpOworICAgICAgICAgICAgY3JlYXRlTm9kZUxpc3RzKCk7
CiAgICAgICAgIHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsKICAgICB9CiAgICAgdm9pZCBjbGVh
ckNoaWxkTm9kZUxpc3RDYWNoZSgpOwpAQCAtMzQwLDcgKzMzNiw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGJvb2wg
bmVlZHMpIHsgbV9uZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IG5l
ZWRzOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVOb2RlTGlzdHMoTm9kZSopOworICAg
IHZvaWQgY3JlYXRlTm9kZUxpc3RzKCk7CiAKICAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlOwog
ICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9UYWdOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9UYWdOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9v
dE5vZGUsIFJvb3RlZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpCisg
ICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0
dHJpYnV0ZUNoYW5nZXMpCiAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAg
LCBtX2xvY2FsTmFtZShsb2NhbE5hbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNw
cAkocmV2aXNpb24gMTIyMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIFRyZWVTY29wZTo6VHJlZVNjb3BlKENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKQogICAgIDog
bV9yb290Tm9kZShyb290Tm9kZSkKICAgICAsIG1fcGFyZW50VHJlZVNjb3BlKDApCi0gICAgLCBt
X251bU5vZGVMaXN0Q2FjaGVzKDApCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9uIDEyMjM4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDYgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFw
RWxlbWVudCogZ2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGROb2RlTGlzdENhY2hlKCkgeyArK21fbnVtTm9kZUxpc3RDYWNoZXM7IH0KLSAgICB2b2lk
IHJlbW92ZU5vZGVMaXN0Q2FjaGUoKSB7IEFTU0VSVChtX251bU5vZGVMaXN0Q2FjaGVzID4gMCk7
IC0tbV9udW1Ob2RlTGlzdENhY2hlczsgfQotICAgIGJvb2wgaGFzTm9kZUxpc3RDYWNoZXMoKSBj
b25zdCB7IHJldHVybiBtX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0KICAgICBET01TZWxlY3Rpb24q
IGdldFNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0
aGUgZ2l2ZW4gbmFtZS4KQEAgLTk1LDggKzkxLDYgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9y
ZGVyZWRNYXAgbV9lbGVtZW50c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VN
YXBzQnlOYW1lOwogCi0gICAgdW5zaWduZWQgbV9udW1Ob2RlTGlzdENhY2hlczsKLQogICAgIG11
dGFibGUgUmVmUHRyPERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKHJvb3QpKSB7CiAgICAgICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEgPSBub2RlLT5z
ZXRUcmVlU2NvcGUobmV3RG9jdW1lbnQgPT0gbV9uZXdTY29wZSA/IDAgOiBtX25ld1Njb3BlKTsK
ICAgICAgICAgaWYgKHJhcmVEYXRhICYmIHJhcmVEYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAg
ICAgIHJhcmVEYXRhLT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUobV9vbGRTY29wZSwgbV9u
ZXdTY29wZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgICAgIHJhcmVEYXRh
LT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsK
IAogICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQogICAgICAgICAgICAgbW92ZU5v
ZGVUb05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgTm9kZUxpc3Q7CiBjbGFzcyBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZSA6
IHB1YmxpYyBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UgewogcHVibGljOgogICAgIEhUTUxDb2xs
ZWN0aW9uQ2FjaGVCYXNlKENvbGxlY3Rpb25UeXBlIHR5cGUsIGJvb2wgaW5jbHVkZUNoaWxkcmVu
KQotICAgICAgICA6IER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZShSb290ZWRBdE5vZGUsIEFsd2F5
c0ludmFsaWRhdGUpIC8vIFRoZXNlIHR3byBmbGFncyBhcmUgbmV2ZXIgdXNlZAorICAgICAgICA6
IER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZShOb2RlTGlzdElzUm9vdGVkQXROb2RlLCBEb05vdElu
dmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXMpIC8vIFRoZXNlIHR3byBmbGFncyBhcmUgbmV2ZXIg
dXNlZAogICAgICAgICAsIG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldCgwKQogICAgICAgICAs
IG1fY2FjaGVUcmVlVmVyc2lvbigwKQogICAgICAgICAsIG1faGFzTmFtZUNhY2hlKGZhbHNlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IExhYmVsYWJs
ZUVsZW1lbnQ6OmwKICAgICBpZiAoIWRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2Fj
aGVXaXRoQXRvbWljTmFtZTxMYWJlbHNOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpM
YWJlbHNOb2RlTGlzdFR5cGUsIHN0YXJBdG9tKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEo
KS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9kZUxp
c3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
TGFiZWxzTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFi
ZWxzTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0xhYmVsc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTUgKzM0LDEzIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIExhYmVsc05v
ZGVMaXN0OjpMYWJlbHNOb2RlTGlzdChOb2RlKiBmb3JOb2RlKQotICAgIDogRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChmb3JOb2RlLCBSb290ZWRBdERvY3VtZW50KQorICAgIDogRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChmb3JOb2RlLCBJbnZhbGlkYXRlT25Gb3JBdHRyQ2hhbmdlLCBOb2RlTGlzdElz
Um9vdGVkQXREb2N1bWVudCkKIHsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3Qo
KQogewogICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWlj
TmFtZSh0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0VHlwZSwgc3RhckF0b20p
OwotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMp
OwogfSAKICAgICAKIGJvb2wgTGFiZWxzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRl
c3ROb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAxMjIzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNiArMzgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2RlTGlz
dChOb2RlKiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQotICAgIDogRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSwgcm9vdE5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykg
PyBSb290ZWRBdERvY3VtZW50IDogUm9vdGVkQXROb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChyb290Tm9kZSwgSW52YWxpZGF0ZU9uSWROYW1lRm9yQXR0ckNoYW5nZSwgcm9vdE5v
ZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCA6IE5v
ZGVMaXN0SXNSb290ZWRBdE5vZGUpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKLSAgICBkb2N1bWVu
dCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIFJhZGlvTm9k
ZUxpc3Q6On5SYWRpb05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCkt
PnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpSYWRpb05v
ZGVMaXN0VHlwZSwgbV9uYW1lKTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1
YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0KIAogc3RhdGljIGlubGluZSBIVE1MSW5wdXRFbGVtZW50
KiB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KE5vZGUqIG5vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151859</attachid>
            <date>2012-07-11 22:35:13 -0700</date>
            <delta_ts>2012-07-11 22:52:20 -0700</delta_ts>
            <desc>Fixed a bug</desc>
            <filename>bug-91046-20120711223848.patch</filename>
            <type>text/plain</type>
            <size>32450</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA3LTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGludmFsaWRhdGVOb2RlTGlzdHND
YWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCBzaG91bGQgZHluYW1pY2FsbHkgZmlndXJlIG91dCB3
aGljaCBhdHRyaWJ1dGUgbmVlZHMgaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTA0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGFuIGFycmF5IG9mIGNvdW50ZXJzIChtX25v
ZGVMaXN0Q291bnRzKSBmb3IgZWFjaCBzZXQgb2YgYXR0cmlidXRlcyAoTm9kZUxpc3RJbnZhbGlk
YXRpb25UeXBlKSBub2RlIGxpc3RzIGNhcmUgYWJvdXQKKyAgICAgICAgdG8gRG9jdW1lbnQsIGFu
ZCBtYWRlIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QncyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rv
ciBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGVzZSBjb3VudGVycyB2aWEKKyAgICAgICAgcmVn
aXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCByZXNwZWN0aXZlbHkuIHNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVM
aXN0LAorICAgICAgICB3aGljaCBpcyBjYWxsZWQgYnkgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkLCB0aGVuIHVzZSB0aGVzZSBjb3VudGVycyB0byBkZXRlcm1p
bmUgd2hldGhlciBhIGdpdmVuCisgICAgICAgIGF0dHJpYnV0ZSBjaGFuZ2Ugc2hvdWxkIHJlc3Vs
dCBpbiBub2RlIGxpc3QgaW52YWxpZGF0aW9ucy4KKworICAgICAgICBBbHNvIHJlbW92ZWQgbV9u
dW1Ob2RlTGlzdENhY2hlcyBmcm9tIFRyZWVTY29wZSBiZWNhdXNlIHRoaXMgY291bnRlciBoYXMg
bm93IGJlY29tZSByZWR1bmRhbnQgd2l0aCBtX25vZGVMaXN0Q291bnRzLgorCisgICAgICAgICog
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6
Q2hpbGROb2RlTGlzdCk6IERvIG5vdCBpbnZhbGlkYXRlIG9uIGF0dHJpYnV0ZSBjaGFuZ2VzLgor
ICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNz
Tm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QpOiBJbnZhbGlkYXRlIG9uIGNsYXNzIGF0dHJpYnV0ZSBj
aGFuZ2VzLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6RG9jdW1lbnQpOiBJbml0aWFsaXplIG1fbm9kZUxpc3RDb3VudHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KTogQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBz
dXJlIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQsIG1fbm9kZUxpc3RDb3VudHMsIGFuZAor
ICAgICAgICBtX2NvbGxlY3Rpb25zIGFyZSBhbGwgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogVGhpcyBmdW5jdGlvbiBp
cyBub3cgY2FsbGVkIGZvciBhbGwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgc3VwcG9zZWQKKyAg
ICAgICAgdG8ganVzdCBvbmVzIHJvb3RlZCBhdCB0aGUgZG9jdW1lbnQgaW4gb3JkZXIgdG8gaW5j
cmVtZW50IHRoZSBjb3VudGVyIGZvciBlYWNoIGludmFsaWRhdGlvbiB0eXBlLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdEZvclR5cGUpOiBDaGVja3MgdGhlIGF0dHJpYnV0ZSBuYW1lIGFnYWluc3QgTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZEludmFs
aWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBh
dHRyaWJ1dGUgbmFtZSBtYXRjaGVzIHRoZSBpbnZhbGlkYXRpb24KKyAgICAgICAgdHlwZSBvZiB0
aGUgZXhpc3RpbmcgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgaW4gdGhlIGRvY3VtZW50LiBJZiB0
aGUgYXR0cmlidXRlIG5hbWUgaXMgbm90IGdpdmVuICh1c2VkIHdoZW4gY2hpbGRyZW4gY2hhbmdl
KSwKKyAgICAgICAgdGhlbiBpdCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW55IER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3RzLiBDb25jZXB0dWFsbHksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHdy
aXR0ZW4gYXMgYSBsaXN0IG9mCisgICAgICAgICJpZiIgc3RhdGVtZW50cyB0aGF0IGNoZWNrcyB2
YWx1ZXMgaW4gbV9ub2RlTGlzdENvdW50cyBhbmQgdGhlIGF0dHJpYnV0ZSBuYW1lLiBXZSB1c2Ug
ImZvciIgbG9vcCBhbmQgc3dpdGNoIHN0YXRlbWVudCBpbnN0ZWFkCisgICAgICAgIHRvIHNoYXJl
IGxvZ2ljIGFuZCBkZXRlY3QgZnV0dXJlIGFkZGl0aW9uIG9mIHZhbHVlcyB0byBOb2RlTGlzdElu
dmFsaWRhdGlvblR5cGUuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1
bWVudCk6IE1vdmVkIFJvb3RUeXBlIGFuZCBJbnZhbGlkYXRpb25UeXBlIGZyb20gRHluYW1pY05v
ZGVMaXN0Q2FjaGVCYXNlIGFuZCByZW5hbWVkIHRoZW0gdG8gTm9kZUxpc3RSb290VHlwZSBhbmQK
KyAgICAgICAgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHJlc3BlY3RpdmVseSBpbiBvcmRlciB0
byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBuYW1lIGNvbGxpc2lvbnMuIEFsc28g
dGhlIGludmFsaWRhdGlvbiB0eXBlCisgICAgICAgIG5vdyBjb250YWlucyA2IHZhbHVlcyBpbnN0
ZWFkIG9mIDIuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSk6
IAorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91bGRJbnZh
bGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVM
aXN0Q2FjaGVCYXNlOjpyb290VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y05vZGVMaXN0Q2FjaGVCYXNlOjppbnZhbGlkYXRpb25UeXBlKTogQWRkZWQuCisgICAgICAgIChE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOiBVc2VzIDMgYml0cyB0byBzdG9yZSBpbnZhbGlkYXRp
b24gdHlwZSBub3cgdGhhdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBoYXZlIGluY3JlYXNlZCBmcm9t
IDIgdG8gNi4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWlj
U3VidHJlZU5vZGVMaXN0KTogQ2FsbCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4K
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QpOiBDYWxsIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4KKyAgICAgICAg
KiBkb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRh
SXRlbUxpc3Q6Ok1pY3JvRGF0YUl0ZW1MaXN0KTogSW52YWxpZGF0ZSBvbiBpdGVtc2NvcGUsIGl0
ZW1wcm9wLCBhbmQgaXRlbXR5cGUgY29udGVudCBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAg
KiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
TmFtZU5vZGVMaXN0KTogSW52YWxpZGF0ZSBvbiBuYW1lIGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyUmFyZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0
ZXJBdHRyaWJ1dGVDaGFuZ2VkKTogUmVwbGFjZWQgdGhlIGhhcmQgY29kZWQgY2hlY2sgbGlzdCBv
ZiBhdHRyaWJ1dGVzLCBieSBhIGNhbGwKKyAgICAgICAgdG8gc2hvdWxkSW52YWxpZGF0ZUR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9k
ZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCk6IENhbGxzIHNob3VsZEludmFsaWRhdGVE
eW5hbWljU3VidHJlZU5vZGVMaXN0LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVu
dHNCeVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05h
bWVOUyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnJhZGlvTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVE
YXRhOjpjcmVhdGVOb2RlTGlzdHMpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVTY29wZSk6IFVucmVn
aXN0ZXIgYW5kIHJlZ2lzdGVyIG5vZGUgbGlzdHMgaW4gbV90YWdOb2RlTGlzdENhY2hlTlMgc2lu
Y2UgYWxsIG5vZGUgbGlzdHMKKyAgICAgICAgbmVlZCB0byBiZSBhY2NvdW50ZWQgaW4gbV9ub2Rl
TGlzdENvdW50cy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTm9kZUxp
c3RzKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdCk6IERvIG5v
dCBpbnZhbGlkYXRlIG9uIGFueSBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAgKiBkb20vVHJl
ZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKTogTm8g
bG9uZ2VyIGluaXRpYWxpemVzIG1fbnVtTm9kZUxpc3RDYWNoZXMgc2luY2UgaXQgaGFzIGJlZW4g
cmVtb3ZlZC4KKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChUcmVlU2NvcGUp
OiBSZW1vdmVkIG1fbnVtTm9kZUxpc3RDYWNoZXMuCisgICAgICAgICogZG9tL1RyZWVTY29wZUFk
b3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVU
b05ld1Njb3BlKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2Up
OiBKdXN0IHBhc3MgaW4gRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzIGZvciBub3cg
c2luY2UKKyAgICAgICAgaXQncyBuZXZlciB1c2VkIGluIEhUTUxDb2xsZWN0aW9ucy4KKyAgICAg
ICAgKiBodG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxh
YmxlRWxlbWVudDo6bGFiZWxzKToKKyAgICAgICAgKiBodG1sL0xhYmVsc05vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdCk6IEludmFs
aWRhdGUgb24gZm9yIGNvbnRlbnQgYXR0cmlidXRlIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKiBodG1sL1JhZGlv
Tm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2Rl
TGlzdCk6IEludmFsaWRhdGUgb24gaWQsIG5hbWUsIGFuZCBmb3IgY29udGVudCBhdHRyaWJ1dGUg
Y2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0
KToKKwogMjAxMi0wNy0xMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWNjZXNzaW5nIHdpZHRoIG9yIGhlaWdodCBvZiBhIGRldGFjaGVkIGltYWdlIGlucHV0
IGVsZW1lbnQgY2F1c2VzIGNyYXNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUp
Ci0gICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZSkKKyAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlLCBOb2RlTGlz
dElzUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXMpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDbGFzc05vZGVMaXN0
OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYg
Y2xhc3NOYW1lcykKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCisgICAg
OiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25DbGFzc0F0dHJD
aGFuZ2UpCiAgICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgZG9jdW1lbnQoKS0+aW5RdWly
a3NNb2RlKCkpCiAgICAgLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyhjbGFzc05hbWVzKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDEwIEBA
IERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEsKIAogICAgIHN0YXRpYyBp
bnQgZG9jSUQgPSAwOwogICAgIG1fZG9jSUQgPSBkb2NJRCsrOwotICAgIAorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlzdENvdW50cyk7IGkr
KykKKyAgICAgICAgbV9ub2RlTGlzdENvdW50c1tpXSA9IDA7CisKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX2NvbGxlY3Rpb25zKTsgaSsrKQogICAgICAg
ICBtX2NvbGxlY3Rpb25zW2ldID0gMDsKIApAQCAtNjQ4LDYgKzY1MSwxNCBAQCBEb2N1bWVudDo6
fkRvY3VtZW50KCkKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgY2xlYXJSYXJlRGF0
YSgpOwogCisgICAgQVNTRVJUKCFtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX25vZGVM
aXN0Q291bnRzKTsgaSsrKQorICAgICAgICBBU1NFUlQoIW1fbm9kZUxpc3RDb3VudHNbaV0pOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9jb2xsZWN0
aW9ucyk7IGkrKykKKyAgICAgICAgQVNTRVJUKCFtX2NvbGxlY3Rpb25zW2ldKTsKKwogICAgIG1f
ZG9jdW1lbnQgPSAwOwogCiAgICAgSW5zcGVjdG9yQ291bnRlcnM6OmRlY3JlbWVudENvdW50ZXIo
SW5zcGVjdG9yQ291bnRlcnM6OkRvY3VtZW50Q291bnRlcik7CkBAIC0zODY1LDE0ICszODc2LDYw
IEBAIHZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChFbGVtZW50KiBuKQogICAgICAgICBuLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQordm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqIGxpc3QsIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9u
VHlwZSBpbnZhbGlkYXRpb25UeXBlKQoreworICAgIG1fbm9kZUxpc3RDb3VudHNbaW52YWxpZGF0
aW9uVHlwZV0rKzsKKyAgICBpZiAocm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1l
bnQpCisgICAgICAgIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuYWRkKGxpc3QpOworfQor
Cit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0LCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlz
dEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKK3sKKyAgICBtX25vZGVMaXN0Q291
bnRzW2ludmFsaWRhdGlvblR5cGVdLS07CisgICAgaWYgKHJvb3RUeXBlID09IE5vZGVMaXN0SXNS
b290ZWRBdERvY3VtZW50KSB7CisgICAgICAgIEFTU0VSVChtX2xpc3RzSW52YWxpZGF0ZWRBdERv
Y3VtZW50LmNvbnRhaW5zKGxpc3QpKTsKKyAgICAgICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1
bWVudC5yZW1vdmUobGlzdCk7CisgICAgfQorfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IHNob3VsZEludmFsaWRhdGVOb2RlTGlzdEZvclR5cGUoTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBl
IHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIG1fbGlzdHNJbnZh
bGlkYXRlZEF0RG9jdW1lbnQuYWRkKGxpc3QpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgSW52YWxpZGF0ZU9uQ2xhc3NBdHRyQ2hhbmdlOgorICAgICAgICByZXR1cm4gYXR0ck5hbWUg
PT0gY2xhc3NBdHRyOworICAgIGNhc2UgSW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2U6CisgICAg
ICAgIHJldHVybiBhdHRyTmFtZSA9PSBuYW1lQXR0cjsKKyAgICBjYXNlIEludmFsaWRhdGVPbkZv
ckF0dHJDaGFuZ2U6CisgICAgICAgIHJldHVybiBhdHRyTmFtZSA9PSBmb3JBdHRyOworICAgIGNh
c2UgSW52YWxpZGF0ZU9uSWROYW1lRm9yQXR0ckNoYW5nZToKKyAgICAgICAgcmV0dXJuIGF0dHJO
YW1lID09IG5hbWVBdHRyIHx8IGF0dHJOYW1lID09IGlkQXR0ciB8fCBhdHRyTmFtZSA9PSBmb3JB
dHRyOworICAgIGNhc2UgSW52YWxpZGF0ZU9uSXRlbUF0dHJDaGFuZ2U6CisjaWYgRU5BQkxFKE1J
Q1JPREFUQSkKKyAgICAgICAgcmV0dXJuIGF0dHJOYW1lID09IGl0ZW1zY29wZUF0dHIgfHwgYXR0
ck5hbWUgPT0gaXRlbXByb3BBdHRyIHx8IGF0dHJOYW1lID09IGl0ZW10eXBlQXR0cjsKKyNlbmRp
ZiAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaAorICAgIGNhc2UgRG9Ob3RJbnZhbGlkYXRl
T25BdHRyaWJ1dGVDaGFuZ2VzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqIGxpc3QpCitib29sIERvY3VtZW50OjpzaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkgY29uc3QKIHsKLSAgICBt
X2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsKKyAgICBpZiAoYXR0ck5h
bWUpIHsKKyAgICAgICAgZm9yIChpbnQgdHlwZSA9IERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRl
Q2hhbmdlcyArIDE7IHR5cGUgPCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzOyB0eXBlKysp
IHsKKyAgICAgICAgICAgIGlmIChtX25vZGVMaXN0Q291bnRzW3R5cGVdICYmIHNob3VsZEludmFs
aWRhdGVOb2RlTGlzdEZvclR5cGUoc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBl
Pih0eXBlKSwgKmF0dHJOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzOyB0eXBlKyspIHsKKyAgICAg
ICAgaWYgKG1fbm9kZUxpc3RDb3VudHNbdHlwZV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmNsZWFyTm9k
ZUxpc3RDYWNoZXMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEyMjQxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYs
NiArMTg2LDIxIEBAIGVudW0gUGFnZXNob3dFdmVudFBlcnNpc3RlbmNlIHsKIAogZW51bSBTdHls
ZVJlc29sdmVyVXBkYXRlRmxhZyB7IFJlY2FsY1N0eWxlSW1tZWRpYXRlbHksIERlZmVyUmVjYWxj
U3R5bGUsIFJlY2FsY1N0eWxlSWZOZWVkZWQgfTsKIAorZW51bSBOb2RlTGlzdFJvb3RUeXBlIHsK
KyAgICBOb2RlTGlzdElzUm9vdGVkQXROb2RlLAorICAgIE5vZGVMaXN0SXNSb290ZWRBdERvY3Vt
ZW50LAorfTsKKworZW51bSBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUgeworICAgIERvTm90SW52
YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcyA9IDAsCisgICAgSW52YWxpZGF0ZU9uQ2xhc3NBdHRy
Q2hhbmdlLAorICAgIEludmFsaWRhdGVPbk5hbWVBdHRyQ2hhbmdlLAorICAgIEludmFsaWRhdGVP
bkZvckF0dHJDaGFuZ2UsCisgICAgSW52YWxpZGF0ZU9uSWROYW1lRm9yQXR0ckNoYW5nZSwKKyAg
ICBJbnZhbGlkYXRlT25JdGVtQXR0ckNoYW5nZSwKK307Citjb25zdCBpbnQgbnVtTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlcyA9IEludmFsaWRhdGVPbkl0ZW1BdHRyQ2hhbmdlICsgMTsKKwogY2xh
c3MgRG9jdW1lbnQgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHVibGljIFRyZWVTY29wZSwgcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwpCkBAIC03
MjMsOCArNzM4LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNQZW5kaW5nU3R5bGVSZWNhbGMoKSBj
b25zdDsKICAgICB2b2lkIHN0eWxlUmVjYWxjVGltZXJGaXJlZChUaW1lcjxEb2N1bWVudD4qKTsK
IAotICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiwgTm9kZUxpc3RSb290VHlwZSwgTm9kZUxp
c3RJbnZhbGlkYXRpb25UeXBlKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqLCBOb2RlTGlzdFJvb3RUeXBlLCBOb2RlTGlz
dEludmFsaWRhdGlvblR5cGUpOworICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZUR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUgPSAwKSBjb25zdDsKICAg
ICB2b2lkIGNsZWFyTm9kZUxpc3RDYWNoZXMoKTsKIAogICAgIHZvaWQgYXR0YWNoTm9kZUl0ZXJh
dG9yKE5vZGVJdGVyYXRvciopOwpAQCAtMTQwOSw2ICsxNDI1LDcgQEAgcHJpdmF0ZToKICAgICBJ
bmhlcml0ZWRCb29sIG1fZGVzaWduTW9kZTsKIAogICAgIEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVO
b2RlTGlzdCo+IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQ7CisgICAgdW5zaWduZWQgbV9u
b2RlTGlzdENvdW50c1tudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzXTsKIAogICAgIEhUTUxD
b2xsZWN0aW9uKiBtX2NvbGxlY3Rpb25zW051bVVubmFtZWREb2N1bWVudENhY2hlZFR5cGVzXTsK
ICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBIVE1MTmFtZUNvbGxlY3Rpb24qPiBO
YW1lZENvbGxlY3Rpb25NYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmNwcAkocmV2aXNpb24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2Rl
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6fkR5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QoKQotewotfQotCiB1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBj
b25zdAogewogICAgIGlmIChpc0xlbmd0aENhY2hlVmFsaWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjYgKzM2LDE5IEBA
IGNsYXNzIE5vZGU7CiAKIGNsYXNzIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSB7CiBwdWJsaWM6
Ci0gICAgZW51bSBSb290VHlwZSB7Ci0gICAgICAgIFJvb3RlZEF0Tm9kZSwKLSAgICAgICAgUm9v
dGVkQXREb2N1bWVudCwKLSAgICB9OwotCi0gICAgZW51bSBJbnZhbGlkYXRpb25UeXBlIHsKLSAg
ICAgICAgQWx3YXlzSW52YWxpZGF0ZSwKLSAgICAgICAgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1
dGVDaGFuZ2UsCi0gICAgfTsKLQotICAgIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZShSb290VHlw
ZSByb290VHlwZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKQotICAgICAgICA6
IG1fcm9vdGVkQXREb2N1bWVudChyb290VHlwZSA9PSBSb290ZWRBdERvY3VtZW50KQotICAgICAg
ICAsIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKGludmFsaWRhdGlvblR5cGUg
PT0gQWx3YXlzSW52YWxpZGF0ZSkKKyAgICBEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2UoTm9kZUxp
c3RSb290VHlwZSByb290VHlwZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlv
blR5cGUpCisgICAgICAgIDogbV9yb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IE5vZGVMaXN0
SXNSb290ZWRBdERvY3VtZW50KQorICAgICAgICAsIG1faW52YWxpZGF0aW9uVHlwZShpbnZhbGlk
YXRpb25UeXBlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1faW52YWxpZGF0aW9uVHlwZSA9PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW52YWxpZGF0aW9uVHlwZSkpOwogICAgICAgICBjbGVhckNh
Y2hlKCk7CiAgICAgfQogCiBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzUm9vdGVk
QXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdGVkQXREb2N1bWVudDsgfQotICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZTsgfQorICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX2ludmFsaWRhdGlvblR5cGUgIT0gRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1
dGVDaGFuZ2VzOyB9CisgICAgQUxXQVlTX0lOTElORSBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBl
KCkgeyByZXR1cm4gbV9yb290ZWRBdERvY3VtZW50ID8gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1l
bnQgOiBOb2RlTGlzdElzUm9vdGVkQXROb2RlOyB9CisgICAgQUxXQVlTX0lOTElORSBOb2RlTGlz
dEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZT4obV9pbnZhbGlkYXRpb25UeXBlKTsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzSXRlbUNhY2hlVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzSXRlbUNhY2hlVmFsaWQ7IH0KQEAgLTkyLDcgKzg1LDcgQEAgcHJp
dmF0ZToKIAogICAgIC8vIEZyb20gRHluYW1pY05vZGVMaXN0CiAgICAgY29uc3QgdW5zaWduZWQg
bV9yb290ZWRBdERvY3VtZW50IDogMTsKLSAgICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZEludmFs
aWRhdGVPbkF0dHJpYnV0ZUNoYW5nZSA6IDE7CisgICAgY29uc3QgdW5zaWduZWQgbV9pbnZhbGlk
YXRpb25UeXBlIDogMzsKIH07CiAKIGNsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2Rl
TGlzdCwgcHVibGljIER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSB7CkBAIC0xMDYsNyArOTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIExhYmVsc05vZGVMaXN0VHlwZSwKICAgICAgICAgTWljcm9EYXRh
SXRlbUxpc3RUeXBlLAogICAgIH07Ci0gICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gb3duZXJOb2RlLCBSb290VHlwZSByb290VHlwZSwgSW52YWxpZGF0aW9uVHlwZSBpbnZhbGlk
YXRpb25UeXBlKQorICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG93bmVyTm9k
ZSwgTm9kZUxpc3RSb290VHlwZSByb290VHlwZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGlu
dmFsaWRhdGlvblR5cGUpCiAgICAgICAgIDogRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlKHJvb3RU
eXBlLCBpbnZhbGlkYXRpb25UeXBlKQogICAgICAgICAsIG1fb3duZXJOb2RlKG93bmVyTm9kZSkK
ICAgICB7IH0KQEAgLTEzOCwxNCArMTMxLDE5IEBAIHByaXZhdGU6CiAKIGNsYXNzIER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5EeW5hbWljU3VidHJlZU5vZGVMaXN0KCk7CisgICAgdmlydHVhbCB+RHluYW1pY1N1
YnRyZWVOb2RlTGlzdCgpCisgICAgeworICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzLCByb290VHlwZSgpLCBpbnZhbGlkYXRpb25UeXBlKCkp
OworICAgIH0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7CiAK
IHByb3RlY3RlZDoKLSAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSwgUm9vdFR5cGUgcm9vdFR5cGUgPSBSb290ZWRBdE5vZGUsIEludmFsaWRhdGlvblR5cGUg
aW52YWxpZGF0aW9uVHlwZSA9IEFsd2F5c0ludmFsaWRhdGUpCisgICAgRHluYW1pY1N1YnRyZWVO
b2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBp
bnZhbGlkYXRpb25UeXBlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlID0gTm9kZUxpc3RJc1Jv
b3RlZEF0Tm9kZSkKICAgICAgICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgcm9vdFR5cGUsIGlu
dmFsaWRhdGlvblR5cGUpCi0gICAgeyB9CisgICAgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdp
c3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcywgcm9vdFR5cGUsIGludmFsaWRhdGlvblR5
cGUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NaWNyb0RhdGFJdGVtTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmNwcAkocmV2aXNp
b24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1MaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBjb25zdCBTdHJpbmcmIE1pY3JvRGF0YUl0
ZW1MaXN0Ojp1bmRlZmluCiB9CiAKIE1pY3JvRGF0YUl0ZW1MaXN0OjpNaWNyb0RhdGFJdGVtTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIHR5cGVOYW1lcykKLSAg
ICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCisgICAgOiBEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25JdGVtQXR0ckNoYW5nZSkKICAgICAsIG1f
dHlwZU5hbWVzKHR5cGVOYW1lcywgZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiAgICAgLCBt
X29yaWdpbmFsVHlwZU5hbWVzKHR5cGVOYW1lcykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
Tm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBOYW1lTm9kZUxpc3Q6Ok5h
bWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpCi0gICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlKQorICAgIDogRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSwgSW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2Up
CiAgICAgLCBtX25hbWUobmFtZSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9u
IDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDg5LDggKzQ4OSw2IEBAIE93blB0cjxOb2RlUmFyZURhdGE+IE5vZGU6OmNyZWF0ZVJhcmVE
YXQKIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiB7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRh
KCkpOwotICAgIGlmICh0cmVlU2NvcGUoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKLSAg
ICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKIAogI2lmIEVOQUJMRShN
VVRBVElPTl9PQlNFUlZFUlMpCiAgICAgQVNTRVJUKCF0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVy
UmVnaXN0cnkoKSB8fCB0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKS0+aXNFbXB0
eSgpKTsKQEAgLTk2NSwyOCArOTYzLDExIEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0
c0NhY2hlQWZ0ZXIKICAgICBpZiAoIWF0dHJpYnV0ZU93bmVyRWxlbWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgLy8gRklYTUU6IE1vdmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBlYWNoIE5v
ZGVMaXN0IHR5cGUgY2FyZXMgYWJvdXQgdG8gYmUgYSBzdGF0aWMgb24gdGhlCi0gICAgLy8gYXBw
cm9wcmlhdGUgTm9kZUxpc3QgY2xhc3MuIFRoZW4gdXNlIHRob3NlIGxpc3RzIGhlcmUgYW5kIGlu
IGludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzCi0gICAgLy8gdG8gb25seSBp
bnZhbGlkYXRlIHRoZSBjYWNoZSB0eXBlcyB0aGF0IGRlcGVuZCBvbiB0aGUgYXR0cmlidXRlIHRo
YXQgY2hhbmdlZC4KLSAgICAvLyBGSVhNRTogS2VlcCB0cmFjayBvZiB3aGVuIHdlIGhhdmUgbm8g
Y2FjaGVzIG9mIGEgZ2l2ZW4gdHlwZSBzbyB0aGF0IHdlIGNhbiBhdm9pZCB0aGUgZm9yLWxvb3AK
LSAgICAvLyBiZWxvdyBldmVuIGlmIGEgcmVsYXRlZCBhdHRyaWJ1dGUgY2hhbmdlZCAoZS5nLiBp
ZiB3ZSBoYXZlIG5vIFJhZGlvTm9kZUxpc3RzLCB3ZSBkb24ndCBuZWVkCi0gICAgLy8gdG8gaW52
YWxpZGF0ZSBhbnkgY2FjaGVzIHdoZW4gaWQgYXR0cmlidXRlcyBjaGFuZ2UuKQotICAgIGlmIChh
dHRyTmFtZSAhPSBjbGFzc0F0dHIKLSNpZiBFTkFCTEUoTUlDUk9EQVRBKQotICAgICAgICAmJiBh
dHRyTmFtZSAhPSBpdGVtc2NvcGVBdHRyCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1wcm9w
QXR0cgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBpdGVtdHlwZUF0dHIKLSNlbmRpZgotICAgICAg
ICAmJiBhdHRyTmFtZSAhPSBuYW1lQXR0cgotICAgICAgICAmJiBhdHRyTmFtZSAhPSBmb3JBdHRy
Ci0gICAgICAgICYmIChhdHRyTmFtZSAhPSBpZEF0dHIgfHwgIWF0dHJpYnV0ZU93bmVyRWxlbWVu
dC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgaWYgKCFkb2N1bWVudCgpLT5zaG91bGRJ
bnZhbGlkYXRlRHluYW1pY1N1YnRyZWVOb2RlTGlzdCgmYXR0ck5hbWUpKQogICAgICAgICByZXR1
cm47CiAKICAgICBkb2N1bWVudCgpLT5jbGVhck5vZGVMaXN0Q2FjaGVzKCk7CiAKLSAgICBpZiAo
IXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgIEFTU0VSVCh0aGlzID09IG5vZGUgfHwgIW5vZGUtPmlzQXR0cmlidXRlTm9k
ZSgpKTsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQpAQCAtMTAwNCwxMSArOTg1
LDExIEBAIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXIKICAgICBpZiAo
aGFzUmFyZURhdGEoKSkKICAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2Fj
aGUoKTsKIAotICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoKTsKLQotICAgIGlm
ICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCisgICAgaWYgKCFkb2N1bWVudCgp
LT5zaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVOb2RlTGlzdCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBkb2N1bWVudCgpLT5jbGVhck5vZGVMaXN0Q2FjaGVzKCk7CisKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTU2Myw4ICsxNTQ0LDggQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVu
dHNCeQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpKQotICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3Rz
KHRoaXMpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2RlTGlzdD4odGhpcywgRHlu
YW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7Ci0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWlj
TmFtZTxUYWdOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUs
IGxvY2FsTmFtZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2Rl
TGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFnTm9kZUxpc3Q+KHRoaXMsIER5
bmFtaWNOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOworICAgIHJldHVybiBl
bnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFt
ZTxUYWdOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxv
Y2FsTmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnlU
YWdOYW1lTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKQpAQCAtMTU3NSwyMyArMTU1NiwyMyBAQCBQYXNzUmVmUHRyPE5vZGVM
aXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAgICAgaWYgKG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRv
bSkKICAgICAgICAgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSk7CiAKLSAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNo
ZVdpdGhRdWFsaWZpZWROYW1lKHRoaXMsIG5hbWVzcGFjZVVSSS5pc0VtcHR5KCkgPyBudWxsQXRv
bSA6IG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEo
KS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhpcywgbmFt
ZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUp
OwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5TmFtZShjb25z
dCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5l
bnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5vZGVMaXN0
Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdFR5cGUsIGVsZW1lbnROYW1lKTsK
KyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hl
V2l0aEF0b21pY05hbWU8TmFtZU5vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6Ok5hbWVO
b2RlTGlzdFR5cGUsIGVsZW1lbnROYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9k
ZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCiB7Ci0g
ICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2Fj
aGVXaXRoTmFtZTxDbGFzc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkNsYXNzTm9k
ZUxpc3RUeXBlLCBjbGFzc05hbWVzKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5z
dXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aE5hbWU8Q2xhc3NOb2RlTGlzdD4odGhpcywgRHlu
YW1pY05vZGVMaXN0OjpDbGFzc05vZGVMaXN0VHlwZSwgY2xhc3NOYW1lcyk7CiB9CiAKIFBhc3NS
ZWZQdHI8UmFkaW9Ob2RlTGlzdD4gTm9kZTo6cmFkaW9Ob2RlTGlzdChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9ybVRhZykgfHwgaGFzVGFnTmFt
ZShmaWVsZHNldFRhZykpOwotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2Rl
TGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4odGhpcywg
RHluYW1pY05vZGVMaXN0OjpSYWRpb05vZGVMaXN0VHlwZSwgbmFtZSk7CisgICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1l
PFJhZGlvTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6UmFkaW9Ob2RlTGlzdFR5cGUs
IG5hbWUpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjc4MCwx
MiArMjc2MSw5IEBAIHZvaWQgTm9kZTo6c2V0SXRlbVR5cGUoY29uc3QgU3RyaW5nJiB2YWwKIAog
I2VuZGlmCiAKLXZvaWQgTm9kZVJhcmVEYXRhOjpjcmVhdGVOb2RlTGlzdHMoTm9kZSogbm9kZSkK
K3ZvaWQgTm9kZVJhcmVEYXRhOjpjcmVhdGVOb2RlTGlzdHMoKQogewotICAgIEFTU0VSVChub2Rl
KTsKICAgICBzZXROb2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICBp
ZiAoVHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKSkKLSAgICAgICAgdHJl
ZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CiB9CiAKIHZvaWQgTm9kZVJhcmVEYXRhOjpjbGVh
ckNoaWxkTm9kZUxpc3RDYWNoZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCShy
ZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2F0b21pY05hbWVDYWNoZXMuaXNFbXB0eSgpICYmIG1fbmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYg
bV90YWdOb2RlTGlzdENhY2hlTlMuaXNFbXB0eSgpOwogICAgIH0KIAotICAgIHZvaWQgYWRvcHRU
cmVlU2NvcGUoVHJlZVNjb3BlKiBvbGRUcmVlU2NvcGUsIFRyZWVTY29wZSogbmV3VHJlZVNjb3Bl
LCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkKKyAgICB2b2lk
IGFkb3B0VHJlZVNjb3BlKERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3Vt
ZW50KQogICAgIHsKICAgICAgICAgaW52YWxpZGF0ZUNhY2hlcygpOwogCkBAIC0xMzgsOCArMTM4
LDggQEAgcHVibGljOgogICAgICAgICAgICAgZm9yIChOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0g
YXRvbWljTmFtZUNhY2hlRW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3Qt
PmlzUm9vdGVkQXREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50
LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsK
KyAgICAgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KGxpc3QsIGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxpZGF0aW9uVHlw
ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTE0NywxNSArMTQ3
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAoTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCk7IGl0ICE9IG5hbWVDYWNoZUVu
ZDsgKytpdCkgewogICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqIGxpc3Qg
PSBpdC0+c2Vjb25kOwogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5pc1Jvb3RlZEF0RG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50
LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCk7CisgICAgICAgICAgICAgICAg
ICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0LCBs
aXN0LT5yb290VHlwZSgpLCBsaXN0LT5pbnZhbGlkYXRpb25UeXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3Qs
IGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5cGUoKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9sZFRyZWVT
Y29wZSkKLSAgICAgICAgICAgIG9sZFRyZWVTY29wZS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwot
ICAgICAgICBuZXdUcmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICAgICAgICAgIFRh
Z05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnRW5kID0gbV90YWdOb2RlTGlzdENh
Y2hlTlMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0YWdFbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICBEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1
bWVudCgpKTsKKyAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxpZGF0aW9u
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KGxpc3QsIGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5
cGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKIHByaXZhdGU6CkBAIC0y
MTUsMTAgKzIxOSwxMCBAQCBwdWJsaWM6ICAgIAogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7
IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNldE5vZGVMaXN0cyhQYXNzT3duUHRy
PE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9CiAgICAg
Tm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3Rz
LmdldCgpOyB9Ci0gICAgTm9kZUxpc3RzTm9kZURhdGEqIGVuc3VyZU5vZGVMaXN0cyhOb2RlKiBu
b2RlKQorICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1cmVOb2RlTGlzdHMoKQogICAgIHsKICAg
ICAgICAgaWYgKCFtX25vZGVMaXN0cykKLSAgICAgICAgICAgIGNyZWF0ZU5vZGVMaXN0cyhub2Rl
KTsKKyAgICAgICAgICAgIGNyZWF0ZU5vZGVMaXN0cygpOwogICAgICAgICByZXR1cm4gbV9ub2Rl
TGlzdHMuZ2V0KCk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsK
QEAgLTM0MCw3ICszNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXROZWVkc0ZvY3VzQXBw
ZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaChib29sIG5lZWRzKSB7IG1fbmVlZHNGb2N1c0Fw
cGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2ggPSBuZWVkczsgfQogCiBwcml2YXRlOgotICAg
IHZvaWQgY3JlYXRlTm9kZUxpc3RzKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZU5vZGVMaXN0cygp
OwogCiAgICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZTsKICAgICBPd25QdHI8Tm9kZUxpc3RzTm9k
ZURhdGE+IG1fbm9kZUxpc3RzOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRh
Z05vZGVMaXN0OjpUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUp
Ci0gICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBSb290ZWRBdE5vZGUsIERv
Tm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdChyb290Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzKQogICAgICwg
bV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1l
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDEyMjQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBUcmVlU2NvcGU6OlRyZWVTY29w
ZShDb250YWluZXJOb2RlKiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCiAg
ICAgLCBtX3BhcmVudFRyZWVTY29wZSgwKQotICAgICwgbV9udW1Ob2RlTGlzdENhY2hlcygwKQog
ewogICAgIEFTU0VSVChyb290Tm9kZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShy
ZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDEwICs2MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUltYWdl
TWFwKEhUTUxNYXBFbGVtZW50Kik7CiAgICAgSFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFwKGNv
bnN0IFN0cmluZyYgdXJsKSBjb25zdDsKIAotICAgIHZvaWQgYWRkTm9kZUxpc3RDYWNoZSgpIHsg
KyttX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0gICAgdm9pZCByZW1vdmVOb2RlTGlzdENhY2hlKCkg
eyBBU1NFUlQobV9udW1Ob2RlTGlzdENhY2hlcyA+IDApOyAtLW1fbnVtTm9kZUxpc3RDYWNoZXM7
IH0KLSAgICBib29sIGhhc05vZGVMaXN0Q2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Ob2Rl
TGlzdENhY2hlczsgfQotCiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsK
IAogICAgIC8vIEZpbmQgZmlyc3QgYW5jaG9yIHdpdGggdGhlIGdpdmVuIG5hbWUuCkBAIC05NSw4
ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1fZWxlbWVudHNCeUlk
OwogICAgIERvY3VtZW50T3JkZXJlZE1hcCBtX2ltYWdlTWFwc0J5TmFtZTsKIAotICAgIHVuc2ln
bmVkIG1fbnVtTm9kZUxpc3RDYWNoZXM7Ci0KICAgICBtdXRhYmxlIFJlZlB0cjxET01TZWxlY3Rp
b24+IG1fc2VsZWN0aW9uOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29w
ZUFkb3B0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVB
ZG9wdGVyLmNwcAkocmV2aXNpb24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVT
Y29wZUFkb3B0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgVHJl
ZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3AKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBy
b290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgewogICAgICAg
ICBOb2RlUmFyZURhdGEqIHJhcmVEYXRhID0gbm9kZS0+c2V0VHJlZVNjb3BlKG5ld0RvY3VtZW50
ID09IG1fbmV3U2NvcGUgPyAwIDogbV9uZXdTY29wZSk7CiAgICAgICAgIGlmIChyYXJlRGF0YSAm
JiByYXJlRGF0YS0+bm9kZUxpc3RzKCkpCi0gICAgICAgICAgICByYXJlRGF0YS0+bm9kZUxpc3Rz
KCktPmFkb3B0VHJlZVNjb3BlKG1fb2xkU2NvcGUsIG1fbmV3U2NvcGUsIG9sZERvY3VtZW50LCBu
ZXdEb2N1bWVudCk7CisgICAgICAgICAgICByYXJlRGF0YS0+bm9kZUxpc3RzKCktPmFkb3B0VHJl
ZVNjb3BlKG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiAKICAgICAgICAgaWYgKHdpbGxNb3Zl
VG9OZXdEb2N1bWVudCkKICAgICAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChub2RlLCBv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uaAkocmV2aXNpb24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIE5vZGVMaXN0
OwogY2xhc3MgSFRNTENvbGxlY3Rpb25DYWNoZUJhc2UgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0
Q2FjaGVCYXNlIHsKIHB1YmxpYzoKICAgICBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZShDb2xsZWN0
aW9uVHlwZSB0eXBlLCBib29sIGluY2x1ZGVDaGlsZHJlbikKLSAgICAgICAgOiBEeW5hbWljTm9k
ZUxpc3RDYWNoZUJhc2UoUm9vdGVkQXROb2RlLCBBbHdheXNJbnZhbGlkYXRlKSAvLyBUaGVzZSB0
d28gZmxhZ3MgYXJlIG5ldmVyIHVzZWQKKyAgICAgICAgOiBEeW5hbWljTm9kZUxpc3RDYWNoZUJh
c2UoTm9kZUxpc3RJc1Jvb3RlZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFu
Z2VzKSAvLyBUaGVzZSB0d28gZmxhZ3MgYXJlIG5ldmVyIHVzZWQKICAgICAgICAgLCBtX2NhY2hl
ZEVsZW1lbnRzQXJyYXlPZmZzZXQoMCkKICAgICAgICAgLCBtX2NhY2hlVHJlZVZlcnNpb24oMCkK
ICAgICAgICAgLCBtX2hhc05hbWVDYWNoZShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvTGFiZWxhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9MYWJlbGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTIyNDE5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
NyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBMYWJlbGFibGVFbGVtZW50OjpsCiAgICAgaWYgKCFk
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxz
Tm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFy
QXRvbSk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5h
ZGRDYWNoZVdpdGhBdG9taWNOYW1lPExhYmVsc05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxp
c3Q6OkxhYmVsc05vZGVMaXN0VHlwZSwgc3RhckF0b20pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJjb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNp
b24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDE1ICszNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBMYWJlbHNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3Qo
Tm9kZSogZm9yTm9kZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoZm9yTm9kZSwgUm9v
dGVkQXREb2N1bWVudCkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoZm9yTm9kZSwgSW52
YWxpZGF0ZU9uRm9yQXR0ckNoYW5nZSwgTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQpCiB7Ci0g
ICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfQog
CiBMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+
bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVM
aXN0OjpMYWJlbHNOb2RlTGlzdFR5cGUsIHN0YXJBdG9tKTsKLSAgICBkb2N1bWVudCgpLT51bnJl
Z2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKIH0gCiAgICAgCiBib29sIExhYmVs
c05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTIyNDE5KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTYgKzM4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIFJhZGlvTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3QoTm9kZSogcm9vdE5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5v
ZGUsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpID8gUm9vdGVkQXREb2N1bWVudCA6IFJv
b3RlZEF0Tm9kZSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIEludmFs
aWRhdGVPbklkTmFtZUZvckF0dHJDaGFuZ2UsIHJvb3ROb2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcp
ID8gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQgOiBOb2RlTGlzdElzUm9vdGVkQXROb2RlKQog
ICAgICwgbV9uYW1lKG5hbWUpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJEeW5hbWljU3Vi
dHJlZU5vZGVMaXN0KHRoaXMpOwogfQogCiBSYWRpb05vZGVMaXN0Ojp+UmFkaW9Ob2RlTGlzdCgp
CiB7CiAgICAgb3duZXJOb2RlKCktPm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNO
YW1lKHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6UmFkaW9Ob2RlTGlzdFR5cGUsIG1fbmFtZSk7Ci0g
ICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgSFRNTElucHV0RWxlbWVudCogdG9SYWRpb0J1dHRvbklucHV0RWxl
bWVudChOb2RlKiBub2RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151863</attachid>
            <date>2012-07-11 22:52:29 -0700</date>
            <delta_ts>2012-07-12 12:55:58 -0700</delta_ts>
            <desc>Fixed build for microdata</desc>
            <filename>bug-91046-20120711225603.patch</filename>
            <type>text/plain</type>
            <size>33031</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA3LTExICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGludmFsaWRhdGVOb2RlTGlzdHND
YWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCBzaG91bGQgZHluYW1pY2FsbHkgZmlndXJlIG91dCB3
aGljaCBhdHRyaWJ1dGUgbmVlZHMgaW52YWxpZGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTA0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGFuIGFycmF5IG9mIGNvdW50ZXJzIChtX25v
ZGVMaXN0Q291bnRzKSBmb3IgZWFjaCBzZXQgb2YgYXR0cmlidXRlcyAoTm9kZUxpc3RJbnZhbGlk
YXRpb25UeXBlKSBub2RlIGxpc3RzIGNhcmUgYWJvdXQKKyAgICAgICAgdG8gRG9jdW1lbnQsIGFu
ZCBtYWRlIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QncyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rv
ciBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGVzZSBjb3VudGVycyB2aWEKKyAgICAgICAgcmVn
aXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVO
b2RlTGlzdCByZXNwZWN0aXZlbHkuIHNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVM
aXN0LAorICAgICAgICB3aGljaCBpcyBjYWxsZWQgYnkgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkLCB0aGVuIHVzZSB0aGVzZSBjb3VudGVycyB0byBkZXRlcm1p
bmUgd2hldGhlciBhIGdpdmVuCisgICAgICAgIGF0dHJpYnV0ZSBjaGFuZ2Ugc2hvdWxkIHJlc3Vs
dCBpbiBub2RlIGxpc3QgaW52YWxpZGF0aW9ucy4KKworICAgICAgICBBbHNvIHJlbW92ZWQgbV9u
dW1Ob2RlTGlzdENhY2hlcyBmcm9tIFRyZWVTY29wZSBiZWNhdXNlIHRoaXMgY291bnRlciBoYXMg
bm93IGJlY29tZSByZWR1bmRhbnQgd2l0aCBtX25vZGVMaXN0Q291bnRzLgorCisgICAgICAgICog
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6
Q2hpbGROb2RlTGlzdCk6IERvIG5vdCBpbnZhbGlkYXRlIG9uIGF0dHJpYnV0ZSBjaGFuZ2VzLgor
ICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNz
Tm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QpOiBJbnZhbGlkYXRlIG9uIGNsYXNzIGF0dHJpYnV0ZSBj
aGFuZ2VzLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6RG9jdW1lbnQpOiBJbml0aWFsaXplIG1fbm9kZUxpc3RDb3VudHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KTogQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBz
dXJlIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQsIG1fbm9kZUxpc3RDb3VudHMsIGFuZAor
ICAgICAgICBtX2NvbGxlY3Rpb25zIGFyZSBhbGwgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogVGhpcyBmdW5jdGlvbiBp
cyBub3cgY2FsbGVkIGZvciBhbGwgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgc3VwcG9zZWQKKyAg
ICAgICAgdG8ganVzdCBvbmVzIHJvb3RlZCBhdCB0aGUgZG9jdW1lbnQgaW4gb3JkZXIgdG8gaW5j
cmVtZW50IHRoZSBjb3VudGVyIGZvciBlYWNoIGludmFsaWRhdGlvbiB0eXBlLgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdEZvclR5cGUpOiBDaGVja3MgdGhlIGF0dHJpYnV0ZSBuYW1lIGFnYWluc3QgTm9kZUxpc3RJ
bnZhbGlkYXRpb25UeXBlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZEludmFs
aWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KTogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBh
dHRyaWJ1dGUgbmFtZSBtYXRjaGVzIHRoZSBpbnZhbGlkYXRpb24KKyAgICAgICAgdHlwZSBvZiB0
aGUgZXhpc3RpbmcgRHluYW1pY1N1YnRyZWVOb2RlTGlzdHMgaW4gdGhlIGRvY3VtZW50LiBJZiB0
aGUgYXR0cmlidXRlIG5hbWUgaXMgbm90IGdpdmVuICh1c2VkIHdoZW4gY2hpbGRyZW4gY2hhbmdl
KSwKKyAgICAgICAgdGhlbiBpdCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW55IER5bmFt
aWNTdWJ0cmVlTm9kZUxpc3RzLiBDb25jZXB0dWFsbHksIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHdy
aXR0ZW4gYXMgYSBsaXN0IG9mCisgICAgICAgICJpZiIgc3RhdGVtZW50cyB0aGF0IGNoZWNrcyB2
YWx1ZXMgaW4gbV9ub2RlTGlzdENvdW50cyBhbmQgdGhlIGF0dHJpYnV0ZSBuYW1lLiBXZSB1c2Ug
ImZvciIgbG9vcCBhbmQgc3dpdGNoIHN0YXRlbWVudCBpbnN0ZWFkCisgICAgICAgIHRvIHNoYXJl
IGxvZ2ljIGFuZCBkZXRlY3QgZnV0dXJlIGFkZGl0aW9uIG9mIHZhbHVlcyB0byBOb2RlTGlzdElu
dmFsaWRhdGlvblR5cGUuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChEb2N1
bWVudCk6IE1vdmVkIFJvb3RUeXBlIGFuZCBJbnZhbGlkYXRpb25UeXBlIGZyb20gRHluYW1pY05v
ZGVMaXN0Q2FjaGVCYXNlIGFuZCByZW5hbWVkIHRoZW0gdG8gTm9kZUxpc3RSb290VHlwZSBhbmQK
KyAgICAgICAgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIHJlc3BlY3RpdmVseSBpbiBvcmRlciB0
byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1dHVyZSBuYW1lIGNvbGxpc2lvbnMuIEFsc28g
dGhlIGludmFsaWRhdGlvbiB0eXBlCisgICAgICAgIG5vdyBjb250YWlucyA2IHZhbHVlcyBpbnN0
ZWFkIG9mIDIuCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljTm9kZUxpc3RDYWNoZUJhc2U6OkR5bmFtaWNOb2RlTGlzdENhY2hlQmFzZSk6
IAorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlOjpzaG91bGRJbnZh
bGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVM
aXN0Q2FjaGVCYXNlOjpyb290VHlwZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y05vZGVMaXN0Q2FjaGVCYXNlOjppbnZhbGlkYXRpb25UeXBlKTogQWRkZWQuCisgICAgICAgIChE
eW5hbWljTm9kZUxpc3RDYWNoZUJhc2UpOiBVc2VzIDMgYml0cyB0byBzdG9yZSBpbnZhbGlkYXRp
b24gdHlwZSBub3cgdGhhdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyBoYXZlIGluY3JlYXNlZCBmcm9t
IDIgdG8gNi4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5hbWlj
U3VidHJlZU5vZGVMaXN0KTogQ2FsbCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4K
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QpOiBDYWxsIHJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdC4KKyAgICAgICAg
KiBkb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRh
SXRlbUxpc3Q6Ok1pY3JvRGF0YUl0ZW1MaXN0KTogSW52YWxpZGF0ZSBvbiBpdGVtc2NvcGUsIGl0
ZW1wcm9wLCBhbmQgaXRlbXR5cGUgY29udGVudCBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAg
KiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
TmFtZU5vZGVMaXN0KTogSW52YWxpZGF0ZSBvbiBuYW1lIGF0dHJpYnV0ZSBjaGFuZ2VzLgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNsZWFyUmFyZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0
ZXJBdHRyaWJ1dGVDaGFuZ2VkKTogUmVwbGFjZWQgdGhlIGhhcmQgY29kZWQgY2hlY2sgbGlzdCBv
ZiBhdHRyaWJ1dGVzLCBieSBhIGNhbGwKKyAgICAgICAgdG8gc2hvdWxkSW52YWxpZGF0ZUR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9k
ZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCk6IENhbGxzIHNob3VsZEludmFsaWRhdGVE
eW5hbWljU3VidHJlZU5vZGVMaXN0LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVu
dHNCeVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05h
bWVOUyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OnJhZGlvTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVE
YXRhOjpjcmVhdGVOb2RlTGlzdHMpOgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjphZG9wdFRyZWVTY29wZSk6IFVucmVn
aXN0ZXIgYW5kIHJlZ2lzdGVyIG5vZGUgbGlzdHMgaW4gbV90YWdOb2RlTGlzdENhY2hlTlMgc2lu
Y2UgYWxsIG5vZGUgbGlzdHMKKyAgICAgICAgbmVlZCB0byBiZSBhY2NvdW50ZWQgaW4gbV9ub2Rl
TGlzdENvdW50cy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTm9kZUxp
c3RzKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdCk6IERvIG5v
dCBpbnZhbGlkYXRlIG9uIGFueSBhdHRyaWJ1dGUgY2hhbmdlcy4KKyAgICAgICAgKiBkb20vVHJl
ZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6VHJlZVNjb3BlKTogTm8g
bG9uZ2VyIGluaXRpYWxpemVzIG1fbnVtTm9kZUxpc3RDYWNoZXMgc2luY2UgaXQgaGFzIGJlZW4g
cmVtb3ZlZC4KKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmg6CisgICAgICAgIChUcmVlU2NvcGUp
OiBSZW1vdmVkIG1fbnVtTm9kZUxpc3RDYWNoZXMuCisgICAgICAgICogZG9tL1RyZWVTY29wZUFk
b3B0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVU
b05ld1Njb3BlKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZTo6SFRNTENvbGxlY3Rpb25DYWNoZUJhc2Up
OiBKdXN0IHBhc3MgaW4gRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzIGZvciBub3cg
c2luY2UKKyAgICAgICAgaXQncyBuZXZlciB1c2VkIGluIEhUTUxDb2xsZWN0aW9ucy4KKyAgICAg
ICAgKiBodG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxh
YmxlRWxlbWVudDo6bGFiZWxzKToKKyAgICAgICAgKiBodG1sL0xhYmVsc05vZGVMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdCk6IEludmFs
aWRhdGUgb24gZm9yIGNvbnRlbnQgYXR0cmlidXRlIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3Jl
OjpMYWJlbHNOb2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKiBodG1sL1JhZGlv
Tm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2Rl
TGlzdCk6IEludmFsaWRhdGUgb24gaWQsIG5hbWUsIGFuZCBmb3IgY29udGVudCBhdHRyaWJ1dGUg
Y2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0
KToKKwogMjAxMi0wNy0xMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWNjZXNzaW5nIHdpZHRoIG9yIGhlaWdodCBvZiBhIGRldGFjaGVkIGltYWdlIGlucHV0
IGVsZW1lbnQgY2F1c2VzIGNyYXNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUp
Ci0gICAgOiBEeW5hbWljTm9kZUxpc3Qobm9kZSwgUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZSkKKyAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlLCBOb2RlTGlz
dElzUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5nZXMpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDbGFzc05vZGVMaXN0
OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYg
Y2xhc3NOYW1lcykKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCisgICAg
OiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25DbGFzc0F0dHJD
aGFuZ2UpCiAgICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgZG9jdW1lbnQoKS0+aW5RdWly
a3NNb2RlKCkpCiAgICAgLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyhjbGFzc05hbWVzKQogewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDEwIEBA
IERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IEsKIAogICAgIHN0YXRpYyBp
bnQgZG9jSUQgPSAwOwogICAgIG1fZG9jSUQgPSBkb2NJRCsrOwotICAgIAorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlzdENvdW50cyk7IGkr
KykKKyAgICAgICAgbV9ub2RlTGlzdENvdW50c1tpXSA9IDA7CisKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX2NvbGxlY3Rpb25zKTsgaSsrKQogICAgICAg
ICBtX2NvbGxlY3Rpb25zW2ldID0gMDsKIApAQCAtNjQ4LDYgKzY1MSwxNCBAQCBEb2N1bWVudDo6
fkRvY3VtZW50KCkKICAgICBpZiAoaGFzUmFyZURhdGEoKSkKICAgICAgICAgY2xlYXJSYXJlRGF0
YSgpOwogCisgICAgQVNTRVJUKCFtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnNpemUoKSk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX25vZGVM
aXN0Q291bnRzKTsgaSsrKQorICAgICAgICBBU1NFUlQoIW1fbm9kZUxpc3RDb3VudHNbaV0pOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9jb2xsZWN0
aW9ucyk7IGkrKykKKyAgICAgICAgQVNTRVJUKCFtX2NvbGxlY3Rpb25zW2ldKTsKKwogICAgIG1f
ZG9jdW1lbnQgPSAwOwogCiAgICAgSW5zcGVjdG9yQ291bnRlcnM6OmRlY3JlbWVudENvdW50ZXIo
SW5zcGVjdG9yQ291bnRlcnM6OkRvY3VtZW50Q291bnRlcik7CkBAIC0zODY1LDE0ICszODc2LDYw
IEBAIHZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChFbGVtZW50KiBuKQogICAgICAgICBuLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRHluYW1p
Y1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQordm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqIGxpc3QsIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9u
VHlwZSBpbnZhbGlkYXRpb25UeXBlKQoreworICAgIG1fbm9kZUxpc3RDb3VudHNbaW52YWxpZGF0
aW9uVHlwZV0rKzsKKyAgICBpZiAocm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1l
bnQpCisgICAgICAgIG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuYWRkKGxpc3QpOworfQor
Cit2b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KiBsaXN0LCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlz
dEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKK3sKKyAgICBtX25vZGVMaXN0Q291
bnRzW2ludmFsaWRhdGlvblR5cGVdLS07CisgICAgaWYgKHJvb3RUeXBlID09IE5vZGVMaXN0SXNS
b290ZWRBdERvY3VtZW50KSB7CisgICAgICAgIEFTU0VSVChtX2xpc3RzSW52YWxpZGF0ZWRBdERv
Y3VtZW50LmNvbnRhaW5zKGxpc3QpKTsKKyAgICAgICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1
bWVudC5yZW1vdmUobGlzdCk7CisgICAgfQorfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IHNob3VsZEludmFsaWRhdGVOb2RlTGlzdEZvclR5cGUoTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBl
IHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogewotICAgIG1fbGlzdHNJbnZh
bGlkYXRlZEF0RG9jdW1lbnQuYWRkKGxpc3QpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgSW52YWxpZGF0ZU9uQ2xhc3NBdHRyQ2hhbmdlOgorICAgICAgICByZXR1cm4gYXR0ck5hbWUg
PT0gY2xhc3NBdHRyOworICAgIGNhc2UgSW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2U6CisgICAg
ICAgIHJldHVybiBhdHRyTmFtZSA9PSBuYW1lQXR0cjsKKyAgICBjYXNlIEludmFsaWRhdGVPbkZv
ckF0dHJDaGFuZ2U6CisgICAgICAgIHJldHVybiBhdHRyTmFtZSA9PSBmb3JBdHRyOworICAgIGNh
c2UgSW52YWxpZGF0ZU9uSWROYW1lRm9yQXR0ckNoYW5nZToKKyAgICAgICAgcmV0dXJuIGF0dHJO
YW1lID09IG5hbWVBdHRyIHx8IGF0dHJOYW1lID09IGlkQXR0ciB8fCBhdHRyTmFtZSA9PSBmb3JB
dHRyOworICAgIGNhc2UgSW52YWxpZGF0ZU9uSXRlbUF0dHJDaGFuZ2U6CisjaWYgRU5BQkxFKE1J
Q1JPREFUQSkKKyAgICAgICAgcmV0dXJuIGF0dHJOYW1lID09IGl0ZW1zY29wZUF0dHIgfHwgYXR0
ck5hbWUgPT0gaXRlbXByb3BBdHRyIHx8IGF0dHJOYW1lID09IGl0ZW10eXBlQXR0cjsKKyNlbmRp
ZiAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaAorICAgIGNhc2UgRG9Ob3RJbnZhbGlkYXRl
T25BdHRyaWJ1dGVDaGFuZ2VzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QqIGxpc3QpCitib29sIERvY3VtZW50OjpzaG91bGRJbnZhbGlkYXRlRHluYW1pY1N1YnRy
ZWVOb2RlTGlzdChjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkgY29uc3QKIHsKLSAgICBt
X2xpc3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsKKyAgICBpZiAoYXR0ck5h
bWUpIHsKKyAgICAgICAgZm9yIChpbnQgdHlwZSA9IERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRl
Q2hhbmdlcyArIDE7IHR5cGUgPCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzOyB0eXBlKysp
IHsKKyAgICAgICAgICAgIGlmIChtX25vZGVMaXN0Q291bnRzW3R5cGVdICYmIHNob3VsZEludmFs
aWRhdGVOb2RlTGlzdEZvclR5cGUoc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBl
Pih0eXBlKSwgKmF0dHJOYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzOyB0eXBlKyspIHsKKyAgICAg
ICAgaWYgKG1fbm9kZUxpc3RDb3VudHNbdHlwZV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmNsZWFyTm9k
ZUxpc3RDYWNoZXMoKQpAQCAtNTk2NSw3ICs2MDIyLDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4g
RG9jdW1lbnQ6OmdldEl0ZW1zKAogICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0
ZSBhbiB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgdG8gbWFwIHN1Y2ggcmVxdWVzdCBpbiB0aGUg
Y2FjaGUuCiAgICAgU3RyaW5nIGxvY2FsVHlwZU5hbWVzID0gdHlwZU5hbWVzLmlzTnVsbCgpID8g
TWljcm9EYXRhSXRlbUxpc3Q6OnVuZGVmaW5lZEl0ZW1UeXBlKCkgOiB0eXBlTmFtZXM7CiAKLSAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNo
ZVdpdGhOYW1lPE1pY3JvRGF0YUl0ZW1MaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6Ok1pY3Jv
RGF0YUl0ZW1MaXN0VHlwZSwgbG9jYWxUeXBlTmFtZXMpOworICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoTmFtZTxNaWNyb0RhdGFJdGVt
TGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpNaWNyb0RhdGFJdGVtTGlzdFR5cGUsIGxvY2Fs
VHlwZU5hbWVzKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNp
b24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Niw2ICsxODYsMjEgQEAgZW51bSBQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2Ugewog
CiBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVGbGFnIHsgUmVjYWxjU3R5bGVJbW1lZGlhdGVseSwg
RGVmZXJSZWNhbGNTdHlsZSwgUmVjYWxjU3R5bGVJZk5lZWRlZCB9OwogCitlbnVtIE5vZGVMaXN0
Um9vdFR5cGUgeworICAgIE5vZGVMaXN0SXNSb290ZWRBdE5vZGUsCisgICAgTm9kZUxpc3RJc1Jv
b3RlZEF0RG9jdW1lbnQsCit9OworCitlbnVtIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB7Cisg
ICAgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzID0gMCwKKyAgICBJbnZhbGlkYXRl
T25DbGFzc0F0dHJDaGFuZ2UsCisgICAgSW52YWxpZGF0ZU9uTmFtZUF0dHJDaGFuZ2UsCisgICAg
SW52YWxpZGF0ZU9uRm9yQXR0ckNoYW5nZSwKKyAgICBJbnZhbGlkYXRlT25JZE5hbWVGb3JBdHRy
Q2hhbmdlLAorICAgIEludmFsaWRhdGVPbkl0ZW1BdHRyQ2hhbmdlLAorfTsKK2NvbnN0IGludCBu
dW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzID0gSW52YWxpZGF0ZU9uSXRlbUF0dHJDaGFuZ2Ug
KyAxOworCiBjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDb250YWluZXJOb2RlLCBwdWJsaWMgVHJl
ZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwm
IHVybCkKQEAgLTcyMyw4ICs3MzgsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1BlbmRpbmdTdHls
ZVJlY2FsYygpIGNvbnN0OwogICAgIHZvaWQgc3R5bGVSZWNhbGNUaW1lckZpcmVkKFRpbWVyPERv
Y3VtZW50PiopOwogCi0gICAgdm9pZCByZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHlu
YW1pY1N1YnRyZWVOb2RlTGlzdCopOwotICAgIHZvaWQgdW5yZWdpc3RlckR5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJEeW5h
bWljU3VidHJlZU5vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqLCBOb2RlTGlzdFJvb3RU
eXBlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUpOworICAgIHZvaWQgdW5yZWdpc3RlckR5bmFt
aWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCosIE5vZGVMaXN0Um9vdFR5
cGUsIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSk7CisgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRl
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSA9IDAp
IGNvbnN0OwogICAgIHZvaWQgY2xlYXJOb2RlTGlzdENhY2hlcygpOwogCiAgICAgdm9pZCBhdHRh
Y2hOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9yKik7CkBAIC0xNDA5LDYgKzE0MjUsNyBAQCBwcml2
YXRlOgogICAgIEluaGVyaXRlZEJvb2wgbV9kZXNpZ25Nb2RlOwogCiAgICAgSGFzaFNldDxEeW5h
bWljU3VidHJlZU5vZGVMaXN0Kj4gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudDsKKyAgICB1
bnNpZ25lZCBtX25vZGVMaXN0Q291bnRzW251bU5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZXNdOwog
CiAgICAgSFRNTENvbGxlY3Rpb24qIG1fY29sbGVjdGlvbnNbTnVtVW5uYW1lZERvY3VtZW50Q2Fj
aGVkVHlwZXNdOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEhUTUxOYW1lQ29s
bGVjdGlvbio+IE5hbWVkQ29sbGVjdGlvbk1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5h
bWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1EeW5hbWljU3VidHJlZU5vZGVMaXN0Ojp+RHluYW1pY1N1
YnRyZWVOb2RlTGlzdCgpCi17Ci19Ci0KIHVuc2lnbmVkIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6
Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMTIyNDE5KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwy
NiArMzYsMTkgQEAgY2xhc3MgTm9kZTsKIAogY2xhc3MgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNl
IHsKIHB1YmxpYzoKLSAgICBlbnVtIFJvb3RUeXBlIHsKLSAgICAgICAgUm9vdGVkQXROb2RlLAot
ICAgICAgICBSb290ZWRBdERvY3VtZW50LAotICAgIH07Ci0KLSAgICBlbnVtIEludmFsaWRhdGlv
blR5cGUgewotICAgICAgICBBbHdheXNJbnZhbGlkYXRlLAotICAgICAgICBEb05vdEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZSwKLSAgICB9OwotCi0gICAgRHluYW1pY05vZGVMaXN0Q2FjaGVC
YXNlKFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUp
Ci0gICAgICAgIDogbV9yb290ZWRBdERvY3VtZW50KHJvb3RUeXBlID09IFJvb3RlZEF0RG9jdW1l
bnQpCi0gICAgICAgICwgbV9zaG91bGRJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UoaW52YWxp
ZGF0aW9uVHlwZSA9PSBBbHdheXNJbnZhbGlkYXRlKQorICAgIER5bmFtaWNOb2RlTGlzdENhY2hl
QmFzZShOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUg
aW52YWxpZGF0aW9uVHlwZSkKKyAgICAgICAgOiBtX3Jvb3RlZEF0RG9jdW1lbnQocm9vdFR5cGUg
PT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQpCisgICAgICAgICwgbV9pbnZhbGlkYXRpb25U
eXBlKGludmFsaWRhdGlvblR5cGUpCiAgICAgeworICAgICAgICBBU1NFUlQobV9pbnZhbGlkYXRp
b25UeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnZhbGlkYXRpb25UeXBlKSk7CiAgICAg
ICAgIGNsZWFyQ2FjaGUoKTsKICAgICB9CiAKIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgaXNSb290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290ZWRBdERvY3VtZW50
OyB9Ci0gICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdl
OyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZEludmFsaWRhdGVPbkF0dHJpYnV0ZUNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW52YWxpZGF0aW9uVHlwZSAhPSBEb05vdEludmFsaWRh
dGVPbkF0dHJpYnV0ZUNoYW5nZXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIE5vZGVMaXN0Um9vdFR5
cGUgcm9vdFR5cGUoKSB7IHJldHVybiBtX3Jvb3RlZEF0RG9jdW1lbnQgPyBOb2RlTGlzdElzUm9v
dGVkQXREb2N1bWVudCA6IE5vZGVMaXN0SXNSb290ZWRBdE5vZGU7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlPihtX2ludmFsaWRhdGlv
blR5cGUpOyB9CiAKIHByb3RlY3RlZDoKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNJdGVtQ2Fj
aGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtQ2FjaGVWYWxpZDsgfQpAQCAtOTIsNyAr
ODUsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRnJvbSBEeW5hbWljTm9kZUxpc3QKICAgICBjb25z
dCB1bnNpZ25lZCBtX3Jvb3RlZEF0RG9jdW1lbnQgOiAxOwotICAgIGNvbnN0IHVuc2lnbmVkIG1f
c2hvdWxkSW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlIDogMTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBtX2ludmFsaWRhdGlvblR5cGUgOiAzOwogfTsKIAogY2xhc3MgRHluYW1pY05vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0LCBwdWJsaWMgRHluYW1pY05vZGVMaXN0Q2FjaGVCYXNlIHsKQEAgLTEw
Niw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgTGFiZWxzTm9kZUxpc3RUeXBlLAogICAgICAg
ICBNaWNyb0RhdGFJdGVtTGlzdFR5cGUsCiAgICAgfTsKLSAgICBEeW5hbWljTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiBvd25lck5vZGUsIFJvb3RUeXBlIHJvb3RUeXBlLCBJbnZhbGlkYXRpb25U
eXBlIGludmFsaWRhdGlvblR5cGUpCisgICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gb3duZXJOb2RlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlzdEludmFsaWRh
dGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSkKICAgICAgICAgOiBEeW5hbWljTm9kZUxpc3RDYWNo
ZUJhc2Uocm9vdFR5cGUsIGludmFsaWRhdGlvblR5cGUpCiAgICAgICAgICwgbV9vd25lck5vZGUo
b3duZXJOb2RlKQogICAgIHsgfQpAQCAtMTM4LDE0ICsxMzEsMTkgQEAgcHJpdmF0ZToKIAogY2xh
c3MgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgewogcHVi
bGljOgotICAgIHZpcnR1YWwgfkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoKTsKKyAgICB2aXJ0dWFs
IH5EeW5hbWljU3VidHJlZU5vZGVMaXN0KCkKKyAgICB7CisgICAgICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMsIHJvb3RUeXBlKCksIGludmFsaWRh
dGlvblR5cGUoKSk7CisgICAgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBP
VkVSUklERTsKIAogcHJvdGVjdGVkOgotICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiBub2RlLCBSb290VHlwZSByb290VHlwZSA9IFJvb3RlZEF0Tm9kZSwgSW52YWxp
ZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlID0gQWx3YXlzSW52YWxpZGF0ZSkKKyAgICBEeW5h
bWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgTm9kZUxpc3RJbnZhbGlk
YXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUsIE5vZGVMaXN0Um9vdFR5cGUgcm9vdFR5cGUgPSBO
b2RlTGlzdElzUm9vdGVkQXROb2RlKQogICAgICAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlLCBy
b290VHlwZSwgaW52YWxpZGF0aW9uVHlwZSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgIGRvY3Vt
ZW50KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzLCByb290VHlwZSwgaW52
YWxpZGF0aW9uVHlwZSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3YXJk
c0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdP
ZmZzZXQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0YUl0ZW1MaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRlbUxpc3Qu
Y3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRl
bUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGNvbnN0IFN0cmluZyYg
TWljcm9EYXRhSXRlbUxpc3Q6OnVuZGVmaW4KIH0KIAogTWljcm9EYXRhSXRlbUxpc3Q6Ok1pY3Jv
RGF0YUl0ZW1MaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgdHlw
ZU5hbWVzKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkKKyAgICA6IER5
bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIEludmFsaWRhdGVPbkl0ZW1BdHRyQ2hhbmdl
KQogICAgICwgbV90eXBlTmFtZXModHlwZU5hbWVzLCBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUo
KSkKICAgICAsIG1fb3JpZ2luYWxUeXBlTmFtZXModHlwZU5hbWVzKQogewpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIE5hbWVO
b2RlTGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUp
CisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBJbnZhbGlkYXRlT25OYW1l
QXR0ckNoYW5nZSkKICAgICAsIG1fbmFtZShuYW1lKQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gMTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODksOCArNDg5LDYgQEAgT3duUHRyPE5vZGVSYXJlRGF0YT4gTm9kZTo6
Y3JlYXRlUmFyZURhdAogdm9pZCBOb2RlOjpjbGVhclJhcmVEYXRhKCkKIHsKICAgICBBU1NFUlQo
aGFzUmFyZURhdGEoKSk7Ci0gICAgaWYgKHRyZWVTY29wZSgpICYmIHJhcmVEYXRhKCktPm5vZGVM
aXN0cygpKQotICAgICAgICB0cmVlU2NvcGUoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogCiAj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBBU1NFUlQoIXRyYW5zaWVudE11dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHx8IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3Ry
eSgpLT5pc0VtcHR5KCkpOwpAQCAtOTY1LDI4ICs5NjMsMTEgQEAgdm9pZCBOb2RlOjppbnZhbGlk
YXRlTm9kZUxpc3RzQ2FjaGVBZnRlcgogICAgIGlmICghYXR0cmlidXRlT3duZXJFbGVtZW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogTW92ZSB0aGUgbGlzdCBvZiBhdHRyaWJ1
dGVzIGVhY2ggTm9kZUxpc3QgdHlwZSBjYXJlcyBhYm91dCB0byBiZSBhIHN0YXRpYyBvbiB0aGUK
LSAgICAvLyBhcHByb3ByaWF0ZSBOb2RlTGlzdCBjbGFzcy4gVGhlbiB1c2UgdGhvc2UgbGlzdHMg
aGVyZSBhbmQgaW4gaW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMKLSAgICAv
LyB0byBvbmx5IGludmFsaWRhdGUgdGhlIGNhY2hlIHR5cGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBh
dHRyaWJ1dGUgdGhhdCBjaGFuZ2VkLgotICAgIC8vIEZJWE1FOiBLZWVwIHRyYWNrIG9mIHdoZW4g
d2UgaGF2ZSBubyBjYWNoZXMgb2YgYSBnaXZlbiB0eXBlIHNvIHRoYXQgd2UgY2FuIGF2b2lkIHRo
ZSBmb3ItbG9vcAotICAgIC8vIGJlbG93IGV2ZW4gaWYgYSByZWxhdGVkIGF0dHJpYnV0ZSBjaGFu
Z2VkIChlLmcuIGlmIHdlIGhhdmUgbm8gUmFkaW9Ob2RlTGlzdHMsIHdlIGRvbid0IG5lZWQKLSAg
ICAvLyB0byBpbnZhbGlkYXRlIGFueSBjYWNoZXMgd2hlbiBpZCBhdHRyaWJ1dGVzIGNoYW5nZS4p
Ci0gICAgaWYgKGF0dHJOYW1lICE9IGNsYXNzQXR0cgotI2lmIEVOQUJMRShNSUNST0RBVEEpCi0g
ICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW1zY29wZUF0dHIKLSAgICAgICAgJiYgYXR0ck5hbWUg
IT0gaXRlbXByb3BBdHRyCi0gICAgICAgICYmIGF0dHJOYW1lICE9IGl0ZW10eXBlQXR0cgotI2Vu
ZGlmCi0gICAgICAgICYmIGF0dHJOYW1lICE9IG5hbWVBdHRyCi0gICAgICAgICYmIGF0dHJOYW1l
ICE9IGZvckF0dHIKLSAgICAgICAgJiYgKGF0dHJOYW1lICE9IGlkQXR0ciB8fCAhYXR0cmlidXRl
T3duZXJFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKKyAgICBpZiAoIWRvY3VtZW50
KCktPnNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KCZhdHRyTmFtZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoKTsK
IAotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+aXNB
dHRyaWJ1dGVOb2RlKCkpOwogICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCkBAIC0x
MDA0LDExICs5ODUsMTEgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRl
cgogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxk
Tm9kZUxpc3RDYWNoZSgpOwogCi0gICAgZG9jdW1lbnQoKS0+Y2xlYXJOb2RlTGlzdENhY2hlcygp
OwotCi0gICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKKyAgICBpZiAo
IWRvY3VtZW50KCktPnNob3VsZEludmFsaWRhdGVEeW5hbWljU3VidHJlZU5vZGVMaXN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGRvY3VtZW50KCktPmNsZWFyTm9kZUxpc3RDYWNoZXMoKTsK
KwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAg
Y29udGludWU7CkBAIC0xNTYzLDggKzE1NDQsOCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2Rl
OjpnZXRFbGVtZW50c0J5CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKGRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHModGhpcyktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTFRhZ05vZGVMaXN0
Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKLSAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpLT5hZGRDYWNo
ZVdpdGhBdG9taWNOYW1lPFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05v
ZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2RlTGlz
dD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7Cisg
ICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdp
dGhBdG9taWNOYW1lPFRhZ05vZGVMaXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlRhZ05vZGVM
aXN0VHlwZSwgbG9jYWxOYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0
RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCkBAIC0xNTc1LDIzICsxNTU2LDIzIEBAIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAobmFtZXNwYWNlVVJJ
ID09IHN0YXJBdG9tKQogICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWUobG9jYWxO
YW1lKTsKIAotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHModGhp
cyktPmFkZENhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhpcywgbmFtZXNwYWNlVVJJLmlzRW1wdHko
KSA/IG51bGxBdG9tIDogbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOworICAgIHJldHVybiBlbnN1
cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFt
ZSh0aGlzLCBuYW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBuYW1lc3BhY2VVUkks
IGxvY2FsTmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRz
QnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxO
YW1lTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlzdDo6TmFtZU5vZGVMaXN0VHlwZSwgZWxl
bWVudE5hbWUpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMo
KS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxOYW1lTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2Rl
TGlzdDo6TmFtZU5vZGVMaXN0VHlwZSwgZWxlbWVudE5hbWUpOwogfQogCiBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NO
YW1lcykKIHsKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRo
aXMpLT5hZGRDYWNoZVdpdGhOYW1lPENsYXNzTm9kZUxpc3Q+KHRoaXMsIER5bmFtaWNOb2RlTGlz
dDo6Q2xhc3NOb2RlTGlzdFR5cGUsIGNsYXNzTmFtZXMpOworICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLT5lbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoTmFtZTxDbGFzc05vZGVMaXN0
Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3RUeXBlLCBjbGFzc05hbWVzKTsK
IH0KIAogUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBOb2RlOjpyYWRpb05vZGVMaXN0KGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSB8
fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7Ci0gICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkt
PmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxSYWRpb05vZGVM
aXN0Pih0aGlzLCBEeW5hbWljTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBuYW1lKTsKKyAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0
aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpSYWRpb05v
ZGVMaXN0VHlwZSwgbmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gTm9kZTo6cXVlcnlT
ZWxlY3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYgZWMp
CkBAIC0yNzgwLDEyICsyNzYxLDkgQEAgdm9pZCBOb2RlOjpzZXRJdGVtVHlwZShjb25zdCBTdHJp
bmcmIHZhbAogCiAjZW5kaWYKIAotdm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cyhO
b2RlKiBub2RlKQordm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cygpCiB7Ci0gICAg
QVNTRVJUKG5vZGUpOwogICAgIHNldE5vZGVMaXN0cyhOb2RlTGlzdHNOb2RlRGF0YTo6Y3JlYXRl
KCkpOwotICAgIGlmIChUcmVlU2NvcGUqIHRyZWVTY29wZSA9IG5vZGUtPnRyZWVTY29wZSgpKQot
ICAgICAgICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKIH0KIAogdm9pZCBOb2RlUmFy
ZURhdGE6OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9uYW1lQ2FjaGVzLmlz
RW1wdHkoKSAmJiBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCk7CiAgICAgfQogCi0gICAg
dm9pZCBhZG9wdFRyZWVTY29wZShUcmVlU2NvcGUqIG9sZFRyZWVTY29wZSwgVHJlZVNjb3BlKiBu
ZXdUcmVlU2NvcGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50
KQorICAgIHZvaWQgYWRvcHRUcmVlU2NvcGUoRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVu
dCogbmV3RG9jdW1lbnQpCiAgICAgewogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVzKCk7CiAKQEAg
LTEzOCw4ICsxMzgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKE5vZGVMaXN0QXRvbWlj
TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFtZUNhY2hlcy5iZWdp
bigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBE
eW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgICAg
ICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
b2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KGxpc3QpOwotICAg
ICAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVM
aXN0KGxpc3QpOworICAgICAgICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckR5
bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxp
ZGF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQtPnJlZ2lzdGVy
RHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0LCBsaXN0LT5yb290VHlwZSgpLCBsaXN0LT5pbnZh
bGlkYXRpb25UeXBlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAt
MTQ3LDE1ICsxNDcsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yIChOb2RlTGlzdE5hbWVD
YWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX25hbWVDYWNoZXMuYmVnaW4oKTsgaXQgIT0g
bmFtZUNhY2hlRW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdCogbGlzdCA9IGl0LT5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgaWYgKGxpc3QtPmlzUm9v
dGVkQXREb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJl
Z2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKLSAgICAgICAgICAgICAgICAgICAg
bmV3RG9jdW1lbnQtPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVM
aXN0KGxpc3QsIGxpc3QtPnJvb3RUeXBlKCksIGxpc3QtPmludmFsaWRhdGlvblR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9k
ZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52YWxpZGF0aW9uVHlwZSgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBp
ZiAob2xkVHJlZVNjb3BlKQotICAgICAgICAgICAgb2xkVHJlZVNjb3BlLT5yZW1vdmVOb2RlTGlz
dENhY2hlKCk7Ci0gICAgICAgIG5ld1RyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOworICAg
ICAgICAgICAgVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBtX3Rh
Z05vZGVMaXN0Q2FjaGVOUy5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNo
ZU5TOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0
ICE9IHRhZ0VuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxp
c3QqIGxpc3QgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgICAgIEFTU0VSVCghbGlzdC0+aXNS
b290ZWRBdERvY3VtZW50KCkpOworICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lz
dGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChsaXN0LCBsaXN0LT5yb290VHlwZSgpLCBsaXN0LT5p
bnZhbGlkYXRpb25UeXBlKCkpOworICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rl
ckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QobGlzdCwgbGlzdC0+cm9vdFR5cGUoKSwgbGlzdC0+aW52
YWxpZGF0aW9uVHlwZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogcHJp
dmF0ZToKQEAgLTIxNSwxMCArMjE5LDEwIEBAIHB1YmxpYzogICAgCiAgICAgdm9pZCBjbGVhck5v
ZGVMaXN0cygpIHsgbV9ub2RlTGlzdHMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Tm9kZUxpc3Rz
KFBhc3NPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3RzID0gbGlz
dHM7IH0KICAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlTGlzdHMuZ2V0KCk7IH0KLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxp
c3RzKE5vZGUqIG5vZGUpCisgICAgTm9kZUxpc3RzTm9kZURhdGEqIGVuc3VyZU5vZGVMaXN0cygp
CiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQotICAgICAgICAgICAgY3JlYXRlTm9k
ZUxpc3RzKG5vZGUpOworICAgICAgICAgICAgY3JlYXRlTm9kZUxpc3RzKCk7CiAgICAgICAgIHJl
dHVybiBtX25vZGVMaXN0cy5nZXQoKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckNoaWxkTm9kZUxp
c3RDYWNoZSgpOwpAQCAtMzQwLDcgKzM0NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE5l
ZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKGJvb2wgbmVlZHMpIHsgbV9u
ZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCA9IG5lZWRzOyB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVOb2RlTGlzdHMoTm9kZSopOworICAgIHZvaWQgY3JlYXRl
Tm9kZUxpc3RzKCk7CiAKICAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlOwogICAgIE93blB0cjxO
b2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VGFnTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2Rl
TGlzdC5jcHAJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2Rl
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSkKLSAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUsIFJvb3Rl
ZEF0Tm9kZSwgRG9Ob3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2UpCisgICAgOiBEeW5hbWlj
U3VidHJlZU5vZGVMaXN0KHJvb3ROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0dHJpYnV0ZUNoYW5n
ZXMpCiAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCiAgICAgLCBtX2xvY2FsTmFt
ZShsb2NhbE5hbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2aXNpb24g
MTIyNDE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFRyZWVTY29w
ZTo6VHJlZVNjb3BlKENvbnRhaW5lck5vZGUqIHJvb3ROb2RlKQogICAgIDogbV9yb290Tm9kZShy
b290Tm9kZSkKICAgICAsIG1fcGFyZW50VHJlZVNjb3BlKDApCi0gICAgLCBtX251bU5vZGVMaXN0
Q2FjaGVzKDApCiB7CiAgICAgQVNTRVJUKHJvb3ROb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmgJKHJldmlzaW9uIDEyMjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAgKzYxLDYgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0
SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwogCi0gICAgdm9pZCBhZGROb2RlTGlz
dENhY2hlKCkgeyArK21fbnVtTm9kZUxpc3RDYWNoZXM7IH0KLSAgICB2b2lkIHJlbW92ZU5vZGVM
aXN0Q2FjaGUoKSB7IEFTU0VSVChtX251bU5vZGVMaXN0Q2FjaGVzID4gMCk7IC0tbV9udW1Ob2Rl
TGlzdENhY2hlczsgfQotICAgIGJvb2wgaGFzTm9kZUxpc3RDYWNoZXMoKSBjb25zdCB7IHJldHVy
biBtX251bU5vZGVMaXN0Q2FjaGVzOyB9Ci0KICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlv
bigpIGNvbnN0OwogCiAgICAgLy8gRmluZCBmaXJzdCBhbmNob3Igd2l0aCB0aGUgZ2l2ZW4gbmFt
ZS4KQEAgLTk1LDggKzkxLDYgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9l
bGVtZW50c0J5SWQ7CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1faW1hZ2VNYXBzQnlOYW1lOwog
Ci0gICAgdW5zaWduZWQgbV9udW1Ob2RlTGlzdENhY2hlczsKLQogICAgIG11dGFibGUgUmVmUHRy
PERPTVNlbGVjdGlvbj4gbV9zZWxlY3Rpb247CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3Qp
KSB7CiAgICAgICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEgPSBub2RlLT5zZXRUcmVlU2NvcGUo
bmV3RG9jdW1lbnQgPT0gbV9uZXdTY29wZSA/IDAgOiBtX25ld1Njb3BlKTsKICAgICAgICAgaWYg
KHJhcmVEYXRhICYmIHJhcmVEYXRhLT5ub2RlTGlzdHMoKSkKLSAgICAgICAgICAgIHJhcmVEYXRh
LT5ub2RlTGlzdHMoKS0+YWRvcHRUcmVlU2NvcGUobV9vbGRTY29wZSwgbV9uZXdTY29wZSwgb2xk
RG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgICAgIHJhcmVEYXRhLT5ub2RlTGlzdHMo
KS0+YWRvcHRUcmVlU2NvcGUob2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKIAogICAgICAgICBp
ZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQogICAgICAgICAgICAgbW92ZU5vZGVUb05ld0RvY3Vt
ZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xh
c3MgTm9kZUxpc3Q7CiBjbGFzcyBIVE1MQ29sbGVjdGlvbkNhY2hlQmFzZSA6IHB1YmxpYyBEeW5h
bWljTm9kZUxpc3RDYWNoZUJhc2UgewogcHVibGljOgogICAgIEhUTUxDb2xsZWN0aW9uQ2FjaGVC
YXNlKENvbGxlY3Rpb25UeXBlIHR5cGUsIGJvb2wgaW5jbHVkZUNoaWxkcmVuKQotICAgICAgICA6
IER5bmFtaWNOb2RlTGlzdENhY2hlQmFzZShSb290ZWRBdE5vZGUsIEFsd2F5c0ludmFsaWRhdGUp
IC8vIFRoZXNlIHR3byBmbGFncyBhcmUgbmV2ZXIgdXNlZAorICAgICAgICA6IER5bmFtaWNOb2Rl
TGlzdENhY2hlQmFzZShOb2RlTGlzdElzUm9vdGVkQXROb2RlLCBEb05vdEludmFsaWRhdGVPbkF0
dHJpYnV0ZUNoYW5nZXMpIC8vIFRoZXNlIHR3byBmbGFncyBhcmUgbmV2ZXIgdXNlZAogICAgICAg
ICAsIG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldCgwKQogICAgICAgICAsIG1fY2FjaGVUcmVl
VmVyc2lvbigwKQogICAgICAgICAsIG1faGFzTmFtZUNhY2hlKGZhbHNlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IExhYmVsYWJsZUVsZW1lbnQ6OmwK
ICAgICBpZiAoIWRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+YWRkQ2FjaGVXaXRoQXRvbWlj
TmFtZTxMYWJlbHNOb2RlTGlzdD4odGhpcywgRHluYW1pY05vZGVMaXN0OjpMYWJlbHNOb2RlTGlz
dFR5cGUsIHN0YXJBdG9tKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9k
ZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8TGFiZWxzTm9kZUxpc3Q+KHRoaXMsIER5
bmFtaWNOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAxMjI0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTUgKzM0LDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIExhYmVsc05vZGVMaXN0OjpMYWJl
bHNOb2RlTGlzdChOb2RlKiBmb3JOb2RlKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChm
b3JOb2RlLCBSb290ZWRBdERvY3VtZW50KQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChm
b3JOb2RlLCBJbnZhbGlkYXRlT25Gb3JBdHRyQ2hhbmdlLCBOb2RlTGlzdElzUm9vdGVkQXREb2N1
bWVudCkKIHsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qo
dGhpcyk7CiB9CiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3QoKQogewogICAgIG93
bmVyTm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBE
eW5hbWljTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0VHlwZSwgc3RhckF0b20pOwotICAgIGRvY3Vt
ZW50KCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJlZU5vZGVMaXN0KHRoaXMpOwogfSAKICAgICAK
IGJvb2wgTGFiZWxzTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMjI0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxNiArMzgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogUmFkaW9Ob2RlTGlzdDo6UmFkaW9Ob2RlTGlzdChOb2RlKiByb290
Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQotICAgIDogRHluYW1pY1N1YnRyZWVOb2Rl
TGlzdChyb290Tm9kZSwgcm9vdE5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBSb290ZWRBdERv
Y3VtZW50IDogUm9vdGVkQXROb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290
Tm9kZSwgSW52YWxpZGF0ZU9uSWROYW1lRm9yQXR0ckNoYW5nZSwgcm9vdE5vZGUtPmhhc1RhZ05h
bWUoZm9ybVRhZykgPyBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCA6IE5vZGVMaXN0SXNSb290
ZWRBdE5vZGUpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3Rl
ckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QodGhpcyk7CiB9CiAKIFJhZGlvTm9kZUxpc3Q6On5SYWRp
b05vZGVMaXN0KCkKIHsKICAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92ZUNhY2hl
V2l0aEF0b21pY05hbWUodGhpcywgRHluYW1pY05vZGVMaXN0OjpSYWRpb05vZGVMaXN0VHlwZSwg
bV9uYW1lKTsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlz
dCh0aGlzKTsKIH0KIAogc3RhdGljIGlubGluZSBIVE1MSW5wdXRFbGVtZW50KiB0b1JhZGlvQnV0
dG9uSW5wdXRFbGVtZW50KE5vZGUqIG5vZGUpCg==
</data>
<flag name="review"
          id="160415"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>154342</attachid>
            <date>2012-07-25 07:01:36 -0700</date>
            <delta_ts>2012-07-25 07:01:36 -0700</delta_ts>
            <desc>backtrace</desc>
            <filename>backtrace.txt</filename>
            <type>text/plain</type>
            <size>1725</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">QVNTRVJUSU9OIEZBSUxFRDogIW1fbm9kZUxpc3RDb3VudHNbaV0KL29wdC90bXBzYW50b3MvcHJv
amVjdHMvd2Via2l0LWVmbC0yL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAoNjc2KSA6
IHZpcnR1YWwgV2ViQ29yZTo6RG9jdW1lbnQ6On5Eb2N1bWVudCgpCjEgICAweGIzMmUyMzk0IFdl
YkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQoKQoyICAgMHhiMzJlMjk1ZCBXZWJDb3JlOjpEb2N1
bWVudDo6fkRvY3VtZW50KCkKMyAgIDB4YjMyZTJiODYgV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92
ZWRMYXN0UmVmKCkKNCAgIDB4YjMzODAyZjAgV2ViQ29yZTo6Tm9kZTo6cmVtb3ZlZExhc3RSZWYo
KQo1ICAgMHhiMzEwMWI2OSBXZWJDb3JlOjpUcmVlU2hhcmVkPFdlYkNvcmU6Ok5vZGUsIFdlYkNv
cmU6OkNvbnRhaW5lck5vZGU+OjpkZXJlZigpCjYgICAweGIzZDQ0ZDk1IFdlYkNvcmU6OkpTTm9k
ZTo6cmVsZWFzZUltcGwoKQo3ICAgMHhiM2Q0NDI1OSBXZWJDb3JlOjpKU05vZGVPd25lcjo6Zmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCopCjggICAweGIwNjgyNjZjIEpT
Qzo6V2Vha0Jsb2NrOjpmaW5hbGl6ZShKU0M6OldlYWtJbXBsKikKOSAgIDB4YjA2ODIwNzYgSlND
OjpXZWFrQmxvY2s6OnN3ZWVwKCkKMTAgIDB4YjA2ODE2OWMgSlNDOjpXZWFrU2V0Ojpzd2VlcCgp
CjExICAweGIwNjc5NGFjIEpTQzo6TWFya2VkQmxvY2s6OnN3ZWVwKEpTQzo6TWFya2VkQmxvY2s6
OlN3ZWVwTW9kZSkKMTIgIDB4YjA2NmNlZDggSlNDOjpTd2VlcDo6b3BlcmF0b3IoKShKU0M6Ok1h
cmtlZEJsb2NrKikKMTMgIDB4YjA2NzBmMzUgdm9pZCBKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6Zm9y
RWFjaEJsb2NrPEpTQzo6U3dlZXA+KEpTQzo6U3dlZXAmKQoxNCAgMHhiMDY2ZjZmMSBKU0M6OlN3
ZWVwOjpSZXR1cm5UeXBlIEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jazxKU0M6OlN3ZWVw
PihKU0M6OlN3ZWVwJikKMTUgIDB4YjA2NmRkMTggSlNDOjpTd2VlcDo6UmV0dXJuVHlwZSBKU0M6
Ok1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2s8SlNDOjpTd2VlcD4oKQoxNiAgMHhiMDY2Y2ZkOSBK
U0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCgpCjE3ICAweGIwNjZjMDU2IEpTQzo6SGVhcDo6Y29sbGVj
dChKU0M6OkhlYXA6OlN3ZWVwVG9nZ2xlKQoxOCAgMHhiMDY2YmRkZCBKU0M6OkhlYXA6OmNvbGxl
Y3RBbGxHYXJiYWdlKCkKMTkgIDB4YjNjZWM5NGMKMjAgIDB4YjNjZWNhNWMgV2ViQ29yZTo6R0ND
b250cm9sbGVyOjpnY1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8V2ViQ29yZTo6R0NDb250cm9s
bGVyPiopCjIxICAweGIzY2VjY2ZhIFdlYkNvcmU6OlRpbWVyPFdlYkNvcmU6OkdDQ29udHJvbGxl
cj46OmZpcmVkKCkKMjIgIDB4YjM4NTUyMGIgV2ViQ29yZTo6VGhyZWFkVGltZXJzOjpzaGFyZWRU
aW1lckZpcmVkSW50ZXJuYWwoKQoyMyAgMHhiMzg1NTEzYiBXZWJDb3JlOjpUaHJlYWRUaW1lcnM6
OnNoYXJlZFRpbWVyRmlyZWQoKQoyNCAgMHhiNDFhMmZjNwoyNSAgMHhiNzU2ZWZmNiBfZWNvcmVf
dGltZXJfZXhwaXJlZF9jYWxsCjI2ICAweGI3NTZmMWI0IF9lY29yZV90aW1lcl9leHBpcmVkX3Rp
bWVyc19jYWxsCjI3ICAweGI3NTZiYzJiCjI4ICAweGI3NTZjMzNmIGVjb3JlX21haW5fbG9vcF9i
ZWdpbgoyOSAgMHg4MDRjOTM0IG1haW4KMzAgIDB4YjcxNTg0ZDMgX19saWJjX3N0YXJ0X21haW4K
MzEgIDB4ODA0YTNjMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>