<?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>131043</bug_id>
          
          <creation_ts>2014-04-01 09:35:57 -0700</creation_ts>
          <short_desc>Web Replay: save and restore page history state at main frame navigations</short_desc>
          <delta_ts>2017-07-10 14:01:28 -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>History</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>131554</dependson>
    
    <dependson>131564</dependson>
          <blocked>136290</blocked>
    
    <blocked>129447</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>996321</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-01 09:35:57 -0700</bug_when>
    <thetext>The easy part is encoding/decoding the HistoryItem tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996360</commentid>
    <comment_count>1</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-01 10:47:58 -0700</bug_when>
    <thetext>(comment got truncated)

The main use cases here are to support replaying the following:
 - introspection through History.idl interface
 - programmatic pushState/popState
 - history navigations within the document

The page cache is always disabled during capture/replay, so history navigations outside the document should just start a normal page load.

Current implementation plan is to encode history item trees in the back/forward list, and replace page&apos;s back/forward list at the beginning of replay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996362</commentid>
    <comment_count>2</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-04-01 10:56:43 -0700</bug_when>
    <thetext> One thing that we desperately need to do is to dumb down the back forward list and history in the web process - the web process should just know:

1. the length of the back forward list
2. the current index of the back forward list.

Everything else should be managed by the UI process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996371</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-01 11:21:45 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt;  One thing that we desperately need to do is to dumb down the back forward list and history in the web process - the web process should just know:
&gt; 
&gt; 1. the length of the back forward list
&gt; 2. the current index of the back forward list.
&gt; 
&gt; Everything else should be managed by the UI process.

That shouldn&apos;t affect the replay strategy AFAICT. It&apos;ll require some extra plumbing to get the initial state to/from to the UI process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002023</commentid>
    <comment_count>4</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-18 14:08:20 -0700</bug_when>
    <thetext>I&apos;ve implemented a prototype of save/restore of the back forward list. Basic details:

On capture, save current and back entries on the list.
On replay, clear the back/forward list and append saved entries. Then, tell HistoryController that the current position is the final entry.

I promoted clear() to be part of the BackForwardClient interface. The WebProcess version had already implemented this. Doing the same for WK1 is easy.

This doesn&apos;t quite work, since clear() truncates all entries except the current entry. So if we start replaying with 2 entries, clear(), then append two more entries, window.history.length will be 3 instead of 2 on replay.

Some alternatives that might work better, which I&apos;m investigating:

One alternative is to do the same clear+append when capturing: save entries, clear all but current, then immediately append and set current cursor. But, this isn&apos;t great either: you&apos;ll have duplicate entries (at the beginning and end) representing the page that you were on when capturing started. From this point, if the program calls window.history.go(-3), the resulting navigation will be nondeterministic (depends on the page from which you started replaying).

Another alternative is to add a flag to clear() which completely empties out the back forward list, including the current item. I&apos;m assuming this may introduce complications for other clients.

Another alternative is to add a method to completely replace the history list with a saved list. This is essentially the same as the previous alternative but adds another method to the API.

A final alternative is a variant of the first. To capture, we start by saving the back-forward list, then navigate to about:blank, restore the saved back-forward list, then kick off the initial navigation to the page we actually want to capture. To replay, we similarly navigate to about:blank, clear+append history, then do the initial navigation to the page we want to replay.

I prefer the last alternative, and am going to look at it next. Springboarding from the clean slate of about:blank between every session segment may be useful for other things, like making document.referer easy to memoize and handling replay of unload behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003011</commentid>
    <comment_count>5</comment_count>
      <attachid>229901</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-22 11:43:58 -0700</bug_when>
    <thetext>Created attachment 229901
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003013</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 11:46:18 -0700</bug_when>
    <thetext>Attachment 229901 did not pass style-queue:


ERROR: Source/WebCore/replay/SerializationMethods.cpp:201:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/SerializationMethods.cpp:288:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/SerializationMethods.cpp:696:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/SerializationMethods.h:78:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/SerializationMethods.h:85:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/replay/SerializationMethods.h:141:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 6 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327168</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-10 14:01:28 -0700</bug_when>
    <thetext>Closing web replay-related bugs until we resume working on the feature again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229901</attachid>
            <date>2014-04-22 11:43:58 -0700</date>
            <delta_ts>2015-01-30 13:12:31 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>bug-131043-20140422114336.patch</filename>
            <type>text/plain</type>
            <size>41775</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MDNlZmI4ZThkZTVhYWE1ZjE0ZDUxZTA1YjAwZjdmMzdiNzA3MjFjLi4yOTE0YjdiMWY2NGE1OGNh
M2MxOTY2ZGQxMzM1MTZlNjVlZmRmMDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNC0wNC0yMiAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIFJlcGxheTogc2F2ZSBhbmQgcmVzdG9yZSBwYWdlIGhpc3Rv
cnkgc3RhdGUgYXQgbWFpbiBmcmFtZSBuYXZpZ2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgc3BlY2lhbGl6YXRpb24gb2YgZW5jb2Rl
KCkvZGVjb2RlKCkgZm9yIGJ5dGUgYnVmZmVycyB0aGF0IHVzZXMKKyAgICAgICAgYmFzZTY0LWVu
Y29kZWQgc3RyaW5ncy4KKworICAgICAgICBGaXggYW4gaW5jb3JyZWN0IHR5cGUgYXJndW1lbnQg
aW4gRW5jb2RpbmdUcmFpdHM8VmVjdG9yPFQ+Pjo6ZW5jb2RlVmFsdWUKKyAgICAgICAgdGhhdCB3
YXMgdXNpbmcgdGhlIGVsZW1lbnQncyBkZWNvZGVkIHR5cGUgYXMgdGhlIHR5cGUgcGFyYW1ldGVy
IHRvCisgICAgICAgIEVuY29kZWRWYWx1ZTo6YXBwZW5kPFQ+LiBJdCBzaG91bGQgaW5zdGVhZCBi
ZSB0aGUgcmF3IHR5cGUgVC4gVGhpcworICAgICAgICBjYXVzZWQgcHJvYmxlbXMgd2hlbiBlbmNv
ZGluZyBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPj4sIGFzIGl0IHdvdWxkCisgICAgICAgIGxh
dGVyIHRyeSB0byB1c2UgZW5jb2RpbmcgdHJhaXRzIGZvciBSZWZQdHI8SGlzdG9yeUl0ZW0+IHJh
dGhlciB0aGFuCisgICAgICAgIGVuY29kaW5nIHRyYWl0cyBmb3IgSGlzdG9yeUl0ZW0uCisKKyAg
ICAgICAgRml4IGluY29ycmVjdCBnZW5lcmF0ZWQgZW5jb2RpbmcgdHJhaXRzIGFyZ3VtZW50IGZv
ciB2ZWN0b3JzIG9mCisgICAgICAgIFJlZkNvdW50ZWQgb2JqZWN0cy4gVXBkYXRlZCB0ZXN0IHRv
IGNvdmVyIHRoaXMgc2NlbmFyaW8uCisKKyAgICAgICAgKiByZXBsYXkvRW5jb2RlZFZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6RW5jb2RpbmdUcmFpdHM8VmVjdG9yPGNoYXI+Pjo6ZW5jb2RlVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2RpbmdUcmFpdHM8VmVjdG9yPGNoYXI+Pjo6
ZGVjb2RlVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKiByZXBsYXkvRW5jb2RlZFZhbHVlLmg6CisK
KyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5Ogor
ICAgICAgICAoVHlwZS5lbmNvZGluZ190eXBlX2FyZ3VtZW50KToKKyAgICAgICAgKFZlY3RvclR5
cGUudHlwZV9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUpOgorICAgICAgICAoVmVjdG9yVHlw
ZS5lbmNvZGluZ190eXBlX2FyZ3VtZW50KToKKyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9p
bnB1dF9lbmNvZGVfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdG9yLmdlbmVyYXRl
X2lucHV0X2RlY29kZV9pbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJh
dGVfaW5wdXRfdHJhaXRfaW1wbGVtZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlcGxh
eS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0LXdpdGgtdmVjdG9yLW1lbWJl
cnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcDoKKyAgICAgICAgKiByZXBsYXkvc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpzb24tVGVz
dFJlcGxheUlucHV0cy5oOgorICAgICAgICAqIHJlcGxheS9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRl
LWlucHV0LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbjogVXBkYXRlZC4KKwogMjAxNC0wNC0yMSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRzo6Y2xvYmJlcml6
ZSgpIHNob3VsZCBob25lc3RseSBhZG1pdCB0aGF0IHByb2ZpbGVyIGFuZCBkZWJ1Z2dlciBub2Rl
cyBhcmUgZWZmZWN0ZnVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWJiNGM2YzgxY2Y3MGVhOWQ2OGI2MzM4YTJk
MzE2YzBjYTNlMDljOS4uZWUzZjg0M2RiZTdjYWQzODE4NTc0MmJjMWFjNjE3OTBkOWRmMTEwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDE0LTA0LTIyICBCcmlhbiBKLiBCdXJnICA8
YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgUmVwbGF5OiBzYXZlIGFuZCBy
ZXN0b3JlIHBhZ2UgaGlzdG9yeSBzdGF0ZSBhdCBtYWluIGZyYW1lIG5hdmlnYXRpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEwNDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBtYWtlIHVzZXMg
b2Ygd2luZG93Lmhpc3RvcnkgZGV0ZXJtaW5pc3RpYywgd2UgbXVzdCBzYXZlIGFuZCByZXN0b3Jl
CisgICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgYmFjay1mb3J3YXJkIGxpc3QgYXQgZWFjaCBt
YWluIGZyYW1lIG5hdmlnYXRpb24uCisgICAgICAgIFRoaXMgY2FuIGJlIGRvbmUgYmVmb3JlIHRo
ZSBpbml0aWFsIG5hdmlnYXRpb24gdGhhdCdzIGtpY2tlZCBvZmYgd2hlbgorICAgICAgICB3ZSBj
cmVhdGUgYSBuZXcgcmVwbGF5IHNlc3Npb24gc2VnbWVudC4KKworICAgICAgICBUaGVyZSBpcyBu
byB3YXkgdG8gcmVwbGFjZSBhbiBlbnRpcmUgYmFjay1mb3J3YXJkIGxpc3QgZm9yIGFsbAorICAg
ICAgICBpbXBsZW1lbnRhdGlvbnMuIEluc3RlYWQgd2UgY2FwdHVyZSBiYWNrLWxpc3QgSGlzdG9y
eUl0ZW1zLCBjbGVhcgorICAgICAgICBhbGwgYnV0IHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUg
YmFjay1mb3J3YXJkIGxpc3QsIGFuZCB0aGVuIGFwcGVuZAorICAgICAgICBjb3BpZXMgb2YgdGhl
IHNhdmVkIGl0ZW1zLgorCisgICAgICAgIFRoZSBwYXRjaCBlZmZlY3RpdmVseSBtYWtlcyB0aGUg
aGlzdG9yeSBsZW5ndGggZGV0ZXJtaW5pc3RpYywgYnV0IG5vdCAKKyAgICAgICAgaXRzIGNvbnRl
bnRzOiB0aGUgZmlyc3QgaXRlbSBjb3VsZCBiZSBkaWZmZXJlbnQgd2hlbiBzdGFydGluZyByZXBs
YXkgCisgICAgICAgIGZyb20gYSBkaWZmZXJlbnQgcGFnZSwgYW5kIG5hdmlnYXRpbmcgdG8gdGhh
dCBoaXN0b3J5IGl0ZW0gY291bGQgY2F1c2UgCisgICAgICAgIHRoZSBleGVjdXRpb24gdG8gZGl2
ZXJnZS4KKworICAgICAgICBUaGlzIGludGVudGlvbmFsIGRlZmljaWVuY3kgaXMgdHJhY2tlZCBi
eSBodHRwczovL3dlYmtpdC5vcmcvYi8xMzE5ODkuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9y
L3JlcGxheS9oaXN0b3J5LWxlbmd0aC1zaW5nbGUtc2VnbWVudC5odG1sCisKKyAgICAgICAgKiBo
aXN0b3J5L0JhY2tGb3J3YXJkQ2xpZW50Lmg6IFByb21vdGUgY2xlYXIoKSB0byBiZSBhbiBpbnRl
cmZhY2UgbWV0aG9kLgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tGb3J3YXJkQ29udHJvbGxlcjo6Y2xlYXIpOiBBZGRl
ZC4KKyAgICAgICAgKiBoaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5oOgorICAgICAgICAq
IGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tGb3J3
YXJkTGlzdDo6Y2xlYXIpOiBBZGRlZC4KKyAgICAgICAgKiBoaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5oOgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YTo6Rm9ybURhdGEpOiBBZGQgY29uc3RydWN0b3IgZm9yIGRlc2Vy
aWFsaXplZCBkYXRhLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDogR2l2
ZSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGUgYW4gZXhwbGljaXQgc2l6ZS4KKworICAgICAgICAqIHJl
cGxheS9SZXBsYXlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxheUNvbnRy
b2xsZXI6OmNyZWF0ZVNlZ21lbnQpOiBDYXB0dXJlIGhpc3RvcnkgYmVmb3JlCisgICAgICAgIGtp
Y2tpbmcgb2ZmIHRoZSBpbml0aWFsIG5hdmlnYXRpb24uCisKKyAgICAgICAgKiByZXBsYXkvUmVw
bGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5pdGlhbGl6
ZUhpc3Rvcnk6OmNyZWF0ZUZyb21QYWdlKToKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5SW5wdXRE
aXNwYXRjaE1ldGhvZHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5pdGlhbGl6ZUhpc3Rvcnk6
OmRpc3BhdGNoKTogQWRkZWQuCisKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhv
ZHMuY3BwOgorICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxGb3JtRGF0YT46OmVuY29kZVZh
bHVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OkRlc2VyaWFsaXplZEZvcm1EYXRhOjpEZXNlcmlh
bGl6ZWRGb3JtRGF0YSk6IEFkZGVkLgorICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxGb3Jt
RGF0YT46OmRlY29kZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OkVuY29kaW5nVHJhaXRz
PEZvcm1EYXRhRWxlbWVudD46OmVuY29kZVZhbHVlKTogIEFkZGVkLgorICAgICAgICAoSlNDOjpF
bmNvZGluZ1RyYWl0czxGb3JtRGF0YUVsZW1lbnQ+OjpkZWNvZGVWYWx1ZSk6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxIaXN0b3J5SXRlbT46OmVuY29kZVZhbHVlKTogQWRk
ZWQuCisgICAgICAgIChKU0M6OkVuY29kaW5nVHJhaXRzPEhpc3RvcnlJdGVtPjo6ZGVjb2RlVmFs
dWUpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RW5jb2RpbmdUcmFpdHM8SW50UG9pbnQ+OjplbmNv
ZGVWYWx1ZSk6IEFkZGVkLgorICAgICAgICAoSlNDOjpFbmNvZGluZ1RyYWl0czxJbnRQb2ludD46
OmRlY29kZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OkVuY29kaW5nVHJhaXRzPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT46OmVuY29kZVZhbHVlKTogQWRkZWQuCisgICAgICAgIChKU0M6OkVu
Y29kaW5nVHJhaXRzPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmRlY29kZVZhbHVlKTogQWRkZWQu
CisgICAgICAgICogcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmg6CisKKyAgICAgICAgKiBy
ZXBsYXkvV2ViSW5wdXRzLmpzb246IEFkZCBlbnVtIEZvcm1EYXRhRWxlbWVudDo6VHlwZSwKKyAg
ICAgICAgdHlwZSBIaXN0b3J5SXRlbSwgYW5kIGlucHV0IEluaXRpYWxpemVIaXN0b3J5LgorCiAy
MDE0LTA0LTIyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3
IE11bHRpY29sdW1uXSBmYXN0L211bHRpY29sL211bHRpY29sLXdpdGgtY2hpbGQtcmVuZGVyTGF5
ZXItZm9yLWlucHV0Lmh0bWwgcHV0cyB0aGUgdGV4dGZpZWxkIGluIHRoZSB3cm9uZyBwbGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDU4NWJkN2U2OWMyYjE5ZjBhNmYxNTM3MGRhMWU2M2ZjNDY1ZjU1NWEuLjY2
MTNmZTFkMTBhYWVlMjNmODdjMDlkMmZjYWEwNmZlOWJjOGM4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNC0wNC0yMiAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIFJlcGxheTogc2F2ZSBhbmQgcmVzdG9yZSBwYWdlIGhpc3Rv
cnkgc3RhdGUgYXQgbWFpbiBmcmFtZSBuYXZpZ2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvbW90ZSBjbGVhcigpIHRvIGJlIHBhcnQgb2Yg
dGhlIEJhY2tGb3J3YXJkQ2xpZW50IGludGVyZmFjZS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oOgorCiAyMDE0LTA0LTIyICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFdLVGh1bWJuYWlsVmll
dyBkb2Vzbid0IHF1aXRlIHdvcmsgd2l0aCB0b3BDb250ZW50SW5zZXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcAppbmRleCAwMTkxZDQxNDhlZmJmNGRm
Zjk2NjNjY2Q5OWU2YWM2MTUyNWMzY2MyLi4zZDYyZmQwOTQ1MTkzOTE2MTFjNmE0OGM4YWIwZTRi
NzM1ZWI4NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29k
ZWRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFs
dWUuY3BwCkBAIC01NSw2ICs1NSwxNiBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBFbmNv
ZGVkVmFsdWU6OmFzQXJyYXkoKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCitF
bmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8VmVjdG9yPGNoYXI+Pjo6ZW5jb2RlVmFsdWUoY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIEVuY29kZWRWYWx1ZTo6Y3Jl
YXRlU3RyaW5nKGJhc2U2NEVuY29kZShidWZmZXIpKTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0
czxWZWN0b3I8Y2hhcj4+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRCdWZmZXIs
IFZlY3RvcjxjaGFyPiYgZGVjb2RlZFZhbHVlKQoreworICAgIHJldHVybiBiYXNlNjREZWNvZGUo
ZW5jb2RlZEJ1ZmZlci5jb252ZXJ0VG88U3RyaW5nPigpLCBkZWNvZGVkVmFsdWUpOworfQorCiB0
ZW1wbGF0ZTw+IEVuY29kZWRWYWx1ZSBTY2FsYXJFbmNvZGluZ1RyYWl0czxib29sPjo6ZW5jb2Rl
VmFsdWUoY29uc3QgYm9vbCYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cmVwbGF5L0VuY29kZWRWYWx1ZS5oCmluZGV4IGYxNDc3YWE1MzVhZWZiMzA5MmJjMDVmYjM1NDI4
NmMxZmFmZmZiZTUuLjlhY2I1YjU2YzI0ZGI2ZWNkNDQ1YjljNjAxMGU3ZDQxZWNiNTgwMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaApAQCAtMTEzLDcg
KzExMyw3IEBAIHN0cnVjdCBFbmNvZGluZ1RyYWl0czxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj4+IHsKICAgICB7CiAgICAgICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVk
VmVjdG9yID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVBcnJheSgpOwogICAgICAgICBmb3IgKGNvbnN0
IHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPFQ+OjpEZWNvZGVkVHlwZSYgdmFsdWUgOiB2ZWN0b3JP
ZlZhbHVlcykKLSAgICAgICAgICAgIGVuY29kZWRWZWN0b3IuYXBwZW5kPHR5cGVuYW1lIEVuY29k
aW5nVHJhaXRzPFQ+OjpEZWNvZGVkVHlwZT4odmFsdWUpOworICAgICAgICAgICAgZW5jb2RlZFZl
Y3Rvci5hcHBlbmQ8VD4odmFsdWUpOwogCiAgICAgICAgIHJldHVybiBzdGQ6Om1vdmUoZW5jb2Rl
ZFZlY3Rvcik7CiAgICAgfQpAQCAtMTM3LDYgKzEzNywxMyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBF
bmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+IHsKICAgICAvLyBzbyBlbmNvZGVWYWx1ZSBhbmQg
ZGVjb2RlVmFsdWUgYXJlIGludGVudGlvbmFsbHkgb21pdHRlZCBoZXJlLgogfTsKIAorLy8gU3Bl
Y2lhbGl6ZSBieXRlIHZlY3RvcnMgdG8gdXNlIGJhc2U2NCBlbmNvZGluZy4KK3RlbXBsYXRlPD4g
c3RydWN0IEVuY29kaW5nVHJhaXRzPFZlY3RvcjxjaGFyPj4geworICAgIHR5cGVkZWYgVmVjdG9y
PGNoYXI+IERlY29kZWRUeXBlOworICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBFbmNvZGVk
VmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgRGVjb2RlZFR5cGUmKTsKKyAgICBzdGF0aWMgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBEZWNvZGVkVHlwZSYp
OworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBTY2FsYXJFbmNvZGluZ1RyYWl0
cyB7CiAgICAgdHlwZWRlZiBUIERlY29kZWRUeXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlu
cHV0cy5weQppbmRleCBhOWE2NWNkNzdlMDIxNzBmZjQzODY0MDVjODk0OTEzNTFmNGJlZmFhLi40
NDg0OGY0NGYxNzQxOGIxMTM2ZjQ5MjA3YTg5ZTUyYzA4MzU1NDE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvclJlcGxheUlucHV0cy5weQpAQCAtMzU5LDYgKzM1OSw5IEBAIGNsYXNzIFR5cGU6CiAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdG9yYWdlX3R5cGUoKQogCisgICAg
ZGVmIGVuY29kaW5nX3R5cGVfYXJndW1lbnQoc2VsZiwgcXVhbGlmaWVkPUZhbHNlKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lKHF1YWxpZmllZD1xdWFsaWZpZWQpCisKIAogZGVmIGNo
ZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKHByb3BzLCBvYmosIHdoYXQpOgogICAgIGZvciBw
cm9wIGluIHByb3BzOgpAQCAtMzg5LDYgKzM5Miw5IEBAIGNsYXNzIFZlY3RvclR5cGUoVHlwZSk6
CiAgICAgICAgIHJldHVybiAiIgogCiAgICAgZGVmIHR5cGVfbmFtZShzZWxmLCBxdWFsaWZpZWQ9
RmFsc2UpOgorICAgICAgICByZXR1cm4gIlZlY3Rvcjwlcz4iICUgc2VsZi5fZWxlbWVudF90eXBl
LnN0b3JhZ2VfdHlwZShxdWFsaWZpZWQ9cXVhbGlmaWVkKQorCisgICAgZGVmIGVuY29kaW5nX3R5
cGVfYXJndW1lbnQoc2VsZiwgcXVhbGlmaWVkPUZhbHNlKToKICAgICAgICAgcmV0dXJuICJWZWN0
b3I8JXM+IiAlIHNlbGYuX2VsZW1lbnRfdHlwZS50eXBlX25hbWUocXVhbGlmaWVkPXF1YWxpZmll
ZCkKIAogICAgIGRlZiBhcmd1bWVudF90eXBlKHNlbGYsIHF1YWxpZmllZD1GYWxzZSk6CkBAIC04
NzksNyArODg1LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBzdGVwcyA9IFtdCiAgICAg
ICAgIGZvciAoX21lbWJlciwgX3R5cGUpIGluIHNlbGYuZ2VuZXJhdGVfaW5wdXRfbWVtYmVyX3R1
cGxlcyhfaW5wdXQpOgogICAgICAgICAgICAgc2hvdWxkX3F1YWxpZnlfdHlwZSA9IF90eXBlLmZy
YW1ld29yayAhPSBzZWxmLnRyYWl0c19mcmFtZXdvcmsKLSAgICAgICAgICAgIHB1dF9tZXRob2Qg
PSAicHV0PCVzPiIgJSBfdHlwZS50eXBlX25hbWUocXVhbGlmaWVkPXNob3VsZF9xdWFsaWZ5X3R5
cGUpCisgICAgICAgICAgICBwdXRfbWV0aG9kID0gInB1dDwlcz4iICUgX3R5cGUuZW5jb2Rpbmdf
dHlwZV9hcmd1bWVudChxdWFsaWZpZWQ9c2hvdWxkX3F1YWxpZnlfdHlwZSkKIAogICAgICAgICAg
ICAgc3RlcHMuZXh0ZW5kKFsKICAgICAgICAgICAgICAgICAiICAgIGVuY29kZWRWYWx1ZS4lcyhB
U0NJSUxpdGVyYWwoXCIlc1wiKSwgaW5wdXQuJXMoKSk7IiAlIChwdXRfbWV0aG9kLCBfbWVtYmVy
Lm1lbWJlck5hbWUsIF9tZW1iZXIubWVtYmVyTmFtZSkKQEAgLTg5Nyw3ICs5MDMsNyBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgICAgIHN0ZXBzID0gW10KICAgICAgICAgZm9yIChfbWVtYmVyLCBf
dHlwZSkgaW4gc2VsZi5nZW5lcmF0ZV9pbnB1dF9tZW1iZXJfdHVwbGVzKF9pbnB1dCk6CiAgICAg
ICAgICAgICBzaG91bGRfcXVhbGlmeV90eXBlID0gX3R5cGUuZnJhbWV3b3JrICE9IHNlbGYudHJh
aXRzX2ZyYW1ld29yawotICAgICAgICAgICAgZ2V0X21ldGhvZCA9ICJnZXQ8JXM+IiAlIF90eXBl
LnR5cGVfbmFtZShxdWFsaWZpZWQ9c2hvdWxkX3F1YWxpZnlfdHlwZSkKKyAgICAgICAgICAgIGdl
dF9tZXRob2QgPSAiZ2V0PCVzPiIgJSBfdHlwZS5lbmNvZGluZ190eXBlX2FyZ3VtZW50KHF1YWxp
ZmllZD1zaG91bGRfcXVhbGlmeV90eXBlKQogCiAgICAgICAgICAgICBsaW5lcyA9IFsKICAgICAg
ICAgICAgICAgICAiICAgICVzICVzOyIgJSAoX3R5cGUuc3RvcmFnZV90eXBlKHF1YWxpZmllZD1z
aG91bGRfcXVhbGlmeV90eXBlKSwgX21lbWJlci5tZW1iZXJOYW1lKSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0
ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJh
dGUtaW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uLVRlc3RSZXBsYXlJbnB1dHMuY3BwCmlu
ZGV4IDAyYmI1NmI1MjVjNDQ2YjBkYjExMzhiZGU3ZDVmMmRjNWNmOTYyYmEuLmZiMzRlMmM0M2Vi
NTdjYjRmY2I4MDdkMjc2MGYwNjYxMmE3Y2FkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1pbnB1dC13aXRo
LXZlY3Rvci1tZW1iZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0
LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmNwcApAQCAtNDgsNiAr
NDgsMTYgQEAgQXJyYXlPZlRoaW5nczo6QXJyYXlPZlRoaW5ncyhWZWN0b3I8ZG91YmxlPiYgZG91
YmxlcywgVmVjdG9yPEpTVGhpbmc+JiBqc3RoaW5ncywKIEFycmF5T2ZUaGluZ3M6On5BcnJheU9m
VGhpbmdzKCkKIHsKIH0KKworU2F2ZWRIaXN0b3J5OjpTYXZlZEhpc3RvcnkoVmVjdG9yPFJlZlB0
cjxIaXN0b3J5SXRlbT4+JiBlbnRyaWVzKQorICAgIDogTm9uZGV0ZXJtaW5pc3RpY0lucHV0PFNh
dmVkSGlzdG9yeT4oKQorICAgICwgbV9lbnRyaWVzKGVudHJpZXMpCit7Cit9CisKK1NhdmVkSGlz
dG9yeTo6flNhdmVkSGlzdG9yeSgpCit7Cit9CiB9IC8vIG5hbWVzcGFjZSBUZXN0CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtODIsNiArOTIsMjcgQEAgYm9vbCBJbnB1dFRyYWl0czxUZXN0OjpBcnJh
eU9mVGhpbmdzPjo6ZGVjb2RlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZFZhbHVlLCBzdGQ6OnUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBJbnB1dFRyYWl0czxUZXN0
OjpTYXZlZEhpc3Rvcnk+Ojp0eXBlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbWljU3RyaW5nPiB0eXBlKCJTYXZlZEhpc3RvcnkiLCBBdG9taWNTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4gdHlwZTsKK30KKwordm9pZCBJbnB1dFRyYWl0
czxUZXN0OjpTYXZlZEhpc3Rvcnk+OjplbmNvZGUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUs
IGNvbnN0IFRlc3Q6OlNhdmVkSGlzdG9yeSYgaW5wdXQpCit7CisgICAgZW5jb2RlZFZhbHVlLnB1
dDxWZWN0b3I8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+PihBU0NJSUxpdGVyYWwoImVudHJpZXMiKSwg
aW5wdXQuZW50cmllcygpKTsKK30KKworYm9vbCBJbnB1dFRyYWl0czxUZXN0OjpTYXZlZEhpc3Rv
cnk+OjpkZWNvZGUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxU
ZXN0OjpTYXZlZEhpc3Rvcnk+JiBpbnB1dCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
Okhpc3RvcnlJdGVtPj4gZW50cmllczsKKyAgICBpZiAoIWVuY29kZWRWYWx1ZS5nZXQ8VmVjdG9y
PFdlYkNvcmU6Okhpc3RvcnlJdGVtPj4oQVNDSUlMaXRlcmFsKCJlbnRyaWVzIiksIGVudHJpZXMp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnB1dCA9IHN0ZDo6bWFrZV91bmlxdWU8
VGVzdDo6U2F2ZWRIaXN0b3J5PihlbnRyaWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpzb24tVGVzdFJlcGxheUlucHV0cy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWlucHV0LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmgK
aW5kZXggMjc4YzM3ZDQwOTE3MGY2ZjQwY2U2ZmJmZjMwMmFlNDQ3ZDQ4ZDAyNi4uMjQyZmY4NzM4
NGQ4ZWFmNTlmM2FkZDViMGEyOGQ5OTkzZWRiMTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0LXdp
dGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWlucHV0
LXdpdGgtdmVjdG9yLW1lbWJlcnMuanNvbi1UZXN0UmVwbGF5SW5wdXRzLmgKQEAgLTMyLDEyICsz
MiwxNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAjaW5jbHVkZSAiSW50ZXJuYWxOYW1l
c3BhY2VIZWFkZXJJbmNsdWRlRHVtbXkuaCIKKyNpbmNsdWRlIDxoaXN0b3J5L0hpc3RvcnlJdGVt
Lmg+CiAjaW5jbHVkZSA8cGxhdGZvcm0vRXh0ZXJuYWxOYW1lc3BhY2VIZWFkZXJJbmNsdWRlRHVt
bXkuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSGlzdG9yeUl0ZW07Cit9CiAKIAog
bmFtZXNwYWNlIFRlc3QgewogY2xhc3MgQXJyYXlPZlRoaW5nczsKK2NsYXNzIFNhdmVkSGlzdG9y
eTsKIH0gLy8gbmFtZXNwYWNlIFRlc3QKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OSw2ICs1NCwx
NCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBJbnB1dFRyYWl0czxUZXN0OjpBcnJheU9mVGhpbmdzPiB7
CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEpTQzo6RW5jb2RlZFZhbHVlJiwgc3RkOjp1bmlxdWVf
cHRyPFRlc3Q6OkFycmF5T2ZUaGluZ3M+Jik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnB1
dFRyYWl0czxUZXN0OjpTYXZlZEhpc3Rvcnk+IHsKKyAgICBzdGF0aWMgSW5wdXRRdWV1ZSBxdWV1
ZSgpIHsgcmV0dXJuIElucHV0UXVldWU6OlNjcmlwdE1lbW9pemVkRGF0YTsgfQorICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKTsKKworICAgIHN0YXRpYyB2b2lkIGVuY29kZShK
U0M6OkVuY29kZWRWYWx1ZSYsIGNvbnN0IFRlc3Q6OlNhdmVkSGlzdG9yeSYpOworICAgIHN0YXRp
YyBib29sIGRlY29kZShKU0M6OkVuY29kZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0cjxUZXN0OjpT
YXZlZEhpc3Rvcnk+Jik7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFRl
c3QgewpAQCAtNjUsMTAgKzc4LDIxIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEpTVGhpbmc+IG1f
anN0aGluZ3M7CiAgICAgVmVjdG9yPFdlYlRoaW5nPiBtX3dlYnRoaW5nczsKIH07CisKK2NsYXNz
IFNhdmVkSGlzdG9yeSA6IHB1YmxpYyBOb25kZXRlcm1pbmlzdGljSW5wdXQ8U2F2ZWRIaXN0b3J5
PiB7CitwdWJsaWM6CisgICAgU2F2ZWRIaXN0b3J5KFZlY3RvcjxSZWZQdHI8SGlzdG9yeUl0ZW0+
PiYgZW50cmllcyk7CisgICAgdmlydHVhbCB+U2F2ZWRIaXN0b3J5KCk7CisKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPj4mIGVudHJpZXMoKSBjb25zdCB7IHJldHVybiBtX2Vu
dHJpZXM7IH0KK3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4+IG1fZW50
cmllczsKK307CiB9IC8vIG5hbWVzcGFjZSBUZXN0CiAKICNkZWZpbmUgVEVTVF9SRVBMQVlfSU5Q
VVRfTkFNRVNfRk9SX0VBQ0gobWFjcm8pIFwKICAgICBtYWNybyhBcnJheU9mVGhpbmdzKSBcCisg
ICAgbWFjcm8oU2F2ZWRIaXN0b3J5KSBcCiAgICAgXAogLy8gZW5kIG9mIFRFU1RfUkVQTEFZX0lO
UFVUX05BTUVTX0ZPUl9FQUNICiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy90ZXN0cy9nZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUt
aW5wdXQtd2l0aC12ZWN0b3ItbWVtYmVycy5qc29uCmluZGV4IGViMzQ4N2M5ZTNiMDBjNTFjNTZm
MDY5MDkzMTgwODU3YzVhYjY1NGEuLjA3NmU1NGJmY2ZjYjRmOWJhZmUxMjhiNTg1ZDI3MGJiMzI0
Yjk1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy90
ZXN0cy9nZW5lcmF0ZS1pbnB1dC13aXRoLXZlY3Rvci1tZW1iZXJzLmpzb24KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWlucHV0LXdpdGgt
dmVjdG9yLW1lbWJlcnMuanNvbgpAQCAtOSw3ICs5LDExIEBACiAgICAgICAgIF0sCiAKICAgICAg
ICAgIldlYkNvcmUiOiBbCi0gICAgICAgICAgICB7ICJuYW1lIjogIldlYlRoaW5nIiwgIm1vZGUi
OiAiU0NBTEFSIiwgImhlYWRlciI6ICJ0aGluZ3MvV2ViVGhpbmcuaCIgIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiOiAiV2ViVGhpbmciLCAibW9kZSI6ICJTQ0FMQVIiLCAiaGVhZGVyIjogInRoaW5n
cy9XZWJUaGluZy5oIiB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjog
Ikhpc3RvcnlJdGVtIiwgIm1vZGUiOiAiU0hBUkVEIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVy
IjogImhpc3RvcnkvSGlzdG9yeUl0ZW0uaCIKKyAgICAgICAgICAgIH0KICAgICAgICAgXQogICAg
IH0sCiAKQEAgLTIzLDYgKzI3LDE0IEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJqc3Ro
aW5ncyIsICJ0eXBlIjogIkpTVGhpbmciLCAiZmxhZ3MiOiBbIlZFQ1RPUiJdIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ3ZWJ0aGluZ3MiLCAidHlwZSI6ICJXZWJUaGluZyIsICJmbGFn
cyI6IFsiVkVDVE9SIl0gfQogICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJTYXZlZEhpc3RvcnkiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlNhdmUgaGlzdG9yeSBpdGVtcy4iLAorICAgICAgICAgICAgInF1ZXVlIjogIlNDUklQ
VF9NRU1PSVpFRCIsCisgICAgICAgICAgICAibWVtYmVycyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImVudHJpZXMiLCAidHlwZSI6ICJIaXN0b3J5SXRlbSIsICJmbGFncyI6IFsiVkVD
VE9SIl0gfQorICAgICAgICAgICAgXQogICAgICAgICB9CiAgICAgXQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENsaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9CYWNrRm9yd2FyZENsaWVudC5oCmluZGV4IDQ3MTg3MzYwMWQ0ZmY5MjlkZDE1
MTNhZTA4Y2FlMmMxZDY5Yjk5OTkuLjJjNjUyNzMyOTAxNjllMmY1MjQ0NWM4MmIyYTBjZWQ1MWNk
NzI5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ2xpZW50LmgKQEAg
LTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IGZvcndhcmRMaXN0Q291bnQo
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyKCkgPSAwOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBUaGVzZSBt
ZXRob2RzIHNlZW0gdG8gdmlvbGF0ZSB0aGUgZW5jYXBzdWxhdGlvbiBvZiB0aGlzIGNsYXNzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDJkMWQwMjAwOWQ5Nzk0NmJiZTliMTQyODRjMjBjMWIxNjUzNWVmOTYuLjFjNGM5NzJhNmM2
OWQzN2ExMGNjY2I2MzAzYjRhNjJlYjdmYjEzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAKQEAgLTEyNyw2ICsxMjcsMTEgQEAgSGlz
dG9yeUl0ZW0qIEJhY2tGb3J3YXJkQ29udHJvbGxlcjo6aXRlbUF0SW5kZXgoaW50IGkpCiAgICAg
cmV0dXJuIG1fY2xpZW50LT5pdGVtQXRJbmRleChpKTsKIH0KIAordm9pZCBCYWNrRm9yd2FyZENv
bnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICBtX2NsaWVudC0+Y2xlYXIoKTsKK30KKwogdm9pZCBC
YWNrRm9yd2FyZENvbnRyb2xsZXI6OmNsb3NlKCkKIHsKICAgICBtX2NsaWVudC0+Y2xvc2UoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5oCmluZGV4
IDYzODc3NDY0MzFiZWMwZWRjNmMwYjQ0YjcyYWI2OGUyZTU4Y2U3ZWMuLmUwZDg2MzIxN2FiMjEx
NTdiM2RmNjQzMmEzZTRjZDJmZmNlNmMwNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuaApAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAKICAg
ICBIaXN0b3J5SXRlbSogaXRlbUF0SW5kZXgoaW50KTsKIAorICAgIHZvaWQgY2xlYXIoKTsKICAg
ICB2b2lkIGNsb3NlKCk7CiAKICAgICBIaXN0b3J5SXRlbSogYmFja0l0ZW0oKSB7IHJldHVybiBp
dGVtQXRJbmRleCgtMSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0
LmNwcAppbmRleCAxZTVlNzc0ZTdjOTQ0MTNiYTk2ZTE5ZmNjZWIwNTIzOThjMGU3MmZiLi4wYmQ4
NDI5NzdmNDkxNDAyN2RmODMzZTgyYzUwZWQwM2Q0NjdkZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0yNTQsNiArMjU0LDEyIEBAIGJvb2wgQmFj
a0ZvcndhcmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQmFj
a0ZvcndhcmRMaXN0OjpjbGVhcigpCit7CisgICAgc2V0RW5hYmxlZChmYWxzZSk7CisgICAgc2V0
RW5hYmxlZCh0cnVlKTsKK30KKwogdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKIHsKICAg
ICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3QuaAppbmRleCAzYjA1YmU5ZjA2YzE1ZGNmZTNkNDU2MjVlOThmZjNmNDFkNjE1
N2FkLi42NjI0ZTdmYzA4NzY0YzI3OTI0ZGY5ZDc0ZmJmZWQ5NTNmODBmYjQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgaW50IGZvcndhcmRMaXN0Q291bnQoKSBvdmVycmlkZTsKICAgICBib29s
IGNvbnRhaW5zSXRlbShIaXN0b3J5SXRlbSopOwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBj
bG9zZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cAppbmRleCA1YWNlNmVhOGIyY2Q2MGU1MzAxMmJiYmMyYzA1MDY1YmUxYmE3MzkwLi5mZTAyNDIz
ZGEyNDM0MTk1YjUyMDMzOTc2Yzg2OTNlYmVhYWRhMGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtNjYsNiArNjYsMTYgQEAgaW5saW5lIEZv
cm1EYXRhOjpGb3JtRGF0YShjb25zdCBGb3JtRGF0YSYgZGF0YSkKICAgICB9CiB9CiAKKyNpZiBF
TkFCTEUoV0VCX1JFUExBWSkKK0Zvcm1EYXRhOjpGb3JtRGF0YShWZWN0b3I8Rm9ybURhdGFFbGVt
ZW50PiBlbGVtZW50cywgaW50NjRfdCBpZGVudGlmaWVyLCBib29sIGFsd2F5c1N0cmVhbSwgVmVj
dG9yPGNoYXI+IGJvdW5kYXJ5KQorICAgIDogbV9lbGVtZW50cyhlbGVtZW50cykKKyAgICAsIG1f
aWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9hbHdheXNTdHJlYW0oYWx3YXlzU3RyZWFt
KQorICAgICwgbV9ib3VuZGFyeShib3VuZGFyeSkKK3sKK30KKyNlbmRpZgorCiBGb3JtRGF0YTo6
fkZvcm1EYXRhKCkKIHsKICAgICAvLyBUaGlzIGNsZWFudXAgc2hvdWxkJ3ZlIGhhcHBlbmVkIHdo
ZW4gdGhlIGZvcm0gc3VibWlzc2lvbiBmaW5pc2hlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA2MTZiMmMxZmMxMDU1ZjFlMzMxMTE3Zjc2MDQxY2Ri
ZDM2NzUyYWIzLi42MWRjY2ZiMWUzNzE1ZjFiNWNiNDAzOTk0YzE2ZDRiMjRkY2I3ZGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC00NSw3ICs0NSw3
IEBAIHB1YmxpYzoKICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFt
ZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSksIG1f
b3duc0dlbmVyYXRlZEZpbGUoZmFsc2UpIHsgfQogI2VuZGlmCiAKLSAgICBlbnVtIFR5cGUgewor
ICAgIGVudW0gVHlwZSA6IHVpbnQ2NF90IHsKICAgICAgICAgZGF0YSwKICAgICAgICAgZW5jb2Rl
ZEZpbGUKICNpZiBFTkFCTEUoQkxPQikKQEAgLTE2MCw2ICsxNjAsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gRm9ybVVSTEVuY29kZWQ7CiAgICAgfQogCisjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCitwcm90ZWN0ZWQ6CisgICAgRm9ybURhdGEoVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4sIGlu
dDY0X3QgaWRlbnRpZmllciwgYm9vbCBhbHdheXNTdHJlYW0sIFZlY3RvcjxjaGFyPiBib3VuZGFy
eSk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb3JtRGF0YSgpOwogICAgIEZvcm1EYXRhKGNv
bnN0IEZvcm1EYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5j
cHAKaW5kZXggOGQ2YTM0ZWIxMjc3MDNmOTdhZjNiZmI4ZmVjODAxMTg0M2I4YTg5ZS4uYzUzYjhi
ZTc3NGFjODQ5NmJkZjhiMWMyZmJmNjEzNDFkNzEzY2VjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
cGxheS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtMTczLDggKzE3MywxNCBAQCB2b2lkIFJlcGxh
eUNvbnRyb2xsZXI6OmNyZWF0ZVNlZ21lbnQoKQogICAgIG1fYWN0aXZlQ3Vyc29yID0gbV9sb2Fk
ZWRTZWdtZW50LT5jcmVhdGVDYXB0dXJpbmdDdXJzb3IobV9wYWdlKTsKICAgICBtX2FjdGl2ZUN1
cnNvci0+YXBwZW5kSW5wdXQ8QmVnaW5TZWdtZW50U2VudGluZWw+KCk7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW5pdGlhbE5hdmlnYXRpb24+IG5hdmlnYXRpb25JbnB1dCA9IEluaXRpYWxOYXZp
Z2F0aW9uOjpjcmVhdGVGcm9tUGFnZShtX3BhZ2UpOworICAgIC8vIERpc3BhdGNoaW5nIHRoaXMg
aW5wdXQgc2F2ZXMgaGlzdG9yeSwgY2xlYXJzIGFsbCBidXQgdGhlIGN1cnJlbnQgaXRlbSwgYXBw
ZW5kcyBzYXZlZAorICAgIC8vIGhpc3RvcnkgaXRlbSB0byB0aGUgYmFjay9mb3J3YXJkIGxpc3Qs
IHRoZW4gbW92ZXMgdGhlIGN1cnJlbnQgaXRlbSBjdXJzb3IgdG8gdGhlIGxhc3QgZW50cnkuCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxpemVIaXN0b3J5PiBoaXN0b3J5SW5wdXQgPSBJbml0
aWFsaXplSGlzdG9yeTo6Y3JlYXRlRnJvbVBhZ2UobV9wYWdlKTsKKyAgICBoaXN0b3J5SW5wdXQt
PmRpc3BhdGNoKCp0aGlzKTsKKyAgICBtX2FjdGl2ZUN1cnNvci0+c3RvcmVJbnB1dChzdGQ6Om1v
dmUoaGlzdG9yeUlucHV0KSk7CisKICAgICAvLyBEaXNwYXRjaGluZyB0aGlzIGlucHV0IHNjaGVk
dWxlcyBuYXZpZ2F0aW9uIG9mIHRoZSBtYWluIGZyYW1lLCBjYXVzaW5nIGEgcmVmcmVzaC4KKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5pdGlhbE5hdmlnYXRpb24+IG5hdmlnYXRpb25JbnB1dCA9IElu
aXRpYWxOYXZpZ2F0aW9uOjpjcmVhdGVGcm9tUGFnZShtX3BhZ2UpOwogICAgIG5hdmlnYXRpb25J
bnB1dC0+ZGlzcGF0Y2goKnRoaXMpOwogICAgIG1fYWN0aXZlQ3Vyc29yLT5zdG9yZUlucHV0KHN0
ZDo6bW92ZShuYXZpZ2F0aW9uSW5wdXQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9SZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwCmluZGV4IDBlZDNlMjMyM2M1NmVj
NTNhOTg1MjdmOGIyNGJmOTA5OGEzZTg1OTYuLjY3Zjg3NjIwNmFkMjFiNWQwZmE2ODBlN2M3ZWZi
YTkwNTVlZjkyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1
dENyZWF0aW9uTWV0aG9kcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlu
cHV0Q3JlYXRpb25NZXRob2RzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAKKyNpbmNsdWRlICJCYWNr
Rm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1h
aW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ5LDYgKzUwLDE4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbml0aWFsTmF2aWdhdGlvbj4gSW5pdGlhbE5hdmlnYXRpb246OmNyZWF0ZUZyb21Q
YWdlKGNvbnN0IFBhZ2UmCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbE5hdmln
YXRpb24+KG9yaWdpbkNvcHksIHVybCwgcmVmZXJyZXIpOwogfQogCitzdGQ6OnVuaXF1ZV9wdHI8
SW5pdGlhbGl6ZUhpc3Rvcnk+IEluaXRpYWxpemVIaXN0b3J5OjpjcmVhdGVGcm9tUGFnZShjb25z
dCBQYWdlJiBwYWdlKQoreworICAgIGludCBiYWNrQ291bnQgPSBwYWdlLmJhY2tGb3J3YXJkKCku
YmFja0NvdW50KCk7CisgICAgVmVjdG9yPFJlZlB0cjxIaXN0b3J5SXRlbT4+IGVudHJpZXMoYmFj
a0NvdW50ICsgMSk7CisKKyAgICAvLyBPbmx5IHNhdmUgYmFja3dhcmQgZW50cmllczsgdGhlIGlu
aXRpYWwgbmF2aWdhdGlvbiB3aWxsIHRydW5jYXRlIGFueSBmb3J3YXJkIGVudHJpZXMuCisgICAg
Zm9yIChpbnQgaSA9IC1iYWNrQ291bnQ7IGkgPD0gMDsgKytpKQorICAgICAgICBlbnRyaWVzW2kg
KyBiYWNrQ291bnRdID0gcGFnZS5iYWNrRm9yd2FyZCgpLml0ZW1BdEluZGV4KGkpLT5jb3B5KCk7
CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbml0aWFsaXplSGlzdG9yeT4oZW50cmll
cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJf
UkVQTEFZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0RGlz
cGF0Y2hNZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dERpc3Bh
dGNoTWV0aG9kcy5jcHAKaW5kZXggNjQ1NGE0ODAxNTczYmRiNzZlZTM5YTc3N2M1MWIwYjM4M2Jj
NTU1Yy4uNTk5NTM4YzgzOGRmYjMzMzJmODZhODJjZmQ5YjU5YzRjNWI1YmY1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3Bw
CkBAIC0yOSwxMCArMjksMTUgQEAKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKIAogI2luY2x1ZGUg
IkFsbFJlcGxheUlucHV0cy5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvblNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSZXBsYXlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVXNlcklucHV0QnJpZGdlLmgiCiAKQEAgLTUzLDYg
KzU4LDE4IEBAIHZvaWQgSW5pdGlhbE5hdmlnYXRpb246OmRpc3BhdGNoKFJlcGxheUNvbnRyb2xs
ZXImIGNvbnRyb2xsZXIpCiAgICAgY29udHJvbGxlci5wYWdlKCkubWFpbkZyYW1lKCkubmF2aWdh
dGlvblNjaGVkdWxlcigpLnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobV9zZWN1cml0eU9yaWdpbi5n
ZXQoKSwgbV91cmwsIG1fcmVmZXJyZXIpOwogfQogCit2b2lkIEluaXRpYWxpemVIaXN0b3J5Ojpk
aXNwYXRjaChSZXBsYXlDb250cm9sbGVyJiBjb250cm9sbGVyKQoreworICAgIC8vIEZJWE1FOiBM
b2FkIHRoZSBlbXB0eSBkb2N1bWVudCwgc28gdGhhdCB3aGVuIHdlIHBydW5lIHRoZSBiYWNrLWZv
cndhcmQgbGlzdCBpdAorICAgIC8vIGlzIHRoZSBzaW5nbGUgcmVtYWluaW5nIGVudHJ5LiA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTMxOTg5PgorICAgIGNvbnRyb2xsZXIucGFnZSgpLmJhY2tGb3J3
YXJkKCkuY2xlYXIoKTsKKworICAgIGZvciAoUmVmUHRyPEhpc3RvcnlJdGVtPiBoaXN0b3J5RW50
cnkgOiBtX2VudHJpZXMpCisgICAgICAgIGNvbnRyb2xsZXIucGFnZSgpLmJhY2tGb3J3YXJkKCku
YWRkSXRlbShoaXN0b3J5RW50cnktPmNvcHkoKSk7CisKKyAgICBjb250cm9sbGVyLnBhZ2UoKS5t
YWluRnJhbWUoKS5sb2FkZXIoKS5oaXN0b3J5KCkuc2V0Q3VycmVudEl0ZW0oY29udHJvbGxlci5w
YWdlKCkuYmFja0ZvcndhcmQoKS5jdXJyZW50SXRlbSgpKTsKK30KKwogdm9pZCBIYW5kbGVLZXlQ
cmVzczo6ZGlzcGF0Y2goUmVwbGF5Q29udHJvbGxlciYgY29udHJvbGxlcikKIHsKICAgICBjb250
cm9sbGVyLnBhZ2UoKS51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVLZXlFdmVudChwbGF0Zm9ybUV2
ZW50KCksIElucHV0U291cmNlOjpTeW50aGV0aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAKaW5kZXggNTJhMzc5ZjllOGM2OTZiYmMzMTQ0MGI1
NTgzYWM5Nzg3YzUyZWNiMy4uYWIxOGIxNWUzMTI1NGRmOGI3NGY2YzdkZTIzYjI5NGVlYTRiNzgy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2Rz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3Bw
CkBAIC0zMiw4ICszMiwxMCBAQAogCiAjaW5jbHVkZSAiQWxsUmVwbGF5SW5wdXRzLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNp
bmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgiCkBAIC00Miw5ICs0NCwxMyBAQAogI2luY2x1ZGUgIlBsdWdpbkRh
dGEuaCIKICNpbmNsdWRlICJSZXBsYXlJbnB1dFR5cGVzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJV
UkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAordXNpbmcgV2ViQ29yZTo6Rm9y
bURhdGE7Cit1c2luZyBXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ7Cit1c2luZyBXZWJDb3JlOjpI
aXN0b3J5SXRlbTsKIHVzaW5nIFdlYkNvcmU6OktleXByZXNzQ29tbWFuZDsKIHVzaW5nIFdlYkNv
cmU6OkludFBvaW50OwogdXNpbmcgV2ViQ29yZTo6TWltZUNsYXNzSW5mbzsKQEAgLTU3LDYgKzYz
LDcgQEAgdXNpbmcgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHk7CiB1c2lu
ZyBXZWJDb3JlOjpQbHVnaW5EYXRhOwogdXNpbmcgV2ViQ29yZTo6UGx1Z2luSW5mbzsKIHVzaW5n
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOwordXNpbmcgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogdXNpbmcgV2ViQ29yZTo6VVJMOwogdXNpbmcgV2ViQ29yZTo6aW5wdXRUeXBlczsK
IApAQCAtMTkxLDYgKzE5OCwxODEgQEAgRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPE5vbmRl
dGVybWluaXN0aWNJbnB1dEJhc2U+OjplbmNvZGVWYWx1ZShjb25zdCBOb25kZXQKICAgICByZXR1
cm4gRW5jb2RlZFZhbHVlKCk7CiB9CiAKK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxGb3Jt
RGF0YT46OmVuY29kZVZhbHVlKFJlZlB0cjxGb3JtRGF0YT4gZGF0YSkKK3sKKyAgICBFbmNvZGVk
VmFsdWUgZW5jb2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+
LCBlbGVtZW50cywgZGF0YS0+ZWxlbWVudHMoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIGludDY0X3QsIGlkZW50aWZpZXIsIGRhdGEtPmlkZW50aWZpZXIoKSk7Cisg
ICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGFsd2F5c1N0cmVhbSwg
ZGF0YS0+YWx3YXlzU3RyZWFtKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBWZWN0b3I8Y2hhcj4sIGJvdW5kYXJ5LCBkYXRhLT5ib3VuZGFyeSgpKTsKKworICAgIHJl
dHVybiBlbmNvZGVkRGF0YTsKK30KKworY2xhc3MgRGVzZXJpYWxpemVkRm9ybURhdGEgOiBwdWJs
aWMgRm9ybURhdGEgeworcHVibGljOgorICAgIERlc2VyaWFsaXplZEZvcm1EYXRhKFZlY3RvcjxG
b3JtRGF0YUVsZW1lbnQ+IGVsZW1lbnRzLCBpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgYWx3YXlz
U3RyZWFtLCBWZWN0b3I8Y2hhcj4gYm91bmRhcnkpCisgICAgICAgIDogRm9ybURhdGEoZWxlbWVu
dHMsIGlkZW50aWZpZXIsIGFsd2F5c1N0cmVhbSwgYm91bmRhcnkpCisgICAgeworICAgIH0KK307
CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8Rm9ybURhdGE+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFs
dWUmIGVuY29kZWREYXRhLCBSZWZQdHI8Rm9ybURhdGE+JiBmb3JtRGF0YSkKK3sKKyAgICBERUNP
REVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4sIGVs
ZW1lbnRzKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50NjRfdCwg
aWRlbnRpZmllcik7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2ws
IGFsd2F5c1N0cmVhbSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZl
Y3RvcjxjaGFyPiwgYm91bmRhcnkpOworCisgICAgZm9ybURhdGEgPSBhZG9wdFJlZihuZXcgRGVz
ZXJpYWxpemVkRm9ybURhdGEoZWxlbWVudHMsIGlkZW50aWZpZXIsIGFsd2F5c1N0cmVhbSwgYm91
bmRhcnkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8PgorRW5jb2RlZFZhbHVl
IEVuY29kaW5nVHJhaXRzPEZvcm1EYXRhRWxlbWVudD46OmVuY29kZVZhbHVlKGNvbnN0IEZvcm1E
YXRhRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBF
bmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIEZvcm1EYXRhRWxlbWVudDo6VHlwZSwgdHlwZSwgZWxlbWVudC5tX3R5cGUp
OworICAgIHN3aXRjaCAoZWxlbWVudC5tX3R5cGUpIHsKKyAgICBjYXNlIEZvcm1EYXRhRWxlbWVu
dDo6ZGF0YToKKyAgICAgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3Rv
cjxjaGFyPiwgZGF0YSwgZWxlbWVudC5tX2RhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6CisgICAgICAgIEVOQ09ERV9UWVBFX1dJVEhf
S0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGZpbGVuYW1lLCBlbGVtZW50Lm1fZmlsZW5hbWUpOwor
ICAgICAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgc2hvdWxkR2Vu
ZXJhdGVGaWxlLCBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyNpZiBFTkFCTEUoQkxP
QikKKyAgICAgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywg
ZmlsZVN0YXJ0LCBlbGVtZW50Lm1fZmlsZVN0YXJ0KTsKKyAgICAgICAgRU5DT0RFX1RZUEVfV0lU
SF9LRVkoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywgZmlsZUxlbmd0aCwgZWxlbWVudC5tX2ZpbGVM
ZW5ndGgpOworICAgICAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZG91Ymxl
LCBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBlbGVtZW50Lm1fZXhwZWN0ZWRGaWxlTW9k
aWZpY2F0aW9uVGltZSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKEJMT0Ip
CisgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRCbG9iOgorICAgICAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCBibG9iVVJMLCBlbGVtZW50Lm1fdXJsKTsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gZW5jb2RlZERhdGE7
Cit9CisKK3RlbXBsYXRlPD4KK2Jvb2wgRW5jb2RpbmdUcmFpdHM8Rm9ybURhdGFFbGVtZW50Pjo6
ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgRm9ybURhdGFFbGVtZW50JiBl
bGVtZW50KQoreworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0
YSwgRm9ybURhdGFFbGVtZW50OjpUeXBlLCB0eXBlLCBlbGVtZW50Lm1fdHlwZSk7CisgICAgc3dp
dGNoIChlbGVtZW50Lm1fdHlwZSkgeworICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjpkYXRhOgor
ICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIFZlY3Rv
cjxjaGFyPiwgZGF0YSwgZWxlbWVudC5tX2RhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6CisgICAgICAgIERFQ09ERV9UWVBFX1dJVEhf
S0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmaWxlbmFtZSwgZWxlbWVudC5tX2Zp
bGVuYW1lKTsKKyAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWRE
YXRhLCBib29sLCBzaG91bGRHZW5lcmF0ZUZpbGUsIGVsZW1lbnQubV9zaG91bGRHZW5lcmF0ZUZp
bGUpOworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19M
VkFMVUUoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywgZmlsZVN0YXJ0LCBlbGVtZW50Lm1fZmlsZVN0
YXJ0KTsKKyAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRh
LCBsb25nIGxvbmcsIGZpbGVMZW5ndGgsIGVsZW1lbnQubV9maWxlTGVuZ3RoKTsKKyAgICAgICAg
REVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBkb3VibGUsIGV4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGVsZW1lbnQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBj
YXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2I6CisgICAgICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgVVJMLCBibG9iVVJMLCBlbGVtZW50Lm1fdXJs
KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPEhpc3RvcnlJdGVtPjo6ZW5jb2RlVmFsdWUo
UmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtKQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFs
dWUgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lU
SF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIG9yaWdpbmFsVVJMU3RyaW5nLCBpdGVtLT5vcmln
aW5hbFVSTFN0cmluZygpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUs
IFN0cmluZywgdXJsU3RyaW5nLCBpdGVtLT51cmxTdHJpbmcoKSk7CisgICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIHRpdGxlLCBpdGVtLT50aXRsZSgpKTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgcGFyZW50LCBpdGVt
LT5wYXJlbnQoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQ2
NF90LCBkb2N1bWVudFNlcXVlbmNlTnVtYmVyLCBpdGVtLT5kb2N1bWVudFNlcXVlbmNlTnVtYmVy
KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgVmVjdG9yPFN0cmlu
Zz4sIGRvY3VtZW50U3RhdGUsIGl0ZW0tPmRvY3VtZW50U3RhdGUoKSk7CisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIGZvcm1Db250ZW50VHlwZSwgaXRlbS0+
Zm9ybUNvbnRlbnRUeXBlKCkpOworICAgIEVOQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgRm9ybURhdGEsIGZvcm1EYXRhLCBhZG9wdFJlZihpdGVtLT5mb3JtRGF0YSgp
KSwgaXRlbS0+Zm9ybURhdGEoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZh
bHVlLCBpbnQ2NF90LCBpdGVtU2VxdWVuY2VOdW1iZXIsIGl0ZW0tPml0ZW1TZXF1ZW5jZU51bWJl
cigpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgcmVm
ZXJyZXIsIGl0ZW0tPnJlZmVycmVyKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWRWYWx1ZSwgSW50UG9pbnQsIHNjcm9sbFBvaW50LCBpdGVtLT5zY3JvbGxQb2ludCgpKTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGZsb2F0LCBwYWdlU2NhbGVGYWN0
b3IsIGl0ZW0tPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBFTkNPREVfT1BUSU9OQUxfVFlQRV9X
SVRIX0tFWShlbmNvZGVkVmFsdWUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgc3RhdGVPYmplY3Qs
IGl0ZW0tPnN0YXRlT2JqZWN0KCksIGl0ZW0tPnN0YXRlT2JqZWN0KCkuZ2V0KCkpOworICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCB0YXJnZXQsIGl0ZW0tPnRh
cmdldCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFZlY3RvcjxI
aXN0b3J5SXRlbT4sIGNoaWxkcmVuLCBpdGVtLT5jaGlsZHJlbigpKTsKKworICAgIHJldHVybiBl
bmNvZGVkVmFsdWU7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8SGlzdG9yeUl0ZW0+OjpkZWNv
ZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWREYXRhLCBSZWZQdHI8SGlzdG9yeUl0ZW0+JiBk
ZWNvZGVkSXRlbSkKK3sKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3Ry
aW5nLCBvcmlnaW5hbFVSTFN0cmluZyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIFN0cmluZywgdXJsU3RyaW5nKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgU3RyaW5nLCB0aXRsZSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIFN0cmluZywgcGFyZW50KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgaW50NjRfdCwgZG9jdW1lbnRTZXF1ZW5jZU51bWJlcik7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+LCBkb2N1bWVudFN0YXRlKTsKKyAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmb3JtQ29udGVudFR5
cGUpOworICAgIERFQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBGb3Jt
RGF0YSwgZm9ybURhdGEpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBp
bnQ2NF90LCBpdGVtU2VxdWVuY2VOdW1iZXIpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWREYXRhLCBTdHJpbmcsIHJlZmVycmVyKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgSW50UG9pbnQsIHNjcm9sbFBvaW50KTsKKyAgICBERUNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgREVDT0RFX09Q
VElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
c3RhdGVPYmplY3QpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJp
bmcsIHRhcmdldCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3Rv
cjxIaXN0b3J5SXRlbT4sIGNoaWxkcmVuKTsKKworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRl
bSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUoKTsKKyAgICBpdGVtLT5zZXRPcmlnaW5hbFVSTFN0cmlu
ZyhvcmlnaW5hbFVSTFN0cmluZyk7CisgICAgaXRlbS0+c2V0VVJMU3RyaW5nKHVybFN0cmluZyk7
CisgICAgaXRlbS0+c2V0VGl0bGUodGl0bGUpOworICAgIGl0ZW0tPnNldFBhcmVudChwYXJlbnQp
OworICAgIGl0ZW0tPnNldERvY3VtZW50U2VxdWVuY2VOdW1iZXIoZG9jdW1lbnRTZXF1ZW5jZU51
bWJlcik7CisgICAgaXRlbS0+c2V0RG9jdW1lbnRTdGF0ZShkb2N1bWVudFN0YXRlKTsKKyAgICBp
dGVtLT5zZXRGb3JtQ29udGVudFR5cGUoZm9ybUNvbnRlbnRUeXBlKTsKKyAgICBpZiAoZm9ybURh
dGFXYXNEZWNvZGVkKQorICAgICAgICBpdGVtLT5zZXRGb3JtRGF0YShmb3JtRGF0YS5yZWxlYXNl
KCkpOworICAgIGl0ZW0tPnNldEl0ZW1TZXF1ZW5jZU51bWJlcihpdGVtU2VxdWVuY2VOdW1iZXIp
OworICAgIGl0ZW0tPnNldFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICBpdGVtLT5zZXRTY3JvbGxQ
b2ludChzY3JvbGxQb2ludCk7CisgICAgaXRlbS0+c2V0UGFnZVNjYWxlRmFjdG9yKHBhZ2VTY2Fs
ZUZhY3Rvcik7CisgICAgaXRlbS0+c2V0VGFyZ2V0KHRhcmdldCk7CisgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKQorICAgICAgICBpdGVtLT5hZGRDaGlsZEl0ZW0oY2hpbGQpOworICAg
IGlmIChzdGF0ZU9iamVjdFdhc0RlY29kZWQpCisgICAgICAgIGl0ZW0tPnNldFN0YXRlT2JqZWN0
KHN0YXRlT2JqZWN0LnJlbGVhc2UoKSk7CisKKyAgICBkZWNvZGVkSXRlbSA9IGl0ZW0ucmVsZWFz
ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitFbmNvZGVkVmFsdWUgRW5j
b2RpbmdUcmFpdHM8SW50UG9pbnQ+OjplbmNvZGVWYWx1ZShjb25zdCBJbnRQb2ludCYgcG9pbnQp
Cit7CisgICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVP
YmplY3QoKTsKKworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHgs
IHBvaW50LngoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwg
eSwgcG9pbnQueSgpKTsKKworICAgIHJldHVybiBlbmNvZGVkRGF0YTsKK30KKwordGVtcGxhdGU8
PgorYm9vbCBFbmNvZGluZ1RyYWl0czxJbnRQb2ludD46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1
ZSYgZW5jb2RlZERhdGEsIEludFBvaW50JiBwb2ludCkKK3sKKyAgICBJbnRQb2ludCBkZWNvZGVk
UG9pbnQ7CisKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCB4KTsK
KyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCB5KTsKKworICAgIHBv
aW50ID0gSW50UG9pbnQoeCwgeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgRW5jb2Rp
bmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT46OmRlY29kZVZhbHVlKEVuY29kZWRW
YWx1ZSYgZW5jb2RlZFZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0
QmFzZT4mIGlucHV0KQogewogICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwg
U3RyaW5nLCB0eXBlKTsKQEAgLTUxMSw2ICs2OTMsMTcgQEAgYm9vbCBFbmNvZGluZ1RyYWl0czxT
ZWN1cml0eU9yaWdpbj46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZFZhbHVlLCBS
ZWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmVuY29kZVZhbHVlKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGlucHV0KQoreworICAgIHJldHVybiBFbmNvZGVkVmFsdWU6OmNyZWF0ZVN0cmluZyhp
bnB1dC0+dG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUsIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiBpbnB1dCkKK3sKKyAgICBpbnB1dCA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGVuY29kZWRWYWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFVSTD46
OmVuY29kZVZhbHVlKGNvbnN0IFVSTCYgaW5wdXQpCiB7CiAgICAgcmV0dXJuIEVuY29kZWRWYWx1
ZTo6Y3JlYXRlU3RyaW5nKGlucHV0LnN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5oIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1NlcmlhbGl6YXRpb25NZXRob2RzLmgKaW5kZXggMDI0MjA4YmI3MDU4MjMzMDU1MTBjNmI2ODY5
NjcxNTAzYjE1ZmY1NC4uNjBmNmE2NTBiMGQwN2Y2NzFiZWM2ZGExMWIxOTcwZTNkMTljODkzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgKQEAgLTM3
LDEzICszNywxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKK2Ns
YXNzIEZvcm1EYXRhOwogY2xhc3MgRnJhbWU7CitjbGFzcyBIaXN0b3J5SXRlbTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZl
bnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBQbHVnaW5EYXRhOwogY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiBjbGFzcyBVUkw7
CiAKICNpZiBVU0UoQVBQS0lUKQpAQCAtNjksNiArNzIsMjAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiB7CiB9OwogI2VuZGlmIC8v
IFVTRShBUFBLSVQpCiAKK3RlbXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6
OkZvcm1EYXRhPiB7CisgICAgdHlwZWRlZiBSZWZQdHI8V2ViQ29yZTo6Rm9ybURhdGE+IERlY29k
ZWRUeXBlOworCisgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShSZWZQdHI8V2Vi
Q29yZTo6Rm9ybURhdGE+KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFs
dWUmLCBSZWZQdHI8V2ViQ29yZTo6Rm9ybURhdGE+Jik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpIaXN0b3J5SXRlbT4geworICAgIHR5cGVkZWYgUmVm
UHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNv
ZGVkVmFsdWUgZW5jb2RlVmFsdWUoUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPik7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgUmVmUHRyPFdlYkNvcmU6Okhp
c3RvcnlJdGVtPiYpOworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8Tm9u
ZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4gewogICAgIHR5cGVkZWYgTm9uZGV0ZXJtaW5pc3RpY0lu
cHV0QmFzZSBEZWNvZGVkVHlwZTsKIApAQCAtMTE4LDYgKzEzNSwxMyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gewogICAgIHN0YXRp
YyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4mIHZhbHVlKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRz
PFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4geworICAgIHR5cGVkZWYgUmVmUHRyPFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gRGVjb2RlZFR5cGU7CisKKyAgICBzdGF0aWMg
RW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKFJlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU+KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYpOworfTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlcGxheS9XZWJJbnB1dHMuanNvbiBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9X
ZWJJbnB1dHMuanNvbgppbmRleCBkYTViZTNlZDNkZjE0YmE3MjIwYzI1M2Q1OTI1Mjk4OGI2NzVj
MzExLi5lMGZjN2YyZjkyNTczNWZkNzk5Zjk4ZWVkMzRlOTdiNGY1YjZkY2JkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViSW5wdXRzLmpzb24KKysrIGIvU291cmNlL1dlYkNv
cmUvcmVwbGF5L1dlYklucHV0cy5qc29uCkBAIC0zOCw2ICszOCwxMCBAQAogICAgICAgICAgICAg
ICAgICJoZWFkZXIiOiAicmVwbGF5L01lbW9pemVkRE9NUmVzdWx0LmgiCiAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogIkhpc3RvcnlJdGVtIiwg
Im1vZGUiOiAiU0hBUkVEIiwKKyAgICAgICAgICAgICAgICAiaGVhZGVyIjogImhpc3RvcnkvSGlz
dG9yeUl0ZW0uaCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIm5hbWUiOiAiTW9kaWZpZXJzIiwgIm1vZGUiOiAiU0NBTEFSIiwgInN0b3JhZ2UiOiAidWlu
dDhfdCIsCiAgICAgICAgICAgICAgICAgImVuY2xvc2luZ19jbGFzcyI6ICJQbGF0Zm9ybUV2ZW50
IiwKICAgICAgICAgICAgICAgICAiZmxhZ3MiOiBbIkVOVU0iXSwKQEAgLTE1MSw2ICsxNTUsMTkg
QEAKICAgICAgICAgICAgICAgICAiaGVhZGVyIjogInBsYXRmb3JtL1BsYXRmb3JtRXZlbnQuaCIK
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAi
VHlwZSIsICJtb2RlIjogIlNDQUxBUiIsICJzdG9yYWdlIjogInVpbnQ2NF90IiwKKyAgICAgICAg
ICAgICAgICAiZW5jbG9zaW5nX2NsYXNzIjogIkZvcm1EYXRhRWxlbWVudCIsCisgICAgICAgICAg
ICAgICAgImZsYWdzIjogWyJFTlVNIl0sCisgICAgICAgICAgICAgICAgInZhbHVlcyI6IFsKKyAg
ICAgICAgICAgICAgICAgICAgImRhdGEiLAorICAgICAgICAgICAgICAgICAgICAiZW5jb2RlZEZp
bGUiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAiZ3VhcmRlZF92YWx1ZXMi
OiB7CisgICAgICAgICAgICAgICAgICAgICJFTkFCTEUoQkxPQikiOiBbImVuY29kZWRCbG9iIl0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJoZWFkZXIiOiAicGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5oIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAibmFtZSI6ICJVUkwiLCAibW9kZSI6ICJIRUFWWV9TQ0FMQVIiLAogICAgICAg
ICAgICAgICAgICJoZWFkZXIiOiAicGxhdGZvcm0vVVJMLmgiCiAgICAgICAgICAgICB9CkBAIC0y
MjAsNiArMjM3LDE1IEBACiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkluaXRpYWxpemVIaXN0b3J5IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJSZXN0b3JlIHRoZSBzYXZlZCBoaXN0b3J5IGl0ZW1zIHRoYXQgY29tcHJpc2Ug
dGhlIHBhZ2UncyBiYWNrLWZvcndhcmQgbGlzdC4iLAorICAgICAgICAgICAgInF1ZXVlIjogIkVW
RU5UX0xPT1AiLAorICAgICAgICAgICAgImZsYWdzIjogWyJDUkVBVEVfRlJPTV9QQUdFIl0sCisg
ICAgICAgICAgICAibWVtYmVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudHJp
ZXMiLCAidHlwZSI6ICJIaXN0b3J5SXRlbSIsICJmbGFncyI6IFsiVkVDVE9SIl0gfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJJbml0
aWFsTmF2aWdhdGlvbiIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5pdGlhdGUgdGhl
IGluaXRpYWwgbWFpbiBmcmFtZSBuYXZpZ2F0aW9uLiIsCiAgICAgICAgICAgICAicXVldWUiOiAi
RVZFTlRfTE9PUCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCmluZGV4IGU0N2VlZDc0ZjRkMDRlNDUx
OGI4MTQ0ZTFkZWUwZmVmZWM0MDU3ZjIuLjVhNDIxMGRmMGFkMzU4NThkODFjMTAzMmYxOThlMDM5
ZjJhNzBjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBhZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+KTsKICAgICBzdGF0aWMgdm9pZCBzZXRI
aWdoZXN0SXRlbUlERnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQpOwogICAgIAotICAgIHZv
aWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSBvdmVycmlkZTsKIAogcHJpdmF0
ZToKICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eShXZWJQYWdlKik7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWIwNWU1
NjFhOGU0NDAxZTZlMDYzN2M5NjJlMDY4MGVhYWMwYzA2My4uODJlZDQ3MDAxYzNhZTU3N2Q0MjJi
MzI4ZGY5YWE4ZjUwY2ZkNDQ4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE0LTA0LTIyICBC
cmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgUmVw
bGF5OiBzYXZlIGFuZCByZXN0b3JlIHBhZ2UgaGlzdG9yeSBzdGF0ZSBhdCBtYWluIGZyYW1lIG5h
dmlnYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzEwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9yZXBsYXkvaGlzdG9yeS1sZW5ndGgtc2luZ2xlLXNlZ21lbnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvcmVwbGF5L2hpc3RvcnktbGVuZ3Ro
LXNpbmdsZS1zZWdtZW50Lmh0bWw6IEFkZGVkLgorCiAyMDE0LTA0LTIyICBEYXZpZCBIeWF0dCAg
PGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBmYXN0L211bHRp
Y29sL211bHRpY29sLXdpdGgtY2hpbGQtcmVuZGVyTGF5ZXItZm9yLWlucHV0Lmh0bWwgcHV0cyB0
aGUgdGV4dGZpZWxkIGluIHRoZSB3cm9uZyBwbGFjZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3JlcGxheS9oaXN0b3J5LWxlbmd0aC1zaW5nbGUtc2VnbWVudC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2hpc3RvcnktbGVuZ3RoLXNpbmdsZS1z
ZWdtZW50LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzk3ZmZkNWNjM2I3MmU2MTJlOTEwMjE1
YzZmZWQ2ZjUyYzQ4ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3JlcGxheS9oaXN0b3J5LWxlbmd0aC1zaW5nbGUtc2VnbWVudC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxNCBAQAorVGVzdHMgdGhhdCB3aW5kb3cuaGlzdG9yeS5sZW5ndGggaXMgdGhlIHNhbWUg
ZHVyaW5nIGNhcHR1cmUgYW5kIHJlcGxheSBvZiBhIHNpbmdsZSByZXBsYXkgc2Vzc2lvbiBzZWdt
ZW50LgorCitXYWl0aW5nIGZvciB0ZXN0IHBhZ2UgdG8gZmluaXNoIGl0cyBpbml0aWFsIGxvYWQu
Li4KK1Rlc3QgcGFnZSBpbml0aWFsIGxvYWQgZG9uZS4KK1dhaXRpbmcgZm9yIGNhcHR1cmluZyB0
byBzdGFydC4uLgorQ2FwdHVyaW5nIGhhcyBzdGFydGVkLgorV2FpdGluZyB0byBjYXB0dXJlIGlu
aXRpYWwgbmF2aWdhdGlvbi4uLgorSW5pdGlhbCBuYXZpZ2F0aW9uIGNhcHR1cmVkLiBEdW1waW5n
IHN0YXRlLi4uLgorQ2FwdHVyZSBzdG9wcGVkLCBub3cgc3RhcnRpbmcgcmVwbGF5IHRvIGNvbXBs
ZXRpb24uLi4KK1BsYXliYWNrIGhhcyBzdGFydGVkLgorV2FpdGluZyB0byByZXBsYXkgaW5pdGlh
bCBuYXZpZ2F0aW9uLi4uCitJbml0aWFsIG5hdmlnYXRpb24gcmVwbGF5ZWQuIER1bXBpbmcgc3Rh
dGUuLi4KK1BBU1M6IE5vbmRldGVybWluaXN0aWMgc3RhdGUgc2hvdWxkIG5vdCBkaWZmZXIgZHVy
aW5nIGNhcHR1cmUgYW5kIHJlcGxheS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3JlcGxheS9oaXN0b3J5LWxlbmd0aC1zaW5nbGUtc2VnbWVudC5odG1sIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3JlcGxheS9oaXN0b3J5LWxlbmd0aC1zaW5nbGUtc2VnbWVudC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE4OGQ5YzExYjZlMWVmY2UyNzY0OWE3NmRmZDJkNTU0OWViZWJlYWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwbGF5L2hpc3RvcnktbGVuZ3Ro
LXNpbmdsZS1zZWdtZW50Lmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3JlcGxheS9yZXBsYXktdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit3aW5kb3cuX2hpc3RvcnlMZW5ndGggPSB3aW5k
b3cuaGlzdG9yeS5sZW5ndGg7CisKK2Z1bmN0aW9uIGR1bXBOb25kZXRlcm1pbmlzdGljU3RhdGUo
KQoreworICAgIHJldHVybiB3aW5kb3cuX2hpc3RvcnlMZW5ndGg7Cit9CisKK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIGZ1bmN0aW9uIHN0YXRlc0FyZUVxdWFsKGEsIGIpCisgICAgeworICAgICAg
ICByZXR1cm4gYSA9PT0gYjsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JUZXN0LlJlcGxheS5ydW5T
aW5nbGVTZWdtZW50UmVmVGVzdChzdGF0ZXNBcmVFcXVhbCk7Cit9CisKKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdHMgdGhhdCB3aW5kb3cuaGlz
dG9yeS5sZW5ndGggaXMgdGhlIHNhbWUgZHVyaW5nIGNhcHR1cmUgYW5kIHJlcGxheSBvZiBhIHNp
bmdsZSByZXBsYXkgc2Vzc2lvbiBzZWdtZW50LjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>