<?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>93612</bug_id>
          
          <creation_ts>2012-08-09 05:37:32 -0700</creation_ts>
          <short_desc>Introduce node proxy classes and make the parser use them.</short_desc>
          <delta_ts>2013-09-05 08:33:51 -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>WONTFIX</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>93608</dependson>
          <blocked>90751</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691437</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-09 05:37:32 -0700</bug_when>
    <thetext>When the parser runs in speculation mode, it can&apos;t actually create elements because element creation has visible side effects such as registering image or form elements. So speculative parser must be able to pump the tokenizer and run the tree builder without performing DOM modiciations. The parser needs to queue DOM modifications and run them all if the speculation ends up succeeding.
    
Currently, each item of the stack of open elements and the active formatting element list has a pointer to its element. Thanks to r123577 and its follow-up patches, we no longer read tag names and attributes from these elements, but we still has the element pointer because we perform DOM modifications on it.
    
To queue even element creation, we need a way to refer to an element without actually creating it.  So I added proxy nodes in this patch. A proxy node is an object which can hold a RefPtr pointer to an element. When we need to create a node, we create an empty node proxy instead and queue an element creation task that will be performed later. This element creation task creates an element and stores the element pointer into the proxy node. Now when the parser needs to refer to an element, it can refer to its node proxy instead.
    
Only HTMLParserDOMMutationTask knows the difference between Node and NodeProxy. The rest of the parser treats a proxy node as if it is a real node. This is okay because we never (and must not) call DOM operations outside HTMLParserDOMMutationQueue.
    
We have 5 node proxy classes with the same class hierarchy as Node. They essentially play the same role but I added subclasses because I wanted to keep the type information present in the current code. NodeProxy itself is also ref-counted to prevent memory leak.
    
Node proxies are similar to content handles used in Firefox&apos;s HTML parsing threading implementation, but they differ in that contents handles stick around for the life time of the parser and have no type information. A content handle is just a pointer to a pointer to an element (nsIContent**). Refer to https://developer.mozilla.org/en-US/docs/Gecko/HTML_parser_threading &quot;Memory Management When Crossing the Thread Boundary&quot; for further information.
    
Changed HTMLParserDOMMutationQueue to queue element creation in speculation mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691441</commentid>
    <comment_count>1</comment_count>
      <attachid>157454</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-09 05:41:54 -0700</bug_when>
    <thetext>Created attachment 157454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847461</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-05 02:03:11 -0800</bug_when>
    <thetext>We took a different approach with the threaded parser work.  I think this is now WONTFIX/dupe of bug  106127.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925051</commentid>
    <comment_count>3</comment_count>
      <attachid>157454</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-09-05 08:33:51 -0700</bug_when>
    <thetext>Comment on attachment 157454
Patch

The work on this bug has ceased, removing the r? flag on the patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157454</attachid>
            <date>2012-08-09 05:41:54 -0700</date>
            <delta_ts>2013-09-05 08:33:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93612-20120809214120.patch</filename>
            <type>text/plain</type>
            <size>129000</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ2ODYzZjIwMzdmZjFh
NTc2MmE1ZTU1MzBhNjMzYTgzMGU4Y2RkYy4uZmFlMjllMTI0NjcyZGUxNDhlOWY0ODJlODJiMWM1
Y2Q3YmM2N2VlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4NCBAQAogMjAxMi0wOC0wOSAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCisgICAgICAgIEludHJvZHVjZSBu
b2RlIHByb3h5IGNsYXNzZXMgYW5kIG1ha2UgdGhlIHBhcnNlciB1c2UgdGhlbS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjEyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiB0aGUgcGFyc2VyIHJ1
bnMgaW4gc3BlY3VsYXRpb24gbW9kZSwgaXQgY2FuJ3QgYWN0dWFsbHkgY3JlYXRlIGVsZW1lbnRz
CisgICAgICAgIGJlY2F1c2UgZWxlbWVudCBjcmVhdGlvbiBoYXMgdmlzaWJsZSBzaWRlIGVmZmVj
dHMgc3VjaCBhcyByZWdpc3RlcmluZyBpbWFnZSBvcgorICAgICAgICBmb3JtIGVsZW1lbnRzLiBT
byBzcGVjdWxhdGl2ZSBwYXJzZXIgbXVzdCBiZSBhYmxlIHRvIHB1bXAgdGhlIHRva2VuaXplciBh
bmQKKyAgICAgICAgcnVuIHRoZSB0cmVlIGJ1aWxkZXIgd2l0aG91dCBwZXJmb3JtaW5nIERPTSBt
b2RpY2lhdGlvbnMuIFRoZSBwYXJzZXIgbmVlZHMgdG8KKyAgICAgICAgcXVldWUgRE9NIG1vZGlm
aWNhdGlvbnMgYW5kIHJ1biB0aGVtIGFsbCBpZiB0aGUgc3BlY3VsYXRpb24gZW5kcyB1cCBzdWNj
ZWVkaW5nLgorCisgICAgICAgIEN1cnJlbnRseSwgZWFjaCBpdGVtIG9mIHRoZSBzdGFjayBvZiBv
cGVuIGVsZW1lbnRzIGFuZCB0aGUgYWN0aXZlIGZvcm1hdHRpbmcKKyAgICAgICAgZWxlbWVudCBs
aXN0IGhhcyBhIHBvaW50ZXIgdG8gaXRzIGVsZW1lbnQuIFRoYW5rcyB0byByMTIzNTc3IGFuZCBp
dHMgZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMsIHdlIG5vIGxvbmdlciByZWFkIHRhZyBuYW1l
cyBhbmQgYXR0cmlidXRlcyBmcm9tIHRoZXNlIGVsZW1lbnRzLCBidXQgd2UKKyAgICAgICAgc3Rp
bGwgaGFzIHRoZSBlbGVtZW50IHBvaW50ZXIgYmVjYXVzZSB3ZSBwZXJmb3JtIERPTSBtb2RpZmlj
YXRpb25zIG9uIGl0LgorCisgICAgICAgIFRvIHF1ZXVlIGV2ZW4gZWxlbWVudCBjcmVhdGlvbiwg
d2UgbmVlZCBhIHdheSB0byByZWZlciB0byBhbiBlbGVtZW50IHdpdGhvdXQKKyAgICAgICAgYWN0
dWFsbHkgY3JlYXRpbmcgaXQuICBTbyBJIGFkZGVkIHByb3h5IG5vZGVzIGluIHRoaXMgcGF0Y2gu
IEEgcHJveHkgbm9kZSBpcyBhbgorICAgICAgICBvYmplY3Qgd2hpY2ggY2FuIGhvbGQgYSBSZWZQ
dHIgcG9pbnRlciB0byBhbiBlbGVtZW50LiBXaGVuIHdlIG5lZWQgdG8gY3JlYXRlIGEKKyAgICAg
ICAgbm9kZSwgd2UgY3JlYXRlIGFuIGVtcHR5IG5vZGUgcHJveHkgaW5zdGVhZCBhbmQgcXVldWUg
YW4gZWxlbWVudCBjcmVhdGlvbiB0YXNrCisgICAgICAgIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQg
bGF0ZXIuIFRoaXMgZWxlbWVudCBjcmVhdGlvbiB0YXNrIGNyZWF0ZXMgYW4gZWxlbWVudCBhbmQK
KyAgICAgICAgc3RvcmVzIHRoZSBlbGVtZW50IHBvaW50ZXIgaW50byB0aGUgcHJveHkgbm9kZS4g
Tm93IHdoZW4gdGhlIHBhcnNlciBuZWVkcyB0bworICAgICAgICByZWZlciB0byBhbiBlbGVtZW50
LCBpdCBjYW4gcmVmZXIgdG8gaXRzIG5vZGUgcHJveHkgaW5zdGVhZC4KKworICAgICAgICBPbmx5
IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sga25vd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBO
b2RlIGFuZCBOb2RlUHJveHkuCisgICAgICAgIFRoZSByZXN0IG9mIHRoZSBwYXJzZXIgdHJlYXRz
IGEgcHJveHkgbm9kZSBhcyBpZiBpdCBpcyBhIHJlYWwgbm9kZS4gVGhpcyBpcyBva2F5CisgICAg
ICAgIGJlY2FzZSB3ZSBuZXZlciAoYW5kIG11c3Qgbm90KSBjYWxsIERPTSBvcGVyYXRpb25zIG91
dHNpZGUKKyAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuCisKKyAgICAgICAgV2Ug
aGF2ZSA1IG5vZGUgcHJveHkgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIGNsYXNzIGhpZXJhcmNoeSBh
cyBOb2RlLgorICAgICAgICBUaGV5IGVzc2VudGlhbGx5IHBsYXkgdGhlIHNhbWUgcm9sZSBidXQg
SSBhZGRlZCBzdWJjbGFzc2VzIGJlY2F1c2UgSSB3YW50ZWQgdG8KKyAgICAgICAga2VlcCB0aGUg
dHlwZSBpbmZvcm1hdGlvbiBwcmVzZW50IGluIHRoZSBjdXJyZW50IGNvZGUuIE5vZGVQcm94eSBp
dHNlbGYgaXMgYWxzbworICAgICAgICByZWYtY291bnRlZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFr
LgorCisgICAgICAgIE5vZGUgcHJveGllcyBhcmUgc2ltaWxhciB0byBjb250ZW50IGhhbmRsZXMg
dXNlZCBpbiBGaXJlZm94J3MgSFRNTCBwYXJzaW5nCisgICAgICAgIHRocmVhZGluZyBpbXBsZW1l
bnRhdGlvbiwgYnV0IHRoZXkgZGlmZmVyIGluIHRoYXQgY29udGVudHMgaGFuZGxlcyBzdGljayBh
cm91bmQKKyAgICAgICAgZm9yIHRoZSBsaWZlIHRpbWUgb2YgdGhlIHBhcnNlciBhbmQgaGF2ZSBu
byB0eXBlIGluZm9ybWF0aW9uLiBBIGNvbnRlbnQgaGFuZGxlCisgICAgICAgIGlzIGp1c3QgYSBw
b2ludGVyIHRvIGEgcG9pbnRlciB0byBhbiBlbGVtZW50IChuc0lDb250ZW50KiopLgorICAgICAg
ICBSZWZlciB0byBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dlY2tv
L0hUTUxfcGFyc2VyX3RocmVhZGluZworICAgICAgICAiTWVtb3J5IE1hbmFnZW1lbnQgV2hlbiBD
cm9zc2luZyB0aGUgVGhyZWFkIEJvdW5kYXJ5IiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VkIEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlIHRvIHF1ZXVlIGVsZW1l
bnQgY3JlYXRpb24gaW4gc3BlY3VsYXRpb24KKyAgICAgICAgbW9kZS4KKworICAgICAgICBObyBu
ZXcgdGVzdHM7IHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6OnRha2VGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJv
ZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MSHRtbEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnRG
cm9tU2F2ZWRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
Zm9zdGVyUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpm
aW5kTGFzdFRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6YXR0YWNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6OmF0dGFjaEZvc3RlclBhcmVudGVkTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6OmF0dGFjaFRleHRMYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRm9zdGVyUGFyZW50ZWRUZXh0TGF0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaENvbW1lbnRMYXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQ29tbWVudE9uRG9j
dW1lbnRMYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0
YWNoRG9jdHlwZUxhdGVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oOgorICAgICAgICAoSFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmN1cnJlbnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6Zm9ybSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRT
dGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbFBvcHBlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OmZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRT
dGFjazo6aW5TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpodG1s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpoZWFkRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpib2R5RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyb290Tm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25Ub3BDb21tb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6c2hvdyk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTEVsZW1lbnRTdGFjay5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjplbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6Om5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OnRvcE5vZGUpOgorICAgICAgICAoSFRNTEVsZW1lbnRTdGFjayk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0RWxlbWVudEluU2Nv
cGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
Ojpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmJv
b2ttYXJrRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OnN3YXBUbyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c2hv
dyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OmVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6RW50cnk6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uUXVldWU6OmJlZ2luUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01NdXRhdGlvblF1ZXVlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OmFkZENoaWxkQW5kQXR0YWNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpyZW1vdmVGcm9t
UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpt
b3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2Vy
RE9NTXV0YXRpb25RdWV1ZTo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6c2V0SW5zZXJ0ZWRCeVBhcnNlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6c2V0RGVtb3RlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6bWVyZ2VBdHRy
aWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uUXVldWU6Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2Vy
RE9NTXV0YXRpb25RdWV1ZTo6aW5zZXJ0Rm9zdGVyUGFyZW50ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6Omluc2VydFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6Omluc2VydEZvc3RlclBhcmVudGVkVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6aW5zZXJ0
Q29tbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6
aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRP
TU11dGF0aW9uUXVldWU6Omluc2VydERvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uUXVldWU6OmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OmNyZWF0ZUhUTUxFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpjcmVhdGVIVE1MU2NyaXB0RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6Y3Jl
YXRlSFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VyRE9N
TXV0YXRpb25UYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlv
bkluc2VydFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRleHRUYXNrOjpkb1Bl
cmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dEZvc3RlclBhcmVudGVkVGV4dFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudFRhc2s6OmRvUGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9u
RG9jdW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXJET01NdXRhdGlvbkluc2VydERvY3R5cGVUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2luZ0NoaWxkcmVuVGFzazo6
ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25G
aW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFzazo6ZG9QZXJmb3Jt
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9t
UGFyZW50VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2Vy
RE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2s6OmRvUGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRy
ZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01N
dXRhdGlvblNldEF0dHJpYnV0ZVRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0SW5zZXJ0ZWRCeVBhcnNlclRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0RGVtb3Rl
ZFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11
dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrOjpkb1BlcmZvcm1U
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUVsZW1l
bnRUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01N
dXRhdGlvbkNyZWF0ZUhUTUxFbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MU2NyaXB0RWxlbWVudFRhc2s6
OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9u
Q3JlYXRlSFRNTEh0bWxFbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrOjpjcmVhdGUpOgor
ICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2luZ0NoaWxk
cmVuVGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGls
ZHJlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQ
YXJzaW5nQ2hpbGRyZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRh
dGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlz
aFBhcnNpbmdDaGlsZHJlblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11
dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpjcmVhdGUpOgorICAgICAgICAoSFRNTFBhcnNl
ckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFzazo6SFRNTFBhcnNlckRPTU11
dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXJET01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoSFRN
TFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlRnJvbVBhcmVudFRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlRnJvbVBhcmVudFRhc2s6OkhUTUxQYXJzZXJE
T01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50VGFzazo6Y3JlYXRlKToK
KyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hp
bGRyZW5Ub05ld1BhcmVudFRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJl
blRvTmV3UGFyZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRp
b25SZW1vdmVBbGxDaGlsZHJlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChIVE1MUGFyc2VyRE9N
TXV0YXRpb25SZW1vdmVBbGxDaGlsZHJlblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRyZW5UYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRp
b25SZW1vdmVBbGxDaGlsZHJlblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRP
TU11dGF0aW9uU2V0QXR0cmlidXRlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJE
T01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0
cmlidXRlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJ
bnNlcnRlZEJ5UGFyc2VyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRh
dGlvblNldEluc2VydGVkQnlQYXJzZXJUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXJET01NdXRhdGlvblNldEluc2VydGVkQnlQYXJzZXJUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRp
b25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2Vy
RE9NTXV0YXRpb25TZXREZW1vdGVkVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJE
T01NdXRhdGlvblNldERlbW90ZWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJE
T01NdXRhdGlvblNldERlbW90ZWRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVk
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25NZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChIVE1MUGFy
c2VyRE9NTXV0YXRpb25NZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJv
bVRva2VuSW50b0VsZW1lbnRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25NZXJnZUF0dHJpYnV0
ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uSW5zZXJ0VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uSW5zZXJ0VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uSW5zZXJ0VGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJl
bnRlZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRG
b3N0ZXJQYXJlbnRlZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRhc2s6OkhUTUxQ
YXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0VGFzazo6Y3JlYXRlKToKKyAgICAg
ICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRleHRUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRleHRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnRUZXh0VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoSFRN
TFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0VGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRU
YXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRUYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudFRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVu
dFRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRUYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRPbkRvY3VtZW50VGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRP
bkRvY3VtZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25J
bnNlcnRDb21tZW50T25Eb2N1bWVudFRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENv
bW1lbnRPbkRvY3VtZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnREb2N0eXBlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydERvY3R5cGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJE
T01NdXRhdGlvbkluc2VydERvY3R5cGVUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRE
b2N0eXBlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVh
dGVFbGVtZW50VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkNy
ZWF0ZUVsZW1lbnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlv
bkNyZWF0ZUVsZW1lbnRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9u
Q3JlYXRlRWxlbWVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoSFRNTFBhcnNlckRP
TU11dGF0aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxFbGVtZW50VGFzazo6cGVyZm9ybVRhc2spOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNr
OjpIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MRWxlbWVudFRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTFNjcmlw
dEVsZW1lbnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkNy
ZWF0ZUhUTUxTY3JpcHRFbGVtZW50VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNrOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MU2NyaXB0RWxlbWVudFRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEh0bWxFbGVtZW50VGFzazo6
Y3JlYXRlKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxIdG1sRWxl
bWVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRl
SFRNTEh0bWxFbGVtZW50VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEh0bWxFbGVtZW50VGFzazo6SFRNTFBhcnNlckRP
TU11dGF0aW9uQ3JlYXRlSFRNTEh0bWxFbGVtZW50VGFzayk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFN0YWNrSXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja0l0ZW06OmVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U3RhY2tJdGVtOjpIVE1MU3RhY2tJdGVtKToKKyAgICAgICAgKEhUTUxTdGFja0l0ZW0pOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2Vu
Y3kpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1v
ZGVBcHByb3ByaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZ0ZvckluQm9keSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmg6CisgICAgICAgIChIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L05vZGVQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVBy
b3h5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVQcm94eTo6c2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUHJveHk6
Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVByb3h5OjpOb2RlUHJveHkpOgorICAgICAg
ICAoQ29udGFpbmVyTm9kZVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVQ
cm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVQcm94eTo6c2V0
Q29udGFpbmVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlUHJveHk6OmNv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZVByb3h5OjpDb250
YWluZXJOb2RlUHJveHkpOgorICAgICAgICAoRWxlbWVudFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRQcm94
eTo6c2V0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UHJveHk6OmVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFByb3h5OjpFbGVtZW50UHJveHkpOgorICAgICAg
ICAoSFRNTEZvcm1FbGVtZW50UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnRQcm94
eTo6c2V0SFRNTEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dFByb3h5OjpodG1sRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50UHJveHk6OkhUTUxGb3JtRWxlbWVudFByb3h5KToKKyAgICAgICAgKEhUTUxIdG1sRWxlbWVu
dFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudFByb3h5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50UHJveHk6OnNldEhUTUxIdG1sRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnRQcm94eTo6aHRtbEh0bWxF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudFByb3h5OjpIVE1MSHRt
bEVsZW1lbnRQcm94eSk6CisKKzIwMTItMDgtMDkgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21w
YW55MTAwLm5ldD4KKwogICAgICAgICBNb3ZlIGVsZW1lbnQgY3JlYXRpb24gbWV0aG9kcyBpbiBI
VE1MQ29uc3RydWN0aW9uU2l0ZSB0byBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS4KICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjA4CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDU1ODdlYWVlNGU0ZGMzNWM3MmU1OGIzMzJmYjUz
MTkzYjAxYTg4ZjQuLmNjMDc3YWE4MTEyNGIwOTI1MzRhNzVjMWE3ZjQ0OTc3ZTJlODQ1MTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjYwNSw2ICsyNjA1LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVmlld1NvdXJj
ZVBhcnNlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxWaWV3U291cmNl
UGFyc2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL05lc3RpbmdMZXZlbEluY3Jl
bWVudGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL05vZGVQcm94eS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvVGV4dFZpZXdTb3VyY2VQYXJzZXIuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IDhlM2E1YjhmYjdjMDAwMzE0NmZhZGE5YzUyZjQxZmIxODNlYTQzNmIuLjgxNTQzYzhhOTFh
MTFkODk0YzYwZWU3MjVlNzRiY2Q3NDNlZjZlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTgyMiw2ICsx
ODIyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5oIFwK
ICAgICBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBcCiAgICAgaHRtbC9wYXJzZXIvSFRN
TFZpZXdTb3VyY2VQYXJzZXIuaCBcCisgICAgaHRtbC9wYXJzZXIvTm9kZVByb3h5LmggXAogICAg
IGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaCBcCiAgICAgaHRtbC9zaGFkb3cvQ29udGVudERpc3Ry
aWJ1dG9yLmggXAogICAgIGh0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGI3NmU4YzEwNTZhMGUwNWE3NmMzNzEwYTMyOGY0NjYzOTIwODBkMmIu
LjVjYWVkMTZmNmUyMDE0MzZhN2VmYTY1MjUyZTU4Y2UxZTI0ZDY4Y2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTU3NDEsNiArNTc0MSw3IEBACiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFZp
ZXdTb3VyY2VQYXJzZXIuY3BwJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MVmlld1Nv
dXJjZVBhcnNlci5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9OZXN0aW5nTGV2ZWxJbmNy
ZW1lbnRlci5oJywKKyAgICAgICAgICAgICdodG1sL3BhcnNlci9Ob2RlUHJveHkuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmgnLAogICAgICAgICAgICAgJ2h0bWwv
cGFyc2VyL1RleHRWaWV3U291cmNlUGFyc2VyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDk2Nzg2ZDg4M2RmYTI0MzBjYmRkOTQwNTk1
MGRlOTFlYjgyOTA4Y2YuLmYyMWJkZGM0MmMxZGU0ODIyMjc0NjNmNGYxYWNhZmNkOWEwMTEyZWUg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02
MzUzOCw2ICs2MzUzOCwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcTm9kZVByb3h5LmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHBhcnNlclxUZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYxNzY5ZmNiNTJm
YzY4NmE4YWJmMTY4NjA2YjJjMjljMWJjM2U5MjAuLjFiMDdiYzVhNDUwNmM5NjA5NmMxNDM0OTVk
M2ZjNjRiOGY4YWEwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNjQsNiArMzA2NCw3IEBACiAJCThBMTk1OTMzMTQ3RUEx
NkUwMEQxRUE2MSAvKiBET01XZWJLaXROYW1lZEZsb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTE5NTkzMDE0N0VBMTZFMDBEMUVBNjEgLyogRE9N
V2ViS2l0TmFtZWRGbG93Lm1tICovOyB9OwogCQk4QTE5NTkzNDE0N0VBMTZFMDBEMUVBNjEgLyog
RE9NV2ViS2l0TmFtZWRGbG93SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhBMTk1OTMxMTQ3RUExNkUwMEQxRUE2MSAvKiBET01XZWJLaXRO
YW1lZEZsb3dJbnRlcm5hbC5oICovOyB9OwogCQk4QTMwOUM5RjEyMzk1MEJFMDBDQjkyMDQgLyog
TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDhBMzA5QzlFMTIzOTUwQkUwMENCOTIwNCAvKiBOZXN0aW5nTGV2ZWxJ
bmNyZW1lbnRlci5oICovOyB9OworCQk4QTMwOUM5RjEyMzk1MEJFMDBDQjkyMTQgLyogTm9kZVBy
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTMw
OUM5RTEyMzk1MEJFMDBDQjkyMTQgLyogTm9kZVByb3h5LmggKi87IH07CiAJCThBNDEzQUUwMTIw
N0JCQTUwMDgyMDE2RSAvKiBTY3JpcHRSdW5uZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBNDEzQURFMTIwN0JCQTUwMDgyMDE2RSAvKiBTY3JpcHRS
dW5uZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4QTQxM0FFMTEyMDdCQkE1MDA4MjAxNkUgLyogU2NyaXB0UnVubmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBNDEzQURGMTIwN0JCQTUwMDgy
MDE2RSAvKiBTY3JpcHRSdW5uZXIuY3BwICovOyB9OwogCQk4QTdDQzk2QjEyMDc2RDczMDAxRDQ1
ODggLyogUGVuZGluZ1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOEE3Q0M5NkExMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdTY3JpcHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAxOTEs
NiArMTAxOTIsNyBAQAogCQk4QTE5NTkzMDE0N0VBMTZFMDBEMUVBNjEgLyogRE9NV2ViS2l0TmFt
ZWRGbG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NV2Vi
S2l0TmFtZWRGbG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTE5NTkzMTE0
N0VBMTZFMDBEMUVBNjEgLyogRE9NV2ViS2l0TmFtZWRGbG93SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0TmFtZWRGbG93SW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEEzMDlDOUUxMjM5NTBCRTAwQ0I5MjA0IC8qIE5l
c3RpbmdMZXZlbEluY3JlbWVudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5lc3RpbmdMZXZlbEluY3JlbWVudGVyLmg7IHBhdGggPSBwYXJzZXIvTmVzdGluZ0xldmVsSW5j
cmVtZW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEEzMDlDOUUxMjM5NTBC
RTAwQ0I5MjE0IC8qIE5vZGVQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBOb2RlUHJveHkuaDsgcGF0aCA9IHBhcnNlci9Ob2RlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOEE0MTNBREUxMjA3QkJBNTAwODIwMTZFIC8qIFNjcmlwdFJ1bm5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRSdW5uZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEE0MTNBREYxMjA3QkJBNTAwODIwMTZFIC8qIFNjcmlw
dFJ1bm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRS
dW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTdDQzk2QTEyMDc2RDcz
MDAxRDQ1ODggLyogUGVuZGluZ1NjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQZW5kaW5nU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODA0
NCw2ICsxODA0Niw3IEBACiAJCQkJOTc3QjM4NjAxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxWaWV3
U291cmNlUGFyc2VyLmNwcCAqLywKIAkJCQk5NzdCMzg2MTEyMjg4M0U5MDBCODFGRjggLyogSFRN
TFZpZXdTb3VyY2VQYXJzZXIuaCAqLywKIAkJCQk4QTMwOUM5RTEyMzk1MEJFMDBDQjkyMDQgLyog
TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCAqLywKKwkJCQk4QTMwOUM5RTEyMzk1MEJFMDBDQjky
MTQgLyogTm9kZVByb3h5LmggKi8sCiAJCQkJOTdCQzg0ODExMjM2RkQ5MzAwMEM2MTYxIC8qIFRl
eHREb2N1bWVudFBhcnNlci5jcHAgKi8sCiAJCQkJOTdCQzg0ODIxMjM2RkQ5MzAwMEM2MTYxIC8q
IFRleHREb2N1bWVudFBhcnNlci5oICovLAogCQkJCTk3QkM4NEEyMTIzNzBEQzcwMDBDNjE2MSAv
KiBUZXh0Vmlld1NvdXJjZVBhcnNlci5jcHAgKi8sCkBAIC0yNDMzMiw2ICsyNDMzNSw3IEBACiAJ
CQkJRTEyNzE5QzcwRUVFQzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3MTE0NjA0MTRFRjAwOUEwMDY3NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEEzMDlDOUYxMjM5NTBCRTAwQ0I5MjA0IC8qIE5lc3Rp
bmdMZXZlbEluY3JlbWVudGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4QTMwOUM5RjEyMzk1MEJF
MDBDQjkyMTQgLyogTm9kZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzc0MzBBREJB
NURFMDBBNDU1NEQgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTYyOEQyMTRDMTIxMzFFRDEwMDU1RENGQyAvKiBOZXR3b3JraW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTlDMjdGMDcxMzhEMjhDRjAwNzlCN0UyIC8qIE5ldHdvcmtSZXNv
dXJjZXNEYXRhLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCA1ODg4Nzg2NmEwYmRhYzhhNmY1
Njk5YzE5MzBiNTUzZmMzZDYwYTdmLi41NDZmZjA0NjcyMDhhZDlkMTViNzVkMTJmZjk5NGUzNGNl
MjZhODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Fs
bFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAKIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlKiBkb21NdXRhdGlvblF1ZXVlLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURl
cHRoKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fYXR0YWNobWVudFJvb3Qo
ZG9jdW1lbnQpCisgICAgLCBtX2F0dGFjaG1lbnRSb290KENvbnRhaW5lck5vZGVQcm94eTo6Y3Jl
YXRlKGRvY3VtZW50KSkKICAgICAsIG1fZG9tTXV0YXRpb25RdWV1ZShkb21NdXRhdGlvblF1ZXVl
KQogICAgICwgbV9vcGVuRWxlbWVudHMoZG9tTXV0YXRpb25RdWV1ZSkKICAgICAsIG1fZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKEFsbG93U2NyaXB0aW5nQ29udGVudCkKQEAgLTkwLDcgKzkw
LDcgQEAgSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50
KiBkb2N1bWVudCwgSFRNTFBhcnNlckRPTU11dGEKIAogSFRNTENvbnN0cnVjdGlvblNpdGU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgSFRNTFBhcnNlckRPTU11dGF0
aW9uUXVldWUqIGRvbU11dGF0aW9uUXVldWUsIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgp
CiAgICAgOiBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVudCgpKQotICAgICwgbV9hdHRhY2ht
ZW50Um9vdChmcmFnbWVudCkKKyAgICAsIG1fYXR0YWNobWVudFJvb3QoQ29udGFpbmVyTm9kZVBy
b3h5OjpjcmVhdGUoZnJhZ21lbnQpKQogICAgICwgbV9kb21NdXRhdGlvblF1ZXVlKGRvbU11dGF0
aW9uUXVldWUpCiAgICAgLCBtX29wZW5FbGVtZW50cyhkb21NdXRhdGlvblF1ZXVlKQogICAgICwg
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKQEAgLTEx
MCwxNCArMTEwLDE0IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmRldGFjaCgpCiAgICAg
bV9hdHRhY2htZW50Um9vdCA9IDA7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNl
dEZvcm0oSFRNTEZvcm1FbGVtZW50KiBmb3JtKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
c2V0Rm9ybShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudFByb3h5PiBmb3JtKQogewogICAgIC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIG5lZWRlZCBmb3IgSFRNTFRyZWVCdWlsZGVyIGlu
IHRoZSBmcmFnbWVudCBjYXNlLgogICAgIEFTU0VSVCghbV9mb3JtKTsKICAgICBtX2Zvcm0gPSBm
b3JtOwogfQogCi1QYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNp
dGU6OnRha2VGb3JtKCkKK1Bhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50UHJveHk+IEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjp0YWtlRm9ybSgpCiB7CiAgICAgcmV0dXJuIG1fZm9ybS5yZWxlYXNlKCk7
CiB9CkBAIC0xMzEsOCArMTMxLDggQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZGlzcGF0
Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpCiAKIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tl
biogdG9rZW4pCiB7Ci0gICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IGNyZWF0
ZUhUTUxIdG1sRWxlbWVudCh0b2tlbik7Ci0gICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9v
dCwgZWxlbWVudCk7CisgICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudFByb3h5PiBlbGVtZW50ID0g
Y3JlYXRlSFRNTEh0bWxFbGVtZW50KHRva2VuKTsKKyAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1l
bnRSb290LmdldCgpLCBlbGVtZW50KTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxF
bGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LCB0b2tlbikpOwogCiAgICAgbV9k
b21NdXRhdGlvblF1ZXVlLT5mbHVzaCgpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsK
ICAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAK
LSAgICBhdHRhY2hEb2N0eXBlTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgdG9rZW4tPm5hbWUoKSwg
U3RyaW5nOjphZG9wdCh0b2tlbi0+cHVibGljSWRlbnRpZmllcigpKSwgU3RyaW5nOjphZG9wdCh0
b2tlbi0+c3lzdGVtSWRlbnRpZmllcigpKSk7CisgICAgYXR0YWNoRG9jdHlwZUxhdGVyKG1fYXR0
YWNobWVudFJvb3QuZ2V0KCksIHRva2VuLT5uYW1lKCksIFN0cmluZzo6YWRvcHQodG9rZW4tPnB1
YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4tPnN5c3RlbUlkZW50aWZpZXIo
KSkpOwogCiAgICAgLy8gRE9DVFlQRSBub2RlcyBhcmUgb25seSBwcm9jZXNzZWQgd2hlbiBwYXJz
aW5nIGZyYWdtZW50cyB3L28gY29udGV4dEVsZW1lbnRzLCB3aGljaAogICAgIC8vIG5ldmVyIG9j
Y3Vycy4gIEhvd2V2ZXIsIGlmIHdlIGV2ZXIgY2hvc2UgdG8gc3VwcG9ydCBzdWNoLCB0aGlzIGNv
ZGUgaXMgc3VidGx5IHdyb25nLApAQCAtMTg4LDEzICsxODgsMTMgQEAgdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogdm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBl
czo6Q29tbWVudCk7Ci0gICAgYXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihtX2F0dGFjaG1l
bnRSb290LCB0b2tlbi0+Y29tbWVudCgpKTsKKyAgICBhdHRhY2hDb21tZW50T25Eb2N1bWVudExh
dGVyKG1fYXR0YWNobWVudFJvb3QuZ2V0KCksIHRva2VuLT5jb21tZW50KCkpOwogfQogCiB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6Q29tbWVudCk7Ci0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV9vcGVu
RWxlbWVudHMucm9vdE5vZGUoKTsKKyAgICBDb250YWluZXJOb2RlUHJveHkqIHBhcmVudCA9IG1f
b3BlbkVsZW1lbnRzLnJvb3ROb2RlKCk7CiAgICAgYXR0YWNoQ29tbWVudExhdGVyKHBhcmVudCwg
dG9rZW4tPmNvbW1lbnQoKSk7CiB9CiAKQEAgLTIwOSwxNiArMjA5LDE1IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgQVNTRVJUKCFzaG91bGRGb3N0ZXJQYXJlbnQo
KSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7
CisgICAgUmVmUHRyPEVsZW1lbnRQcm94eT4gYm9keSA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2Vu
KTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBib2R5KTsKICAgICBtX29wZW5FbGVt
ZW50cy5wdXNoSFRNTEJvZHlFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0ZShib2R5LnJlbGVh
c2UoKSwgdG9rZW4pKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRN
TEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGJvb2wgaXNEZW1vdGVkKQogewot
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwot
ICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKTsKLSAgICBtX2Zvcm0gPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVudC5yZWxlYXNlKCkpOwor
ICAgIFJlZlB0cjxFbGVtZW50UHJveHk+IGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgbV9mb3JtID0gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRm9ybUVsZW1lbnRQcm94
eT4oZWxlbWVudC5yZWxlYXNlKCkpOwogICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+c2V0RGVtb3Rl
ZChtX2Zvcm0uZ2V0KCksIGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUo
KSwgbV9mb3JtKTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0
ZShtX2Zvcm0sIHRva2VuKSk7CkBAIC0yMjYsNyArMjI1LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGJv
b2wgaXMKIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNy
ZWF0ZUhUTUxFbGVtZW50KHRva2VuKTsKKyAgICBSZWZQdHI8RWxlbWVudFByb3h5PiBlbGVtZW50
ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2Rl
KCksIGVsZW1lbnQpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3Jl
YXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQpAQCAtMjUzLDcgKzI1Miw3IEBAIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiogdG9rZW4pCiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlw
dEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCA9IGNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50KHRva2VuKTsKKyAgICBSZWZQdHI8RWxl
bWVudFByb3h5PiBlbGVtZW50ID0gY3JlYXRlSFRNTFNjcmlwdEVsZW1lbnQodG9rZW4pOwogICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwogICAgIG1fb3BlbkVsZW1lbnRz
LnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwog
fQpAQCAtMjYzLDcgKzI2Miw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZv
cmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0CiAgICAgQVNTRVJU
KHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOyAvLyBwYXJzZUVycm9yIHdoZW4geG1sbnMgb3IgeG1sbnM6eGxpbmsgYXJlIHdy
b25nLgogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRva2Vu
LCBuYW1lc3BhY2VVUkkpOworICAgIFJlZlB0cjxFbGVtZW50UHJveHk+IGVsZW1lbnQgPSBjcmVh
dGVFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnRO
b2RlKCksIGVsZW1lbnQsIHRva2VuLT5zZWxmQ2xvc2luZygpKTsKICAgICBpZiAoIXRva2VuLT5z
ZWxmQ2xvc2luZygpKQogICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06
OmNyZWF0ZShlbGVtZW50LnJlbGVhc2UoKSwgdG9rZW4sIG5hbWVzcGFjZVVSSSkpOwpAQCAtMjc5
LDI5ICsyNzgsMjkgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUo
Y29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW8KICAgICBhdHRhY2hUZXh0TGF0
ZXIoY3VycmVudE5vZGUoKSwgY2hhcmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKIH0K
IAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVu
dChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSkKK1Bhc3NSZWZQdHI8RWxlbWVudFByb3h5PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRl
RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSkKIHsKICAgICByZXR1cm4gbV9kb21NdXRhdGlvblF1ZXVlLT5jcmVhdGVFbGVtZW50
KGN1cnJlbnROb2RlKCksIHRva2VuLCBuYW1lc3BhY2VVUkksIG1fZnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK1Bhc3NSZWZQdHI8
RWxlbWVudFByb3h5PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICByZXR1cm4gbV9kb21NdXRhdGlvblF1ZXVlLT5j
cmVhdGVIVE1MRWxlbWVudChjdXJyZW50Tm9kZSgpLCBmb3JtKCksIHRva2VuLCBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0
cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCitQYXNzUmVmUHRyPEVsZW1lbnRQcm94eT4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0
ZUhUTUxTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgcmV0dXJu
IG1fZG9tTXV0YXRpb25RdWV1ZS0+Y3JlYXRlSFRNTFNjcmlwdEVsZW1lbnQoY3VycmVudE5vZGUo
KSwgdG9rZW4sIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBtX2lzUGFyc2luZ0ZyYWdt
ZW50KTsKIH0KIAotUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpjcmVhdGVIVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK1Bhc3NS
ZWZQdHI8SFRNTEh0bWxFbGVtZW50UHJveHk+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVI
VE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICByZXR1cm4gbV9k
b21NdXRhdGlvblF1ZXVlLT5jcmVhdGVIVE1MSHRtbEVsZW1lbnQobV9kb2N1bWVudCwgdG9rZW4s
IG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tJdGVtPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2Vu
KEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiB7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQ7Cisg
ICAgUmVmUHRyPEVsZW1lbnRQcm94eT4gZWxlbWVudDsKICAgICBpZiAoaXRlbS0+bmFtZXNwYWNl
VVJJKCkgPT0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKICAgICAgICAgZWxlbWVudCA9
IGNyZWF0ZUhUTUxFbGVtZW50KGl0ZW0tPnRva2VuKCkpOwogICAgIGVsc2UKQEAgLTM2MiwxMiAr
MzYxLDEyIEBAIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3VsZEZvc3RlclBhcmVudCgp
IGNvbnN0CiAgICAgICAgICYmIGN1cnJlbnRTdGFja0l0ZW0oKS0+Y2F1c2VzRm9zdGVyUGFyZW50
aW5nKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudChQYXNz
UmVmUHRyPE5vZGU+IG5vZGUpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQYXJl
bnQoUGFzc1JlZlB0cjxOb2RlUHJveHk+IG5vZGUpCiB7CiAgICAgYXR0YWNoRm9zdGVyUGFyZW50
ZWRMYXRlcihub2RlKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZmluZExhc3RU
YWJsZUVsZW1lbnQoRWxlbWVudComIHRhYmxlLCBDb250YWluZXJOb2RlKiYgc3RhY2tQYXJlbnQp
Cit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kTGFzdFRhYmxlRWxlbWVudChFbGVtZW50
UHJveHkqJiB0YWJsZSwgQ29udGFpbmVyTm9kZVByb3h5KiYgc3RhY2tQYXJlbnQpCiB7CiAgICAg
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdFRhYmxlRWxlbWVudFJlY29yZCA9
IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxOYW1lKCkpOwogICAgIGlmIChs
YXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CkBAIC0zNzksNyArMzc4LDcgQEAgdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6ZmluZExhc3RUYWJsZUVsZW1lbnQoRWxlbWVudComIHRhYmxlLCBDb250
YWluZXJOb2RlKiYKICAgICB9CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFj
aExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9v
bCBzZWxmQ2xvc2luZykKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKENv
bnRhaW5lck5vZGVQcm94eSogcGFyZW50LCBQYXNzUmVmUHRyPE5vZGVQcm94eT4gY2hpbGQsIGJv
b2wgc2VsZkNsb3NpbmcpCiB7CiAgICAgaWYgKHNob3VsZEZvc3RlclBhcmVudCgpKSB7CiAgICAg
ICAgIGF0dGFjaEZvc3RlclBhcmVudGVkTGF0ZXIoY2hpbGQsIHNlbGZDbG9zaW5nKTsKQEAgLTM4
OCwxNSArMzg3LDE1IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKENv
bnRhaW5lck5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBjCiAgICAgbV9kb21NdXRhdGlv
blF1ZXVlLT5pbnNlcnQocGFyZW50LCBjaGlsZCwgc2VsZkNsb3NpbmcsIG1heGltdW1ET01UcmVl
RGVwdGhFeGNlZWRlZCgpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNo
Rm9zdGVyUGFyZW50ZWRMYXRlcihQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIHNlbGZDbG9z
aW5nKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRm9zdGVyUGFyZW50ZWRMYXRl
cihQYXNzUmVmUHRyPE5vZGVQcm94eT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcpCiB7Ci0gICAg
RWxlbWVudCogdGFibGU7Ci0gICAgQ29udGFpbmVyTm9kZSogdGFibGVOZXh0OworICAgIEVsZW1l
bnRQcm94eSogdGFibGU7CisgICAgQ29udGFpbmVyTm9kZVByb3h5KiB0YWJsZU5leHQ7CiAgICAg
ZmluZExhc3RUYWJsZUVsZW1lbnQodGFibGUsIHRhYmxlTmV4dCk7CiAgICAgbV9kb21NdXRhdGlv
blF1ZXVlLT5pbnNlcnRGb3N0ZXJQYXJlbnRlZCh0YWJsZSwgdGFibGVOZXh0LCBtX29wZW5FbGVt
ZW50cy5yb290Tm9kZSgpLCBtX2lzUGFyc2luZ0ZyYWdtZW50LCBjaGlsZCwgc2VsZkNsb3Npbmcp
OwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hUZXh0TGF0ZXIoQ29udGFp
bmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNl
QXRvbWljU3RyaW5nKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoVGV4dExhdGVy
KENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJv
b2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nKQogewogICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQo
KSkgewogICAgICAgICBhdHRhY2hGb3N0ZXJQYXJlbnRlZFRleHRMYXRlcihjaGFyYWN0ZXJzLCBz
aG91bGRVc2VBdG9taWNTdHJpbmcpOwpAQCAtNDA3LDIzICs0MDYsMjMgQEAgdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6YXR0YWNoVGV4dExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29u
c3QgU3RyaW5nJgogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hGb3N0ZXJQYXJl
bnRlZFRleHRMYXRlcihjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRv
bWljU3RyaW5nKQogewotICAgIEVsZW1lbnQqIHRhYmxlOwotICAgIENvbnRhaW5lck5vZGUqIHRh
YmxlTmV4dDsKKyAgICBFbGVtZW50UHJveHkqIHRhYmxlOworICAgIENvbnRhaW5lck5vZGVQcm94
eSogdGFibGVOZXh0OwogICAgIGZpbmRMYXN0VGFibGVFbGVtZW50KHRhYmxlLCB0YWJsZU5leHQp
OwogICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+aW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0KHRhYmxl
LCB0YWJsZU5leHQsIG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCksIG1faXNQYXJzaW5nRnJhZ21l
bnQsIGNoYXJhY3RlcnMsIHNob3VsZFVzZUF0b21pY1N0cmluZyk7CiB9CiAKLXZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmF0dGFjaENvbW1lbnRMYXRlcihDb250YWluZXJOb2RlKiBwYXJlbnQs
IGNvbnN0IFN0cmluZyYgY29tbWVudCkKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFj
aENvbW1lbnRMYXRlcihDb250YWluZXJOb2RlUHJveHkqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBj
b21tZW50KQogewogICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+aW5zZXJ0Q29tbWVudChwYXJlbnQs
IGNvbW1lbnQsIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCgpKTsKIH0KIAotdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihDb250YWluZXJO
b2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQordm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6YXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihDb250YWluZXJOb2Rl
UHJveHkqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCiB7CiAgICAgbV9k
b21NdXRhdGlvblF1ZXVlLT5pbnNlcnRDb21tZW50T25Eb2N1bWVudChtX2RvY3VtZW50LCBhdHRh
Y2htZW50Um9vdCwgY29tbWVudCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0
dGFjaERvY3R5cGVMYXRlcihDb250YWluZXJOb2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlk
KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRG9jdHlwZUxhdGVyKENvbnRhaW5l
ck5vZGVQcm94eSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKIHsKICAgICBtX2RvbU11dGF0
aW9uUXVldWUtPmluc2VydERvY3R5cGUobV9kb2N1bWVudCwgYXR0YWNobWVudFJvb3QsIG5hbWUs
IHB1YmxpY0lkLCBzeXN0ZW1JZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAppbmRleCBmZTVmMDY0ZThkNmY0MjJiZDE1ZmQ4ZjRi
ZmI0MjMzZmYzMTAxNTFlLi5kOWM2Mzg0ODAzMDU1MWI1ODE0MDY0MTAwM2VkZmM2NGQ1MzU4OWVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25T
aXRlLmgKQEAgLTQ3LDkgKzQ3LDEwIEBAIGVudW0gV2hpdGVzcGFjZU1vZGUgewogY2xhc3MgQXRv
bWljSFRNTFRva2VuOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRp
b25RdWV1ZTsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBI
VE1MSHRtbEVsZW1lbnQ7CitjbGFzcyBFbGVtZW50UHJveHk7CitjbGFzcyBIVE1MRm9ybUVsZW1l
bnRQcm94eTsKK2NsYXNzIEhUTUxIdG1sRWxlbWVudFByb3h5OworY2xhc3MgTm9kZVByb3h5Owog
CiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SFRNTENvbnN0cnVjdGlvblNpdGUpOwpAQCAtODEsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oSFRNTFN0
YWNrSXRlbSopOwogCiAgICAgYm9vbCBzaG91bGRGb3N0ZXJQYXJlbnQoKSBjb25zdDsKLSAgICB2
b2lkIGZvc3RlclBhcmVudChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGZvc3RlclBhcmVu
dChQYXNzUmVmUHRyPE5vZGVQcm94eT4pOwogCiAgICAgYm9vbCBpbmRleE9mRmlyc3RVbm9wZW5G
b3JtYXR0aW5nRWxlbWVudCh1bnNpZ25lZCYgZmlyc3RVbm9wZW5FbGVtZW50SW5kZXgpIGNvbnN0
OwogICAgIHZvaWQgcmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKQEAg
LTkyLDIwICs5MywyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhj
ZWVkZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5FbGVtZW50cy5zdGFja0RlcHRoKCkgPiBtX21h
eGltdW1ET01UcmVlRGVwdGg7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
bV9vcGVuRWxlbWVudHMuc3RhY2tEZXB0aCgpOyB9CiAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxl
bWVudFJlY29yZCogY3VycmVudEVsZW1lbnRSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX29wZW5F
bGVtZW50cy50b3BSZWNvcmQoKTsgfQotICAgIEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wKCk7IH0KLSAgICBDb250YWluZXJOb2RlKiBj
dXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRzLnRvcE5vZGUoKTsgfQor
ICAgIEVsZW1lbnRQcm94eSogY3VycmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX29wZW5F
bGVtZW50cy50b3AoKTsgfQorICAgIENvbnRhaW5lck5vZGVQcm94eSogY3VycmVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX29wZW5FbGVtZW50cy50b3BOb2RlKCk7IH0KICAgICBIVE1MU3RhY2tJ
dGVtKiBjdXJyZW50U3RhY2tJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9w
U3RhY2tJdGVtKCk7IH0KICAgICBIVE1MU3RhY2tJdGVtKiBvbmVCZWxvd1RvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlbkVsZW1lbnRzLm9uZUJlbG93VG9wKCk7IH0KIAogICAgIEhUTUxFbGVtZW50
U3RhY2sqIG9wZW5FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuICZtX29wZW5FbGVtZW50czsgfQog
ICAgIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QqIGFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuICZtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50czsgfQogCi0gICAgRWxl
bWVudCogaGVhZCgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZC0+ZWxlbWVudCgpOyB9CisgICAgRWxl
bWVudFByb3h5KiBoZWFkKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkLT5lbGVtZW50KCk7IH0KICAg
ICBIVE1MU3RhY2tJdGVtKiBoZWFkU3RhY2tJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkLmdl
dCgpOyB9CiAKLSAgICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50Kik7Ci0gICAgSFRNTEZv
cm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtLmdldCgpOyB9Ci0gICAgUGFz
c1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHRha2VGb3JtKCk7CisgICAgdm9pZCBzZXRGb3JtKFBh
c3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50UHJveHk+KTsKKyAgICBIVE1MRm9ybUVsZW1lbnRQcm94
eSogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybS5nZXQoKTsgfQorICAgIFBhc3NSZWZQdHI8
SFRNTEZvcm1FbGVtZW50UHJveHk+IHRha2VGb3JtKCk7CiAKICAgICBjbGFzcyBSZWRpcmVjdFRv
Rm9zdGVyUGFyZW50R3VhcmQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWRpcmVj
dFRvRm9zdGVyUGFyZW50R3VhcmQpOwpAQCAtMTI4LDIwICsxMjksMjAgQEAgcHVibGljOgogICAg
IH07CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBmaW5kTGFzdFRhYmxlRWxlbWVudChFbGVtZW50KiYg
dGFibGUsIENvbnRhaW5lck5vZGUqJiB0YWJsZU5leHQpOworICAgIHZvaWQgZmluZExhc3RUYWJs
ZUVsZW1lbnQoRWxlbWVudFByb3h5KiYgdGFibGUsIENvbnRhaW5lck5vZGVQcm94eSomIHRhYmxl
TmV4dCk7CiAKLSAgICB2b2lkIGF0dGFjaExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFz
c1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZyA9IGZhbHNlKTsKLSAgICB2b2lk
IGF0dGFjaEZvc3RlclBhcmVudGVkTGF0ZXIoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBz
ZWxmQ2xvc2luZyA9IGZhbHNlKTsKLSAgICB2b2lkIGF0dGFjaFRleHRMYXRlcihDb250YWluZXJO
b2RlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9t
aWNTdHJpbmcpOworICAgIHZvaWQgYXR0YWNoTGF0ZXIoQ29udGFpbmVyTm9kZVByb3h5KiBwYXJl
bnQsIFBhc3NSZWZQdHI8Tm9kZVByb3h5PiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZyA9IGZhbHNl
KTsKKyAgICB2b2lkIGF0dGFjaEZvc3RlclBhcmVudGVkTGF0ZXIoUGFzc1JlZlB0cjxOb2RlUHJv
eHk+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nID0gZmFsc2UpOworICAgIHZvaWQgYXR0YWNoVGV4
dExhdGVyKENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3Rl
cnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKICAgICB2b2lkIGF0dGFjaEZvc3RlclBh
cmVudGVkVGV4dExhdGVyKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VB
dG9taWNTdHJpbmcpOwotICAgIHZvaWQgYXR0YWNoQ29tbWVudExhdGVyKENvbnRhaW5lck5vZGUq
IHBhcmVudCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKLSAgICB2b2lkIGF0dGFjaENvbW1lbnRP
bkRvY3VtZW50TGF0ZXIoQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNvbW1l
bnQpOwotICAgIHZvaWQgYXR0YWNoRG9jdHlwZUxhdGVyKENvbnRhaW5lck5vZGUqIGF0dGFjaG1l
bnRSb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0
IFN0cmluZyYgc3lzdGVtSWQpOworICAgIHZvaWQgYXR0YWNoQ29tbWVudExhdGVyKENvbnRhaW5l
ck5vZGVQcm94eSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOworICAgIHZvaWQgYXR0
YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihDb250YWluZXJOb2RlUHJveHkqIHBhcmVudCwgY29u
c3QgU3RyaW5nJiBjb21tZW50KTsKKyAgICB2b2lkIGF0dGFjaERvY3R5cGVMYXRlcihDb250YWlu
ZXJOb2RlUHJveHkqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpOwogCi0gICAgUGFzc1JlZlB0
cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKTsKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhUTUxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRl
SFRNTFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgUGFzc1JlZlB0cjxIVE1M
SHRtbEVsZW1lbnQ+IGNyZWF0ZUhUTUxIdG1sRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAg
ICBQYXNzUmVmUHRyPEVsZW1lbnRQcm94eT4gY3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4q
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgUGFzc1JlZlB0cjxFbGVt
ZW50UHJveHk+IGNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOworICAgIFBhc3NS
ZWZQdHI8RWxlbWVudFByb3h5PiBjcmVhdGVIVE1MU2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9r
ZW4qKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudFByb3h5PiBjcmVhdGVIVE1MSHRt
bEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7CiAKICAgICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRF
bGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsKIApAQCAtMTUwLDEyICsxNTEsMTIgQEAgcHJpdmF0
ZToKICAgICAvLyBUaGlzIGlzIHRoZSByb290IENvbnRhaW5lck5vZGUgdG8gd2hpY2ggdGhlIHBh
cnNlciBhdHRhY2hlcyBhbGwgbmV3bHkKICAgICAvLyBjb25zdHJ1Y3RlZCBub2Rlcy4gSXQgcG9p
bnRzIHRvIGEgRG9jdW1lbnRGcmFnbWVudCB3aGVuIHBhcnNpbmcgZnJhZ21lbnRzCiAgICAgLy8g
YW5kIGEgRG9jdW1lbnQgaW4gYWxsIG90aGVyIGNhc2VzLgotICAgIENvbnRhaW5lck5vZGUqIG1f
YXR0YWNobWVudFJvb3Q7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gbV9hdHRhY2ht
ZW50Um9vdDsKICAgICAKICAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZSogbV9kb21NdXRh
dGlvblF1ZXVlOwogCiAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG1faGVhZDsKLSAgICBSZWZQ
dHI8SFRNTEZvcm1FbGVtZW50PiBtX2Zvcm07CisgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudFBy
b3h5PiBtX2Zvcm07CiAgICAgbXV0YWJsZSBIVE1MRWxlbWVudFN0YWNrIG1fb3BlbkVsZW1lbnRz
OwogICAgIG11dGFibGUgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCBtX2FjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVsZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmNwcAppbmRleCBjZTFkODI0MWE2MDZmMjFmNjA0ZDFhODQyOTgzMTM5MjY4YTBkOGRk
Li5lNTFhN2QzNWNjZDU0ZDcxZmRkZDRkODgxYjkzNmQ3NGYyZmQ2YjJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtMjM5LDEzICsy
MzksMTMgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbE51bWJlcmVkSGVhZGVyRWxl
bWVudFBvcHBlZCgpCiAgICAgcG9wKCk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9w
VW50aWwoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWwo
RWxlbWVudFByb3h5KiBlbGVtZW50KQogewogICAgIHdoaWxlICh0b3AoKSAhPSBlbGVtZW50KQog
ICAgICAgICBwb3AoKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbFBvcHBl
ZChFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbFBvcHBl
ZChFbGVtZW50UHJveHkqIGVsZW1lbnQpCiB7CiAgICAgcG9wVW50aWwoZWxlbWVudCk7CiAgICAg
cG9wKCk7CkBAIC0zOTYsNyArMzk2LDcgQEAgSFRNTFN0YWNrSXRlbSogSFRNTEVsZW1lbnRTdGFj
azo6b25lQmVsb3dUb3AoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxFbGVt
ZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQordm9pZCBI
VE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudFByb3h5KiBlbGVt
ZW50KQogewogICAgIEFTU0VSVChtX2hlYWRFbGVtZW50ID09IGVsZW1lbnQpOwogICAgIGlmICht
X3RvcC0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKQEAgLTQwNyw5ICs0MDcsOCBAQCB2b2lkIEhU
TUxFbGVtZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQog
ICAgIHJlbW92ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0
YWNrOjpyZW1vdmUoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVt
b3ZlKEVsZW1lbnRQcm94eSogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CiAgICAgaWYgKG1fdG9wLT5lbGVtZW50KCkgPT0g
ZWxlbWVudCkgewogICAgICAgICBwb3AoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE3LDcgKzQx
Niw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgcmVtb3ZlTm9uVG9wQ29tbW9uKGVsZW1lbnQpOwogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBIVE1MRWxlbWVudFN0YWNrOjpmaW5kKEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBIVE1MRWxlbWVudFN0YWNrOjpm
aW5kKEVsZW1lbnRQcm94eSogZWxlbWVudCkgY29uc3QKIHsKICAgICBmb3IgKEVsZW1lbnRSZWNv
cmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgpKSB7CiAgICAgICAg
IGlmIChwb3MtPm5vZGUoKSA9PSBlbGVtZW50KQpAQCAtNDM1LDcgKzQzNCw3IEBAIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29uc3Qg
QXRvbWljU3RyaW5nJiB0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRTdGFj
azo6Y29udGFpbnMoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTEVsZW1lbnRTdGFj
azo6Y29udGFpbnMoRWxlbWVudFByb3h5KiBlbGVtZW50KSBjb25zdAogewogICAgIHJldHVybiAh
IWZpbmQoZWxlbWVudCk7CiB9CkBAIC00NzIsNyArNDcxLDcgQEAgYm9vbCBIVE1MRWxlbWVudFN0
YWNrOjpoYXNOdW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKCkgY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5TY29wZShFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KSBjb25zdAorYm9vbCBIVE1MRWxlbWVudFN0YWNrOjppblNjb3BlKEVsZW1lbnRQ
cm94eSogdGFyZ2V0RWxlbWVudCkgY29uc3QKIHsKICAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHBv
cyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCgpKSB7CiAgICAgICAgIEhUTUxT
dGFja0l0ZW0qIGl0ZW0gPSBwb3MtPnN0YWNrSXRlbSgpLmdldCgpOwpAQCAtNTQwLDI1ICs1Mzks
MjUgQEAgYm9vbCBIVE1MRWxlbWVudFN0YWNrOjppblNlbGVjdFNjb3BlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUpIGNvbnN0CiAgICAgcmV0dXJuIGluU2VsZWN0U2NvcGUodGFnTmFtZS5s
b2NhbE5hbWUoKSk7CiB9CiAKLUVsZW1lbnQqIEhUTUxFbGVtZW50U3RhY2s6Omh0bWxFbGVtZW50
KCkgY29uc3QKK0VsZW1lbnRQcm94eSogSFRNTEVsZW1lbnRTdGFjazo6aHRtbEVsZW1lbnQoKSBj
b25zdAogewogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICByZXR1cm4gdG9FbGVtZW50KG1f
cm9vdE5vZGUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50UHJveHkqPihtX3Jvb3RO
b2RlKTsKIH0KIAotRWxlbWVudCogSFRNTEVsZW1lbnRTdGFjazo6aGVhZEVsZW1lbnQoKSBjb25z
dAorRWxlbWVudFByb3h5KiBIVE1MRWxlbWVudFN0YWNrOjpoZWFkRWxlbWVudCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQpOwogICAgIHJldHVybiBtX2hlYWRFbGVtZW50Owog
fQogCi1FbGVtZW50KiBIVE1MRWxlbWVudFN0YWNrOjpib2R5RWxlbWVudCgpIGNvbnN0CitFbGVt
ZW50UHJveHkqIEhUTUxFbGVtZW50U3RhY2s6OmJvZHlFbGVtZW50KCkgY29uc3QKIHsKICAgICBB
U1NFUlQobV9ib2R5RWxlbWVudCk7CiAgICAgcmV0dXJuIG1fYm9keUVsZW1lbnQ7CiB9CiAgICAg
Ci1Db250YWluZXJOb2RlKiBIVE1MRWxlbWVudFN0YWNrOjpyb290Tm9kZSgpIGNvbnN0CitDb250
YWluZXJOb2RlUHJveHkqIEhUTUxFbGVtZW50U3RhY2s6OnJvb3ROb2RlKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9yb290Tm9kZSk7CiAgICAgcmV0dXJuIG1fcm9vdE5vZGU7CkBAIC01ODMsMTAg
KzU4Miw4IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKICAgICBtX3N0YWNr
RGVwdGgtLTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25Ub3BDb21tb24o
RWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29t
bW9uKEVsZW1lbnRQcm94eSogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwogICAgIEFTU0VSVCh0b3AoKSAhPSBlbGVtZW50KTsK
ICAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHBvcyA9IG1fdG9wLmdldCgpOyBwb3M7IHBvcyA9IHBv
cy0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChwb3MtPm5leHQoKS0+ZWxlbWVudCgpID09IGVsZW1l
bnQpIHsKQEAgLTYwNiw3ICs2MDMsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZU5v
blRvcENvbW1vbihFbGVtZW50KiBlbGVtZW50KQogdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpzaG93
KCkKIHsKICAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdG9wLmdldCgpOyByZWNv
cmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKQotICAgICAgICByZWNvcmQtPmVsZW1lbnQoKS0+
c2hvd05vZGUoKTsKKyAgICAgICAgcmVjb3JkLT5lbGVtZW50KCktPm5vZGUoKS0+c2hvd05vZGUo
KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRWxlbWVudFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmgKaW5kZXggMTBiMjQyNWViYjhjOTY5YzFmNDViNzBjZjUzZTBkYTZmNjcwZDRiYi4u
OWMyZDhlMzIzNGYwODlmODZhZDg4MjQ0NjRlNGE3OWNhZTY0NmNlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaApAQCAtMzgsMTAgKzM4LDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIENv
bnRhaW5lck5vZGVQcm94eTsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBFbGVtZW50
OworY2xhc3MgRWxlbWVudFByb3h5OwogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU7
CitjbGFzcyBOb2RlUHJveHk7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogCiAvLyBOT1RFOiBUaGUg
SFRNTDUgc3BlYyB1c2VzIGEgYmFja3dhcmRzIChncm93cyBkb3dud2FyZCkgc3RhY2suICBXZSdy
ZSB1c2luZwpAQCAtNTcsOCArNTgsOCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICB+
RWxlbWVudFJlY29yZCgpOyAvLyBQdWJsaWMgZm9yIH5QYXNzT3duUHRyKCkKICAgICAKLSAgICAg
ICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS0+ZWxlbWVudCgpOyB9
Ci0gICAgICAgIENvbnRhaW5lck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPm5v
ZGUoKTsgfQorICAgICAgICBFbGVtZW50UHJveHkqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2l0ZW0tPmVsZW1lbnQoKTsgfQorICAgICAgICBDb250YWluZXJOb2RlUHJveHkqIG5vZGUoKSBj
b25zdCB7IHJldHVybiBtX2l0ZW0tPm5vZGUoKTsgfQogICAgICAgICBQYXNzUmVmUHRyPEhUTUxT
dGFja0l0ZW0+IHN0YWNrSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbTsgfQogICAgICAgICB2
b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOwogCkBAIC04MSwx
MyArODIsMTMgQEAgcHVibGljOgogCiAgICAgLy8gSW5saW5pbmcgdGhpcyBmdW5jdGlvbiBpcyBh
IChzbWFsbCkgcGVyZm9ybWFuY2Ugd2luIG9uIHRoZSBwYXJzaW5nCiAgICAgLy8gYmVuY2htYXJr
LgotICAgIEVsZW1lbnQqIHRvcCgpIGNvbnN0CisgICAgRWxlbWVudFByb3h5KiB0b3AoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdG9wLT5lbGVtZW50KCkpOwogICAgICAgICByZXR1
cm4gbV90b3AtPmVsZW1lbnQoKTsKICAgICB9CiAKLSAgICBDb250YWluZXJOb2RlKiB0b3BOb2Rl
KCkgY29uc3QKKyAgICBDb250YWluZXJOb2RlUHJveHkqIHRvcE5vZGUoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fdG9wLT5ub2RlKCkpOwogICAgICAgICByZXR1cm4gbV90b3AtPm5v
ZGUoKTsKQEAgLTEwMSw3ICsxMDIsNyBAQCBwdWJsaWM6CiAKICAgICBIVE1MU3RhY2tJdGVtKiBv
bmVCZWxvd1RvcCgpIGNvbnN0OwogICAgIEVsZW1lbnRSZWNvcmQqIHRvcFJlY29yZCgpIGNvbnN0
OwotICAgIEVsZW1lbnRSZWNvcmQqIGZpbmQoRWxlbWVudCopIGNvbnN0OworICAgIEVsZW1lbnRS
ZWNvcmQqIGZpbmQoRWxlbWVudFByb3h5KikgY29uc3Q7CiAgICAgRWxlbWVudFJlY29yZCogdG9w
bW9zdChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0OwogCiAgICAgdm9pZCBpbnNl
cnRBYm92ZShQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+LCBFbGVtZW50UmVjb3JkKik7CkBAIC0x
MTQsOSArMTE1LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBwb3AoKTsKICAgICB2b2lkIHBvcFVu
dGlsKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgdm9pZCBwb3BVbnRpbChFbGVt
ZW50Kik7CisgICAgdm9pZCBwb3BVbnRpbChFbGVtZW50UHJveHkqKTsKICAgICB2b2lkIHBvcFVu
dGlsUG9wcGVkKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgdm9pZCBwb3BVbnRp
bFBvcHBlZChFbGVtZW50Kik7CisgICAgdm9pZCBwb3BVbnRpbFBvcHBlZChFbGVtZW50UHJveHkq
KTsKICAgICB2b2lkIHBvcFVudGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVkKCk7CiAgICAg
dm9pZCBwb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsgLy8gImNsZWFyIHRoZSBzdGFjayBiYWNr
IHRvIGEgdGFibGUgY29udGV4dCIgaW4gdGhlIHNwZWMuCiAgICAgdm9pZCBwb3BVbnRpbFRhYmxl
Qm9keVNjb3BlTWFya2VyKCk7IC8vICJjbGVhciB0aGUgc3RhY2sgYmFjayB0byBhIHRhYmxlIGJv
ZHkgY29udGV4dCIgaW4gdGhlIHNwZWMuCkBAIC0xMjksMTMgKzEzMCwxMyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChIVE1MU3RhY2tJdGVt
Kik7CiAgICAgc3RhdGljIGJvb2wgaXNIVE1MSW50ZWdyYXRpb25Qb2ludChIVE1MU3RhY2tJdGVt
Kik7CiAKLSAgICB2b2lkIHJlbW92ZShFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVIVE1MSGVh
ZEVsZW1lbnQoRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnRQcm94eSopOworICAg
IHZvaWQgcmVtb3ZlSFRNTEhlYWRFbGVtZW50KEVsZW1lbnRQcm94eSopOwogCi0gICAgYm9vbCBj
b250YWlucyhFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhFbGVtZW50UHJveHkq
KSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkg
Y29uc3Q7CiAKLSAgICBib29sIGluU2NvcGUoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaW5T
Y29wZShFbGVtZW50UHJveHkqKSBjb25zdDsKICAgICBib29sIGluU2NvcGUoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKSBjb25zdDsKICAgICBib29sIGluU2NvcGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OwogICAgIGJvb2wgaW5MaXN0SXRlbVNjb3BlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkgY29uc3Q7CkBAIC0xNTIsMTEgKzE1MywxMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNPbmx5T25lRWxlbWVudCgpIGNvbnN0OwogICAgIGJvb2wgc2Vjb25kRWxlbWVudElzSFRN
TEJvZHlFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBFbGVtZW50KiBodG1sRWxlbWVudCgpIGNvbnN0
OwotICAgIEVsZW1lbnQqIGhlYWRFbGVtZW50KCkgY29uc3Q7Ci0gICAgRWxlbWVudCogYm9keUVs
ZW1lbnQoKSBjb25zdDsKKyAgICBFbGVtZW50UHJveHkqIGh0bWxFbGVtZW50KCkgY29uc3Q7Cisg
ICAgRWxlbWVudFByb3h5KiBoZWFkRWxlbWVudCgpIGNvbnN0OworICAgIEVsZW1lbnRQcm94eSog
Ym9keUVsZW1lbnQoKSBjb25zdDsKICAgICAKLSAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSgp
IGNvbnN0OworICAgIENvbnRhaW5lck5vZGVQcm94eSogcm9vdE5vZGUoKSBjb25zdDsKIAogI2lm
bmRlZiBOREVCVUcKICAgICB2b2lkIHNob3coKTsKQEAgLTE2Niw3ICsxNjcsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcHVzaENvbW1vbihQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKICAgICB2
b2lkIHB1c2hSb290Tm9kZUNvbW1vbihQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKICAgICB2
b2lkIHBvcENvbW1vbigpOwotICAgIHZvaWQgcmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQqKTsK
KyAgICB2b2lkIHJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50UHJveHkqKTsKIAogICAgIE93blB0
cjxFbGVtZW50UmVjb3JkPiBtX3RvcDsKIApAQCAtMTc1LDkgKzE3Niw5IEBAIHByaXZhdGU6CiAg
ICAgLy8gRklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSByZXF1aXJlIHR5cGUtc3BlY2lmaWMgaW5m
b3JtYXRpb24gYWJvdXQKICAgICAvLyB0aGVzZSBlbGVtZW50cyBzbyB3ZSBoYXZlbid0IHlldCBi
b3RoZXJlZCB0byBwbHVtYiB0aGUgdHlwZXMgYWxsIHRoZQogICAgIC8vIHdheSBkb3duIHRocm91
Z2ggY3JlYXRlRWxlbWVudCwgZXRjLgotICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdE5vZGU7Ci0g
ICAgRWxlbWVudCogbV9oZWFkRWxlbWVudDsKLSAgICBFbGVtZW50KiBtX2JvZHlFbGVtZW50Owor
ICAgIENvbnRhaW5lck5vZGVQcm94eSogbV9yb290Tm9kZTsKKyAgICBFbGVtZW50UHJveHkqIG1f
aGVhZEVsZW1lbnQ7CisgICAgRWxlbWVudFByb3h5KiBtX2JvZHlFbGVtZW50OwogICAgIHVuc2ln
bmVkIG1fc3RhY2tEZXB0aDsKIAogICAgIEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKiBtX2Rv
bU11dGF0aW9uUXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCmluZGV4IGU3ZGQwZGFlMWEzOWUxZDQ5MmVk
MWUzZjI3OGFiYmFmMTZkYTA4NzMuLjY3ZDMyYjQ2NjE1ZDMyNTRiNzI4YzEwMTVkNTE1Y2IyYTZl
MmM2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC01Myw3ICs1Myw3IEBAIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6On5IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0KCkKIHsKIH0KIAotRWxlbWVu
dCogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXROYW1lKQorRWxlbWVudFByb3h5KiBIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIHRhcmdldE5hbWUpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
PSBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgRW50cnkmIGVudHJ5ID0g
bV9lbnRyaWVzW21fZW50cmllcy5zaXplKCkgLSBpXTsKQEAgLTY1LDEyICs2NSwxMiBAQCBFbGVt
ZW50KiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0RWxlbWVudEluU2NvcGVXaXRo
TmFtZShjb25zdCBBdG9taWNTdAogICAgIHJldHVybiAwOwogfQogCi1ib29sIEhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OmNvbnRhaW5zKEVsZW1lbnQqIGVsZW1lbnQpCitib29sIEhUTUxGb3Jt
YXR0aW5nRWxlbWVudExpc3Q6OmNvbnRhaW5zKEVsZW1lbnRQcm94eSogZWxlbWVudCkKIHsKICAg
ICByZXR1cm4gISFmaW5kKGVsZW1lbnQpOwogfQogCi1IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeSogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6ZmluZChFbGVtZW50KiBlbGVtZW50
KQorSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkqIEhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3Q6OmZpbmQoRWxlbWVudFByb3h5KiBlbGVtZW50KQogewogICAgIHNpemVfdCBpbmRleCA9
IG1fZW50cmllcy5yZXZlcnNlRmluZChlbGVtZW50KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91
bmQpIHsKQEAgLTgwLDE0ICs4MCwxNCBAQCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRy
eSogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6ZmluZChFbGVtZW50KiBlbGVtZQogICAgIHJl
dHVybiAwOwogfQogCi1IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpCb29rbWFyayBIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0Ojpib29rbWFya0ZvcihFbGVtZW50KiBlbGVtZW50KQorSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6
Ym9va21hcmtGb3IoRWxlbWVudFByb3h5KiBlbGVtZW50KQogewogICAgIHNpemVfdCBpbmRleCA9
IG1fZW50cmllcy5yZXZlcnNlRmluZChlbGVtZW50KTsKICAgICBBU1NFUlQoaW5kZXggIT0gbm90
Rm91bmQpOwogICAgIHJldHVybiBCb29rbWFyaygmYXQoaW5kZXgpKTsKIH0KIAotdm9pZCBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8oRWxlbWVudCogb2xkRWxlbWVudCwgUGFzc1Jl
ZlB0cjxIVE1MU3RhY2tJdGVtPiBuZXdJdGVtLCBjb25zdCBCb29rbWFyayYgYm9va21hcmspCit2
b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnN3YXBUbyhFbGVtZW50UHJveHkqIG9sZEVs
ZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gbmV3SXRlbSwgY29uc3QgQm9va21hcmsm
IGJvb2ttYXJrKQogewogICAgIEFTU0VSVChjb250YWlucyhvbGRFbGVtZW50KSk7CiAgICAgQVNT
RVJUKCFjb250YWlucyhuZXdJdGVtLT5lbGVtZW50KCkpKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2
b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPEhUTUxTdGFj
a0l0ZW0+IGl0ZW0pCiAgICAgbV9lbnRyaWVzLmFwcGVuZChpdGVtKTsKIH0KIAotdm9pZCBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpyZW1vdmUoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKEVsZW1lbnRQcm94eSogZWxlbWVudCkKIHsK
ICAgICBzaXplX3QgaW5kZXggPSBtX2VudHJpZXMucmV2ZXJzZUZpbmQoZWxlbWVudCk7CiAgICAg
aWYgKGluZGV4ICE9IG5vdEZvdW5kKQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6c2hvdygpCiAgICAgICAgIGlmIChlbnRyeS5pc01hcmtlcigpKQog
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYXJrZXJcbiIpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlbnRyeS5lbGVtZW50KCktPnNob3dOb2RlKCk7CisgICAgICAgICAgICBlbnRy
eS5lbGVtZW50KCktPm5vZGUoKS0+c2hvd05vZGUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaApp
bmRleCAzNWFjMTdjYzJhYjgyNmU0NzU2MGUxZmI3MTkwOTg5NjgwOGRlMzdlLi5kMGFiMjQ4NDNm
MjUyMTc2YjI3YTNiOGYyODM4YTg3NzVlMTA5YWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc01hcmtlcigpIGNvbnN0IHsgcmV0dXJuICFt
X2l0ZW07IH0KIAogICAgICAgICBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHN0YWNrSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIG1faXRlbTsgfQotICAgICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29u
c3QKKyAgICAgICAgRWxlbWVudFByb3h5KiBlbGVtZW50KCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgLy8gVGhlIGZhY3QgdGhhdCAhbV9pdGVtID09IGlzTWFya2VyKCkgaXMgYW4gaW1w
bGVtZW50YXRpb24gZGV0YWlsCiAgICAgICAgICAgICAvLyBjYWxsZXJzIHNob3VsZCBjaGVjayBp
c01hcmtlcigpIGJlZm9yZSBjYWxsaW5nIGVsZW1lbnQoKS4KQEAgLTcyLDggKzcyLDggQEAgcHVi
bGljOgogICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRl
bT4gaXRlbSkgeyBtX2l0ZW0gPSBpdGVtOyB9CiAKICAgICAgICAgLy8gTmVlZGVkIGZvciB1c2Ug
d2l0aCBWZWN0b3IuICBUaGVzZSBhcmUgc3VwZXItaG90IGFuZCBtdXN0IGJlIGlubGluZS4KLSAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFt
X2l0ZW0gPyAhZWxlbWVudCA6IG1faXRlbS0+ZWxlbWVudCgpID09IGVsZW1lbnQ7IH0KLSAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX2l0
ZW0gPyAhIWVsZW1lbnQgOiBtX2l0ZW0tPmVsZW1lbnQoKSAhPSBlbGVtZW50OyB9CisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShFbGVtZW50UHJveHkqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFt
X2l0ZW0gPyAhZWxlbWVudCA6IG1faXRlbS0+ZWxlbWVudCgpID09IGVsZW1lbnQ7IH0KKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KEVsZW1lbnRQcm94eSogZWxlbWVudCkgY29uc3QgeyByZXR1cm4g
IW1faXRlbSA/ICEhZWxlbWVudCA6IG1faXRlbS0+ZWxlbWVudCgpICE9IGVsZW1lbnQ7IH0KIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2l0ZW07CkBAIC0x
MDQsMTUgKzEwNCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIXNpemUoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyaWVz
LnNpemUoKTsgfQogCi0gICAgRWxlbWVudCogY2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgRWxlbWVudFByb3h5KiBjbG9zZXN0RWxlbWVudElu
U2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIEVudHJ5KiBmaW5kKEVs
ZW1lbnQqKTsKLSAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQqKTsKKyAgICBFbnRyeSogZmluZChF
bGVtZW50UHJveHkqKTsKKyAgICBib29sIGNvbnRhaW5zKEVsZW1lbnRQcm94eSopOwogICAgIHZv
aWQgYXBwZW5kKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOwotICAgIHZvaWQgcmVtb3ZlKEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZShFbGVtZW50UHJveHkqKTsKIAotICAgIEJvb2ttYXJr
IGJvb2ttYXJrRm9yKEVsZW1lbnQqKTsKLSAgICB2b2lkIHN3YXBUbyhFbGVtZW50KiBvbGRFbGVt
ZW50LCBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG5ld0l0ZW0sIGNvbnN0IEJvb2ttYXJrJik7
CisgICAgQm9va21hcmsgYm9va21hcmtGb3IoRWxlbWVudFByb3h5Kik7CisgICAgdm9pZCBzd2Fw
VG8oRWxlbWVudFByb3h5KiBvbGRFbGVtZW50LCBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG5l
d0l0ZW0sIGNvbnN0IEJvb2ttYXJrJik7CiAKICAgICB2b2lkIGFwcGVuZE1hcmtlcigpOwogICAg
IC8vIGNsZWFyVG9MYXN0TWFya2VyIGFsc28gY2xlYXJzIHRoZSBtYXJrZXIgKHBlciB0aGUgSFRN
TDUgc3BlYykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFy
c2VyRE9NTXV0YXRpb25RdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBh
cnNlckRPTU11dGF0aW9uUXVldWUuaAppbmRleCA4MmE3NTU4N2E0MDgzNTRmYTNmMzZiYTIxOGRi
NDAxODk2ZWEzOTVkLi43MDRlOGU5ZWQ5M2VkNWEwNzdlODg1ZGNlNDJkMGZhYWEwNGJhZjY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRp
b25RdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlLmgKQEAgLTM4LDEyICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBDb250YWluZXJOb2RlUHJveHk7CiBjbGFz
cyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFz
cyBIVE1MSHRtbEVsZW1lbnQ7Ci1jbGFzcyBOb2RlOworY2xhc3MgRWxlbWVudFByb3h5OworY2xh
c3MgSFRNTEZvcm1FbGVtZW50UHJveHk7CitjbGFzcyBIVE1MSHRtbEVsZW1lbnRQcm94eTsKK2Ns
YXNzIE5vZGVQcm94eTsKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKTsKQEAgLTU3
LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTcGVjdWxhdGluZygpIGNvbnN0IHsgcmV0
dXJuIG1faXNTcGVjdWxhdGluZzsgfQogICAgIHZvaWQgc2V0U3BlY3VsYXRpbmcoYm9vbCBpc1Nw
ZWN1bGF0aW5nKSB7IG1faXNTcGVjdWxhdGluZyA9IGlzU3BlY3VsYXRpbmc7IH0KIAotICAgIHZv
aWQgYmVnaW5QYXJzaW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB2b2lkIGJlZ2luUGFyc2lu
Z0NoaWxkcmVuKE5vZGVQcm94eSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKTsK
ICAgICAgICAgaWYgKG1faXNTcGVjdWxhdGluZykKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNr
Ojpkb1BlcmZvcm1UYXNrKG5vZGUpOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoUGFyc2luZ0No
aWxkcmVuKE5vZGUqIG5vZGUpCisgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oTm9kZVBy
b3h5KiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAgICBpZiAobV9p
c1NwZWN1bGF0aW5nKQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBIVE1M
UGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrOjpkb1BlcmZvcm1UYXNr
KG5vZGUpOwogICAgIH0KIAotICAgIHZvaWQgYWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9k
ZSogcGFyZW50LCBOb2RlKiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoID0gdHJ1ZSkKKyAgICB2b2lk
IGFkZENoaWxkQW5kQXR0YWNoKENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50LCBOb2RlUHJveHkq
IGNoaWxkLCBib29sIGxhenlBdHRhY2ggPSB0cnVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHBh
cmVudCk7CiAgICAgICAgIEFTU0VSVChjaGlsZCk7CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFzazo6
ZG9QZXJmb3JtVGFzayhwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKTsKICAgICB9CiAKLSAgICB2
b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJl
bnQoTm9kZVByb3h5KiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAg
ICBpZiAobV9pc1NwZWN1bGF0aW5nKQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzazo6ZG9QZXJmb3Jt
VGFzayhub2RlKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50
KENvbnRhaW5lck5vZGUqIG5ld1BhcmVudCwgQ29udGFpbmVyTm9kZSogb2xkUGFyZW50KQorICAg
IHZvaWQgbW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQoQ29udGFpbmVyTm9kZVByb3h5KiBuZXdQ
YXJlbnQsIENvbnRhaW5lck5vZGVQcm94eSogb2xkUGFyZW50KQogICAgIHsKICAgICAgICAgQVNT
RVJUKG5ld1BhcmVudCk7CiAgICAgICAgIEFTU0VSVChvbGRQYXJlbnQpOwpAQCAtMTA0LDcgKzEw
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxD
aGlsZHJlblRvTmV3UGFyZW50VGFzazo6ZG9QZXJmb3JtVGFzayhuZXdQYXJlbnQsIG9sZFBhcmVu
dCk7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbihDb250YWluZXJOb2RlKiBu
b2RlKQorICAgIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZVByb3h5KiBub2Rl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAgICBpZiAobV9pc1NwZWN1bGF0
aW5nKQpAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEhUTUxQYXJzZXJE
T01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFzazo6ZG9QZXJmb3JtVGFzayhub2RlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldEF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgdm9p
ZCBzZXRBdHRyaWJ1dGUoRWxlbWVudFByb3h5KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBB
U1NFUlQoZWxlbWVudCk7CiAgICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0
cmlidXRlVGFzazo6ZG9QZXJmb3JtVGFzayhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldEluc2VydGVkQnlQYXJzZXIoSFRNTEh0bWxFbGVtZW50KiBlbGVt
ZW50KQorICAgIHZvaWQgc2V0SW5zZXJ0ZWRCeVBhcnNlcihIVE1MSHRtbEVsZW1lbnRQcm94eSog
ZWxlbWVudCkKICAgICB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50KTsKICAgICAgICAgaWYgKG1f
aXNTcGVjdWxhdGluZykKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBI
VE1MUGFyc2VyRE9NTXV0YXRpb25EaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZVRhc2s6
OmRvUGVyZm9ybVRhc2soZG9jdW1lbnQpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RGVtb3RlZChI
VE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgaXNEZW1vdGVkKQorICAgIHZvaWQgc2V0RGVtb3Rl
ZChIVE1MRm9ybUVsZW1lbnRQcm94eSogZm9ybSwgYm9vbCBpc0RlbW90ZWQpCiAgICAgewogICAg
ICAgICBBU1NFUlQoZm9ybSk7CiAgICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCkBAIC0xNDks
NyArMTQ5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0
RGVtb3RlZFRhc2s6OmRvUGVyZm9ybVRhc2soZm9ybSwgaXNEZW1vdGVkKTsKICAgICB9CiAKLSAg
ICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCisgICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9t
VG9rZW5JbnRvRWxlbWVudChFbGVtZW50UHJveHkqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiAgICAgewogICAgICAgICBpZiAodG9rZW4tPmF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzksMTQgKzE3OSwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0
eXBlVGFzazo6ZG9QZXJmb3JtVGFzayhkb2N1bWVudCk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNl
cnQoQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIHNl
bGZDbG9zaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKKyAgICB2b2lkIGlu
c2VydChDb250YWluZXJOb2RlUHJveHkqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlUHJveHk+IGNo
aWxkLCBib29sIHNlbGZDbG9zaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChwYXJlbnQpOwogICAgICAgICBBU1NFUlQoY2hpbGQpOwog
ICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGFz
azo6Y3JlYXRlKHBhcmVudCwgY2hpbGQsIHNlbGZDbG9zaW5nLCBtYXhpbXVtRE9NVHJlZURlcHRo
RXhjZWVkZWQpKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEZvc3RlclBhcmVudGVkKEVsZW1l
bnQqIHRhYmxlLCBDb250YWluZXJOb2RlKiB0YWJsZU5leHQsIENvbnRhaW5lck5vZGUqIHJvb3Qs
IGJvb2wgaXNQYXNpbmdGcmFnbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxm
Q2xvc2luZykKKyAgICB2b2lkIGluc2VydEZvc3RlclBhcmVudGVkKEVsZW1lbnRQcm94eSogdGFi
bGUsIENvbnRhaW5lck5vZGVQcm94eSogdGFibGVOZXh0LCBDb250YWluZXJOb2RlUHJveHkqIHJv
b3QsIGJvb2wgaXNQYXNpbmdGcmFnbWVudCwgUGFzc1JlZlB0cjxOb2RlUHJveHk+IGNoaWxkLCBi
b29sIHNlbGZDbG9zaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKHRhYmxlKTsKICAgICAgICAg
QVNTRVJUKHRhYmxlTmV4dCk7CkBAIC0xOTUsMTMgKzE5NSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJl
bnRlZFRhc2s6OmNyZWF0ZSh0YWJsZSwgdGFibGVOZXh0LCByb290LCBpc1Bhc2luZ0ZyYWdtZW50
LCBjaGlsZCwgc2VsZkNsb3NpbmcpKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydFRleHQoQ29u
dGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxk
VXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKKyAgICB2
b2lkIGluc2VydFRleHQoQ29udGFpbmVyTm9kZVByb3h5KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
Y2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcsIGJvb2wgbWF4aW11bURPTVRy
ZWVEZXB0aEV4Y2VlZGVkKQogICAgIHsKICAgICAgICAgQVNTRVJUKHBhcmVudCk7CiAgICAgICAg
IG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0VGFzazo6
Y3JlYXRlKHBhcmVudCwgY2hhcmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3RyaW5nLCBtYXhpbXVt
RE9NVHJlZURlcHRoRXhjZWVkZWQpKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydEZvc3RlclBh
cmVudGVkVGV4dChFbGVtZW50KiB0YWJsZSwgQ29udGFpbmVyTm9kZSogdGFibGVOZXh0LCBDb250
YWluZXJOb2RlKiByb290LCBib29sIGlzUGFzaW5nRnJhZ21lbnQsIGNvbnN0IFN0cmluZyYgY2hh
cmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcpCisgICAgdm9pZCBpbnNlcnRGb3N0
ZXJQYXJlbnRlZFRleHQoRWxlbWVudFByb3h5KiB0YWJsZSwgQ29udGFpbmVyTm9kZVByb3h5KiB0
YWJsZU5leHQsIENvbnRhaW5lck5vZGVQcm94eSogcm9vdCwgYm9vbCBpc1Bhc2luZ0ZyYWdtZW50
LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHRhYmxlKTsKICAgICAgICAgQVNTRVJUKHRhYmxlTmV4dCk7
CkBAIC0yMDksNzIgKzIwOSw3MiBAQCBwdWJsaWM6CiAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVu
ZChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRUYXNrOjpjcmVh
dGUodGFibGUsIHRhYmxlTmV4dCwgcm9vdCwgaXNQYXNpbmdGcmFnbWVudCwgY2hhcmFjdGVycywg
c2hvdWxkVXNlQXRvbWljU3RyaW5nKSk7CiAgICAgfQogCi0gICAgdm9pZCBpbnNlcnRDb21tZW50
KENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBjb21tZW50LCBib29sIG1heGlt
dW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKKyAgICB2b2lkIGluc2VydENvbW1lbnQoQ29udGFpbmVy
Tm9kZVByb3h5KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY29tbWVudCwgYm9vbCBtYXhpbXVtRE9N
VHJlZURlcHRoRXhjZWVkZWQpCiAgICAgewogICAgICAgICBBU1NFUlQocGFyZW50KTsKICAgICAg
ICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRU
YXNrOjpjcmVhdGUocGFyZW50LCBjb21tZW50LCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQp
KTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYgY29t
bWVudCkKKyAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCwgQ29udGFpbmVyTm9kZVByb3h5KiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBjb21t
ZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAgQVNTRVJUKGF0
dGFjaG1lbnRSb290KTsKICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydENvbW1lbnRPbkRvY3VtZW50VGFzazo6Y3JlYXRlKGRvY3VtZW50LCBhdHRh
Y2htZW50Um9vdCwgY29tbWVudCkpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0RG9jdHlwZShE
b2N1bWVudCogZG9jdW1lbnQsIENvbnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVt
SWQpCisgICAgdm9pZCBpbnNlcnREb2N0eXBlKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVy
Tm9kZVByb3h5KiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQogICAgIHsKICAgICAgICAgbV90
YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydERvY3R5cGVUYXNrOjpj
cmVhdGUoZG9jdW1lbnQsIGF0dGFjaG1lbnRSb290LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQp
KTsKICAgICB9CiAKICAgICB2b2lkIGZsdXNoKCk7CiAKLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+
IGNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUsIEF0b21pY0hUTUxUb2tl
biogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIFBhc3NSZWZQ
dHI8RWxlbWVudFByb3h5PiBjcmVhdGVFbGVtZW50KENvbnRhaW5lck5vZGVQcm94eSogY3VycmVu
dE5vZGUsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IENhbid0IHF1ZXVlIGVsZW1lbnQgY3Jl
YXRpb24uIEFkZCBub2RlIHByb3h5IGNsYXNzZXMgaW4gZm9sbG93LXVwIGNvbW1pdHMuCi0gICAg
ICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpIHsKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0
ZUVsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKGN1cnJlbnROb2RlLCB0b2tlbiwgbmFtZXNwYWNl
VVJJLCBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBSZWZQdHI8RWxlbWVu
dFByb3h5PiBlbGVtZW50ID0gRWxlbWVudFByb3h5OjpjcmVhdGUoKTsKKworICAgICAgICBpZiAo
bV9pc1NwZWN1bGF0aW5nKQorICAgICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJz
ZXJET01NdXRhdGlvbkNyZWF0ZUVsZW1lbnRUYXNrOjpjcmVhdGUoZWxlbWVudCwgY3VycmVudE5v
ZGUsIHRva2VuLCBuYW1lc3BhY2VVUkksIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVt
ZW50VGFzazo6ZG9QZXJmb3JtVGFzayhlbGVtZW50LmdldCgpLCBjdXJyZW50Tm9kZSwgdG9rZW4s
IG5hbWVzcGFjZVVSSSwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKworICAgICAgICBy
ZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50
PiBjcmVhdGVIVE1MRWxlbWVudChDb250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIFBhc3NSZWZQdHI8RWxl
bWVudFByb3h5PiBjcmVhdGVIVE1MRWxlbWVudChDb250YWluZXJOb2RlUHJveHkqIGN1cnJlbnRO
b2RlLCBIVE1MRm9ybUVsZW1lbnRQcm94eSogZm9ybSwgQXRvbWljSFRNTFRva2VuKiB0b2tlbiwg
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikK
ICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4ndCBxdWV1ZSBlbGVtZW50IGNyZWF0aW9uLiBB
ZGQgbm9kZSBwcm94eSBjbGFzc2VzIGluIGZvbGxvdy11cCBjb21taXRzLgotICAgICAgICBpZiAo
bV9pc1NwZWN1bGF0aW5nKSB7Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MRWxl
bWVudFRhc2s6OmRvUGVyZm9ybVRhc2soY3VycmVudE5vZGUsIGZvcm0sIHRva2VuLCBmcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBSZWZQdHI8RWxlbWVudFByb3h5PiBlbGVt
ZW50ID0gRWxlbWVudFByb3h5OjpjcmVhdGUoKTsKKworICAgICAgICBpZiAobV9pc1NwZWN1bGF0
aW5nKQorICAgICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlv
bkNyZWF0ZUhUTUxFbGVtZW50VGFzazo6Y3JlYXRlKGVsZW1lbnQsIGN1cnJlbnROb2RlLCBmb3Jt
LCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxFbGVtZW50VGFzazo6ZG9Q
ZXJmb3JtVGFzayhlbGVtZW50LmdldCgpLCBjdXJyZW50Tm9kZSwgZm9ybSwgdG9rZW4sIGZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFz
ZSgpOwogICAgIH0KIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTFNjcmlwdEVs
ZW1lbnQoQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4s
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24s
IGJvb2wgaXNQYXNpbmdGcmFnbWVudCkKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnRQcm94eT4gY3Jl
YXRlSFRNTFNjcmlwdEVsZW1lbnQoQ29udGFpbmVyTm9kZVByb3h5KiBjdXJyZW50Tm9kZSwgQXRv
bWljSFRNTFRva2VuKiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiwgYm9vbCBpc1Bhc2luZ0ZyYWdtZW50KQogICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IENhbid0IHF1ZXVlIGVsZW1lbnQgY3JlYXRpb24uIEFkZCBub2RlIHByb3h5
IGNsYXNzZXMgaW4gZm9sbG93LXVwIGNvbW1pdHMuCi0gICAgICAgIGlmIChtX2lzU3BlY3VsYXRp
bmcpIHsKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50VGFz
azo6ZG9QZXJmb3JtVGFzayhjdXJyZW50Tm9kZSwgdG9rZW4sIGZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiwgaXNQYXNpbmdGcmFnbWVudCk7CisgICAgICAgIFJlZlB0cjxFbGVtZW50UHJveHk+
IGVsZW1lbnQgPSBFbGVtZW50UHJveHk6OmNyZWF0ZSgpOworCisgICAgICAgIGlmIChtX2lzU3Bl
Y3VsYXRpbmcpCisgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11
dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNrOjpjcmVhdGUoZWxlbWVudCwgY3VycmVu
dE5vZGUsIHRva2VuLCBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIGlzUGFzaW5nRnJhZ21l
bnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uQ3Jl
YXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKGVsZW1lbnQuZ2V0KCksIGN1
cnJlbnROb2RlLCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBpc1Bhc2luZ0Zy
YWdtZW50KTsKKworICAgICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGNyZWF0ZUhUTUxIdG1sRWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pCisgICAgUGFzc1JlZlB0cjxI
VE1MSHRtbEVsZW1lbnRQcm94eT4gY3JlYXRlSFRNTEh0bWxFbGVtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
IGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBD
YW4ndCBxdWV1ZSBlbGVtZW50IGNyZWF0aW9uLiBBZGQgbm9kZSBwcm94eSBjbGFzc2VzIGluIGZv
bGxvdy11cCBjb21taXRzLgotICAgICAgICBpZiAobV9pc1NwZWN1bGF0aW5nKSB7Ci0gICAgICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBIVE1M
UGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MSHRtbEVsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNr
KGRvY3VtZW50LCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAg
UmVmUHRyPEhUTUxIdG1sRWxlbWVudFByb3h5PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50UHJv
eHk6OmNyZWF0ZSgpOworCisgICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCisgICAgICAgICAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEh0bWxF
bGVtZW50VGFzazo6Y3JlYXRlKGVsZW1lbnQsIGRvY3VtZW50LCB0b2tlbiwgZnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhUTUxQYXJzZXJE
T01NdXRhdGlvbkNyZWF0ZUhUTUxIdG1sRWxlbWVudFRhc2s6OmRvUGVyZm9ybVRhc2soZWxlbWVu
dC5nZXQoKSwgZG9jdW1lbnQsIHRva2VuLCBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwor
CisgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5j
cHAKaW5kZXggM2QzZWM0ODY2MzE0YTA3ZWM4MzhlOTA5MDdiMzhjN2UyNzc1ODQ4Ni4uNWM4Yzc0
MGEzMGJhYTk1MTM3YWRhNDRmNDNhMjA0MDYxY2FiYmNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5jcHAKQEAg
LTExMCw2NSArMTEwLDkyIEBAIHN0YXRpYyB2b2lkIGluc2VydFRleHQoQ29udGFpbmVyTm9kZSog
cGFyZW50LCBOb2RlKiBuZXh0Q2hpbGQsIGNvbnN0IFN0cmluZyYgY2hhCiAgICAgfQogfQogCi12
b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRhc2s6OmRvUGVyZm9ybVRhc2soQ29udGFp
bmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5n
LCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKK3ZvaWQgSFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0VGFzazo6ZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlUHJveHkqIHBhcmVu
dFByb3h5LCBOb2RlUHJveHkqIGNoaWxkUHJveHksIGJvb2wgc2VsZkNsb3NpbmcsIGJvb2wgbWF4
aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQogeworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9
IHBhcmVudFByb3h5LT5jb250YWluZXJOb2RlKCk7CisgICAgTm9kZSogY2hpbGQgPSBjaGlsZFBy
b3h5LT5ub2RlKCk7CisKICAgICBpZiAobWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkICYmIHBh
cmVudC0+cGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUo
KTsKICAgICBpbnNlcnQocGFyZW50LCAwLCBjaGlsZCwgc2VsZkNsb3NpbmcpOwogfQogCi12b2lk
IEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzazo6ZG9QZXJmb3Jt
VGFzayhFbGVtZW50KiB0YWJsZSwgQ29udGFpbmVyTm9kZSogdGFibGVOZXh0LCBDb250YWluZXJO
b2RlKiByb290LCBib29sIGlzUGFyc2luZ0ZyYWdtZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxk
LCBib29sIHNlbGZDbG9zaW5nKQordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0
ZXJQYXJlbnRlZFRhc2s6OmRvUGVyZm9ybVRhc2soRWxlbWVudFByb3h5KiB0YWJsZVByb3h5LCBD
b250YWluZXJOb2RlUHJveHkqIHRhYmxlTmV4dFByb3h5LCBDb250YWluZXJOb2RlUHJveHkqIHJv
b3RQcm94eSwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgTm9kZVByb3h5KiBjaGlsZFByb3h5LCBi
b29sIHNlbGZDbG9zaW5nKQogeworICAgIEVsZW1lbnQqIHRhYmxlID0gdGFibGVQcm94eS0+ZWxl
bWVudCgpOworICAgIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4dCA9IHRhYmxlTmV4dFByb3h5LT5j
b250YWluZXJOb2RlKCk7CisgICAgQ29udGFpbmVyTm9kZSogcm9vdCA9IHJvb3RQcm94eS0+Y29u
dGFpbmVyTm9kZSgpOworICAgIE5vZGUqIGNoaWxkID0gY2hpbGRQcm94eS0+bm9kZSgpOworCiAg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50OwogICAgIE5vZGUqIG5leHRDaGlsZDsKICAgICBmaW5k
Rm9zdGVyUGFyZW50QW5kTmV4dENoaWxkKHRhYmxlLCB0YWJsZU5leHQsIHJvb3QsIGlzUGFyc2lu
Z0ZyYWdtZW50LCBwYXJlbnQsIG5leHRDaGlsZCk7CiAgICAgaW5zZXJ0KHBhcmVudCwgbmV4dENo
aWxkLCBjaGlsZCwgc2VsZkNsb3NpbmcpOwogfQogCi12b2lkIEhUTUxQYXJzZXJET01NdXRhdGlv
bkluc2VydFRleHRUYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29u
c3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZywgYm9vbCBt
YXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbklu
c2VydFRleHRUYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50UHJv
eHksIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcs
IGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQogeworICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudCA9IHBhcmVudFByb3h5LT5jb250YWluZXJOb2RlKCk7CisKICAgICBpZiAobWF4aW11
bURPTVRyZWVEZXB0aEV4Y2VlZGVkICYmIHBhcmVudC0+cGFyZW50Tm9kZSgpKQogICAgICAgICBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKICAgICBpbnNlcnRUZXh0KHBhcmVudCwgMCwg
Y2hhcmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKIH0KIAotdm9pZCBIVE1MUGFyc2Vy
RE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRUYXNrOjpkb1BlcmZvcm1UYXNrKEVs
ZW1lbnQqIHRhYmxlLCBDb250YWluZXJOb2RlKiB0YWJsZU5leHQsIENvbnRhaW5lck5vZGUqIHJv
b3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9v
bCBzaG91bGRVc2VBdG9taWNTdHJpbmcpCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dEZvc3RlclBhcmVudGVkVGV4dFRhc2s6OmRvUGVyZm9ybVRhc2soRWxlbWVudFByb3h5KiB0YWJs
ZVByb3h5LCBDb250YWluZXJOb2RlUHJveHkqIHRhYmxlTmV4dFByb3h5LCBDb250YWluZXJOb2Rl
UHJveHkqIHJvb3RQcm94eSwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgY29uc3QgU3RyaW5nJiBj
aGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZykKIHsKKyAgICBFbGVtZW50KiB0
YWJsZSA9IHRhYmxlUHJveHktPmVsZW1lbnQoKTsKKyAgICBDb250YWluZXJOb2RlKiB0YWJsZU5l
eHQgPSB0YWJsZU5leHRQcm94eS0+Y29udGFpbmVyTm9kZSgpOworICAgIENvbnRhaW5lck5vZGUq
IHJvb3QgPSByb290UHJveHktPmNvbnRhaW5lck5vZGUoKTsKKwogICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudDsKICAgICBOb2RlKiBuZXh0Q2hpbGQ7CiAgICAgZmluZEZvc3RlclBhcmVudEFuZE5l
eHRDaGlsZCh0YWJsZSwgdGFibGVOZXh0LCByb290LCBpc1BhcnNpbmdGcmFnbWVudCwgcGFyZW50
LCBuZXh0Q2hpbGQpOwogICAgIGluc2VydFRleHQocGFyZW50LCBuZXh0Q2hpbGQsIGNoYXJhY3Rl
cnMsIHNob3VsZFVzZUF0b21pY1N0cmluZyk7CiB9CiAKLXZvaWQgSFRNTFBhcnNlckRPTU11dGF0
aW9uSW5zZXJ0Q29tbWVudFRhc2s6OmRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogcGFyZW50
LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVk
KQordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRDb21tZW50VGFzazo6ZG9QZXJmb3Jt
VGFzayhDb250YWluZXJOb2RlUHJveHkqIHBhcmVudFByb3h5LCBjb25zdCBTdHJpbmcmIGNvbW1l
bnQsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQogeworICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudCA9IHBhcmVudFByb3h5LT5jb250YWluZXJOb2RlKCk7CisKICAgICBpZiAobWF4
aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkICYmIHBhcmVudC0+cGFyZW50Tm9kZSgpKQogICAgICAg
ICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKICAgICBpbnNlcnQocGFyZW50LCAwLCBD
b21tZW50OjpjcmVhdGUocGFyZW50LT5kb2N1bWVudCgpLCBjb21tZW50KSk7CiB9CiAKLXZvaWQg
SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1lbnRUYXNrOjpkb1BlcmZv
cm1UYXNrKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3Qs
IGNvbnN0IFN0cmluZyYgY29tbWVudCkKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0
Q29tbWVudE9uRG9jdW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKERvY3VtZW50KiBkb2N1bWVudCwg
Q29udGFpbmVyTm9kZVByb3h5KiBhdHRhY2htZW50Um9vdFByb3h5LCBjb25zdCBTdHJpbmcmIGNv
bW1lbnQpCiB7CisgICAgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3QgPSBhdHRhY2htZW50
Um9vdFByb3h5LT5jb250YWluZXJOb2RlKCk7CisKICAgICBpbnNlcnQoYXR0YWNobWVudFJvb3Qs
IDAsIENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgY29tbWVudCkpOwogfQogCi12b2lkIEhUTUxQ
YXJzZXJET01NdXRhdGlvbkluc2VydERvY3R5cGVUYXNrOjpkb1BlcmZvcm1UYXNrKERvY3VtZW50
KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKK3Zv
aWQgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0RG9jdHlwZVRhc2s6OmRvUGVyZm9ybVRhc2so
RG9jdW1lbnQqIGRvY3VtZW50LCBDb250YWluZXJOb2RlUHJveHkqIGF0dGFjaG1lbnRSb290UHJv
eHksIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3Ry
aW5nJiBzeXN0ZW1JZCkKIHsKKyAgICBDb250YWluZXJOb2RlKiBhdHRhY2htZW50Um9vdCA9IGF0
dGFjaG1lbnRSb290UHJveHktPmNvbnRhaW5lck5vZGUoKTsKKwogICAgIGluc2VydChhdHRhY2ht
ZW50Um9vdCwgMCwgRG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lk
LCBzeXN0ZW1JZCkpOwogfQogCi12b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2lu
Z0NoaWxkcmVuVGFzazo6ZG9QZXJmb3JtVGFzayhOb2RlKiBub2RlKQordm9pZCBIVE1MUGFyc2Vy
RE9NTXV0YXRpb25CZWdpblBhcnNpbmdDaGlsZHJlblRhc2s6OmRvUGVyZm9ybVRhc2soTm9kZVBy
b3h5KiBub2RlUHJveHkpCiB7CisgICAgTm9kZSogbm9kZSA9IG5vZGVQcm94eS0+bm9kZSgpOwor
CiAgICAgbm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKIH0KIAotdm9pZCBIVE1MUGFyc2Vy
RE9NTXV0YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrOjpkb1BlcmZvcm1UYXNrKE5vZGUq
IG5vZGUpCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRh
c2s6OmRvUGVyZm9ybVRhc2soTm9kZVByb3h5KiBub2RlUHJveHkpCiB7CisgICAgTm9kZSogbm9k
ZSA9IG5vZGVQcm94eS0+bm9kZSgpOworCiAgICAgbm9kZS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KCk7CiB9CiAKLXZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNr
Ojpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBhcmVudCwgTm9kZSogY2hpbGQsIGJvb2wg
bGF6eUF0dGFjaCkKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hU
YXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50UHJveHksIE5vZGVQ
cm94eSogY2hpbGRQcm94eSwgYm9vbCBsYXp5QXR0YWNoKQogeworICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudCA9IHBhcmVudFByb3h5LT5jb250YWluZXJOb2RlKCk7CisgICAgTm9kZSogY2hpbGQg
PSBjaGlsZFByb3h5LT5ub2RlKCk7CisKICAgICBwYXJlbnQtPnBhcnNlckFkZENoaWxkKGNoaWxk
KTsKICAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkgewog
ICAgICAgICBpZiAobGF6eUF0dGFjaCkKQEAgLTE3OCwyOSArMjA1LDQwIEBAIHZvaWQgSFRNTFBh
cnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRh
aW5lck5vZGUqIHBhCiAgICAgfQogfQogCi12b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92
ZUZyb21QYXJlbnRUYXNrOjpkb1BlcmZvcm1UYXNrKE5vZGUqIG5vZGUpCit2b2lkIEhUTUxQYXJz
ZXJET01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrOjpkb1BlcmZvcm1UYXNrKE5vZGVQcm94
eSogbm9kZVByb3h5KQogeworICAgIE5vZGUqIG5vZGUgPSBub2RlUHJveHktPm5vZGUoKTsKKwog
ICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpCiAgICAg
ICAgIHBhcmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQobm9kZSk7CiB9CiAKLXZvaWQgSFRNTFBhcnNl
ckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrOjpkb1BlcmZvcm1UYXNr
KENvbnRhaW5lck5vZGUqIG5ld1BhcmVudCwgQ29udGFpbmVyTm9kZSogb2xkUGFyZW50KQordm9p
ZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2s6OmRv
UGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZVByb3h5KiBuZXdQYXJlbnRQcm94eSwgQ29udGFpbmVy
Tm9kZVByb3h5KiBvbGRQYXJlbnRQcm94eSkKIHsKKyAgICBDb250YWluZXJOb2RlKiBvbGRQYXJl
bnQgPSBvbGRQYXJlbnRQcm94eS0+Y29udGFpbmVyTm9kZSgpOworICAgIENvbnRhaW5lck5vZGUq
IG5ld1BhcmVudCA9IG5ld1BhcmVudFByb3h5LT5jb250YWluZXJOb2RlKCk7CisKICAgICBuZXdQ
YXJlbnQtPnRha2VBbGxDaGlsZHJlbkZyb20ob2xkUGFyZW50KTsKIH0KIAotdm9pZCBIVE1MUGFy
c2VyRE9NTXV0YXRpb25SZW1vdmVBbGxDaGlsZHJlblRhc2s6OmRvUGVyZm9ybVRhc2soQ29udGFp
bmVyTm9kZSogbm9kZSkKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRy
ZW5UYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGVQcm94eSogbm9kZVByb3h5KQogewor
ICAgIENvbnRhaW5lck5vZGUqIG5vZGUgPSBub2RlUHJveHktPmNvbnRhaW5lck5vZGUoKTsKKwog
ICAgIG5vZGUtPnJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAKLXZvaWQgSFRNTFBhcnNlckRPTU11
dGF0aW9uU2V0QXR0cmlidXRlVGFzazo6ZG9QZXJmb3JtVGFzayhFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
Cit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2s6OmRvUGVyZm9ybVRh
c2soRWxlbWVudFByb3h5KiBlbGVtZW50UHJveHksIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gZWxlbWVudFByb3h5LT5lbGVtZW50KCk7CisKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUo
YXR0cmlidXRlLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0SW5z
ZXJ0ZWRCeVBhcnNlclRhc2s6OmRvUGVyZm9ybVRhc2soSFRNTEh0bWxFbGVtZW50KiBlbGVtZW50
KQordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzazo6ZG9Q
ZXJmb3JtVGFzayhIVE1MSHRtbEVsZW1lbnRQcm94eSogZWxlbWVudFByb3h5KQogeworICAgIEhU
TUxIdG1sRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRQcm94eS0+aHRtbEh0bWxFbGVtZW50KCk7
CisKICAgICBlbGVtZW50LT5pbnNlcnRlZEJ5UGFyc2VyKCk7CiB9CiAKQEAgLTIxMCwxMyArMjQ4
LDE3IEBAIHZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRB
dmFpbGFibGVUYXNrOjpkb1BlcmZvcm1UYXNrKERvCiAgICAgICAgIGRvY3VtZW50LT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKIH0KIAotdm9p
ZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVkVGFzazo6ZG9QZXJmb3JtVGFzayhIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgaXNEZW1vdGVkKQordm9pZCBIVE1MUGFyc2VyRE9NTXV0
YXRpb25TZXREZW1vdGVkVGFzazo6ZG9QZXJmb3JtVGFzayhIVE1MRm9ybUVsZW1lbnRQcm94eSog
Zm9ybVByb3h5LCBib29sIGlzRGVtb3RlZCkKIHsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0g
PSBmb3JtUHJveHktPmh0bWxGb3JtRWxlbWVudCgpOworCiAgICAgZm9ybS0+c2V0RGVtb3RlZChp
c0RlbW90ZWQpOwogfQogCi12b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbk1lcmdlQXR0cmlidXRl
c0Zyb21Ub2tlbkludG9FbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFzayhFbGVtZW50KiBlbGVtZW50
LCBBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25NZXJn
ZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2s6OmRvUGVyZm9ybVRhc2soRWxlbWVu
dFByb3h5KiBlbGVtZW50UHJveHksIEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRQcm94eS0+ZWxlbWVudCgpOworCiAgICAgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGVsZW1lbnRBdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+bXV0YWJsZUF0dHJp
YnV0ZURhdGEoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmli
dXRlcygpLnNpemUoKTsgKytpKSB7CkBAIC0yMzYsMTYgKzI3OCwyMiBAQCB2b2lkIEhUTUxQYXJz
ZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrOjpkb1BlcmZv
cm1UYXNrKERvYwogICAgIGRvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRl
RWxlbWVudFRhc2s6OmRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUsIEF0
b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQor
dm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFz
ayhFbGVtZW50UHJveHkqIGVsZW1lbnRQcm94eSwgQ29udGFpbmVyTm9kZVByb3h5KiBjdXJyZW50
Tm9kZVByb3h5LCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbikKIHsKKyAgICBDb250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRO
b2RlUHJveHktPmNvbnRhaW5lck5vZGUoKTsKKwogICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShu
dWxsQXRvbSwgdG9rZW4tPm5hbWUoKSwgbmFtZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCA9IGN1cnJlbnROb2RlLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRhZ05h
bWUsIHRydWUpOwogICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4tPmF0dHJp
YnV0ZXMoKSwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAgICByZXR1cm4gZWxlbWVu
dC5yZWxlYXNlKCk7CisKKyAgICBlbGVtZW50UHJveHktPnNldEVsZW1lbnQoZWxlbWVudC5yZWxl
YXNlKCkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxQYXJzZXJET01NdXRhdGlvbkNy
ZWF0ZUhUTUxFbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBjdXJyZW50
Tm9kZSwgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQordm9p
ZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MRWxlbWVudFRhc2s6OmRvUGVyZm9ybVRh
c2soRWxlbWVudFByb3h5KiBlbGVtZW50UHJveHksIENvbnRhaW5lck5vZGVQcm94eSogY3VycmVu
dE5vZGVQcm94eSwgSFRNTEZvcm1FbGVtZW50UHJveHkqIGZvcm1Qcm94eSwgQXRvbWljSFRNTFRv
a2VuKiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbikKIHsKKyAgICBDb250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRO
b2RlUHJveHktPmNvbnRhaW5lck5vZGUoKTsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBm
b3JtUHJveHkgPyBmb3JtUHJveHktPmh0bWxGb3JtRWxlbWVudCgpIDogMDsKKwogICAgIFF1YWxp
ZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4tPm5hbWUoKSwgSFRNTE5hbWVzOjp4aHRt
bE5hbWVzcGFjZVVSSSk7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuJ3QgdXNlIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50IGJlY2F1c2Ugd2UKICAgICAvLyBoYXZlIHRvIHBhc3Mg
dGhlIGN1cnJlbnQgZm9ybSBlbGVtZW50LiBXZSBzaG91bGQgcmV3b3JrIGZvcm0gYXNzb2NpYXRp
b24KQEAgLTI1MywxMSArMzAxLDE0IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFBhcnNlckRP
TU11dGF0aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKENvCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVt
ZW50KHRhZ05hbWUsIGN1cnJlbnROb2RlLT5kb2N1bWVudCgpLCBmb3JtLCB0cnVlKTsKICAgICBl
bGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCksIGZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOworCisgICAgZWxlbWVudFByb3h5LT5z
ZXRFbGVtZW50KGVsZW1lbnQucmVsZWFzZSgpKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBI
VE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MU2NyaXB0RWxlbWVudFRhc2s6OmRvUGVyZm9y
bVRhc2soQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4s
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24s
IGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQpCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0
ZUhUTUxTY3JpcHRFbGVtZW50VGFzazo6ZG9QZXJmb3JtVGFzayhFbGVtZW50UHJveHkqIGVsZW1l
bnRQcm94eSwgQ29udGFpbmVyTm9kZVByb3h5KiBjdXJyZW50Tm9kZVByb3h5LCBBdG9taWNIVE1M
VG9rZW4qIHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uLCBib29sIGlzUGFyc2luZ0ZyYWdtZW50KQogeworICAgIENvbnRhaW5lck5v
ZGUqIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGVQcm94eS0+Y29udGFpbmVyTm9kZSgpOworCiAg
ICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9t
dWx0aXBhZ2Uvc2NyaXB0aW5nLTEuaHRtbCNhbHJlYWR5LXN0YXJ0ZWQKICAgICAvLyBodHRwOi8v
aHRtbDUub3JnL3NwZWNzL2RvbS1wYXJzaW5nLmh0bWwjZG9tLXJhbmdlLWNyZWF0ZWNvbnRleHR1
YWxmcmFnbWVudAogICAgIC8vIEZvciBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQsIHRoZSBzcGVj
aWZpY2F0aW9ucyBzYXkgdG8gbWFyayBpdCBwYXJzZXItaW5zZXJ0ZWQgYW5kIGFscmVhZHktc3Rh
cnRlZCBhbmQgbGF0ZXIgdW5tYXJrIHRoZW0uCkBAIC0yNjgsMTQgKzMxOSwxNiBAQCBQYXNzUmVm
UHRyPEVsZW1lbnQ+IEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50
VGFzazo6ZG9QZXJmb3JtVAogICAgIFJlZlB0cjxIVE1MU2NyaXB0RWxlbWVudD4gZWxlbWVudCA9
IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjpzY3JpcHRUYWcsIGN1cnJlbnRO
b2RlLT5kb2N1bWVudCgpLCBwYXJzZXJJbnNlcnRlZCwgYWxyZWFkeVN0YXJ0ZWQpOwogICAgIGlm
IChmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gIT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50
KQogICAgICAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVz
KCksIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVs
ZWFzZSgpOworCisgICAgZWxlbWVudFByb3h5LT5zZXRFbGVtZW50KGVsZW1lbnQucmVsZWFzZSgp
KTsKIH0KIAotUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IEhUTUxQYXJzZXJET01NdXRhdGlv
bkNyZWF0ZUhUTUxIdG1sRWxlbWVudFRhc2s6OmRvUGVyZm9ybVRhc2soRG9jdW1lbnQqIGRvY3Vt
ZW50LCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
ZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25D
cmVhdGVIVE1MSHRtbEVsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKEhUTUxIdG1sRWxlbWVudFBy
b3h5KiBlbGVtZW50UHJveHksIERvY3VtZW50KiBkb2N1bWVudCwgQXRvbWljSFRNTFRva2VuKiB0
b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbikKIHsKICAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEh0bWxF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0
ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAg
ICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CisKKyAgICBlbGVtZW50UHJveHktPnNldEVsZW1l
bnQoZWxlbWVudC5yZWxlYXNlKCkpOwogfQogCiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrOjp+
SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzaygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmgKaW5kZXggZTMxZmU4YjNjZjM3
Yzc2Y2EzZTgwNjIxNzI0ZTA1MzQ1ZGVmNTQ2My4uMjE4OGFmM2QwNzYzYjg1YzM1ZmU5MDI3NzA3
MTI2YTU2ZWY4ODg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFBhcnNlckRPTU11dGF0aW9uVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxUb2tlbi5oIgorI2luY2x1ZGUgIk5vZGVQcm94eS5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtODMsMTIgKzg0
LDEyIEBAIHByaXZhdGU6CiAKIGNsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2lu
Z0NoaWxkcmVuVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25CZWdpblBhcnNp
bmdDaGlsZHJlblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlUHJveHk+IG5vZGUpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2luZ0NoaWxkcmVu
VGFzayhub2RlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhOb2Rl
Kik7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhOb2RlUHJveHkqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpAQCAtOTYsMjMgKzk3LDIzIEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJz
aW5nQ2hpbGRyZW5UYXNrKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKKyAgICBIVE1MUGFyc2VyRE9N
TXV0YXRpb25CZWdpblBhcnNpbmdDaGlsZHJlblRhc2soUGFzc1JlZlB0cjxOb2RlUHJveHk+IG5v
ZGUpCiAgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhCZWdpblBhcnNpbmdDaGls
ZHJlbikKICAgICAgICAgLCBtX25vZGUobm9kZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRy
PE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZVByb3h5PiBtX25vZGU7CiB9OwogCiBjbGFz
cyBIVE1MUGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrIDogcHVibGlj
IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRhc2s+IGNyZWF0
ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNl
ckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8
Tm9kZVByb3h5PiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
UGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrKG5vZGUpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBkb1BlcmZvcm1UYXNrKE5vZGVQcm94eSopOwogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKCkKICAgICB7CkBAIC0xMjAsMjMgKzEyMSwyMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRhc2so
UGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBh
cnNpbmdDaGlsZHJlblRhc2soUGFzc1JlZlB0cjxOb2RlUHJveHk+IG5vZGUpCiAgICAgICAgIDog
SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhGaW5pc2hQYXJzaW5nQ2hpbGRyZW4pCiAgICAgICAg
ICwgbV9ub2RlKG5vZGUpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7
CisgICAgUmVmUHRyPE5vZGVQcm94eT4gbV9ub2RlOwogfTsKIAogY2xhc3MgSFRNTFBhcnNlckRP
TU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRh
dGlvblRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01N
dXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIGxhenlBdHRhY2gpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRh
Y2hUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IHBhcmVudCwgUGFz
c1JlZlB0cjxOb2RlUHJveHk+IGNoaWxkLCBib29sIGxhenlBdHRhY2gpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0
YWNoVGFzayhwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBwYXJlbnQsIE5vZGUqIGNoaWxkLCBi
b29sIGxhenlBdHRhY2gpOworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soQ29udGFpbmVy
Tm9kZVByb3h5KiBwYXJlbnQsIE5vZGVQcm94eSogY2hpbGQsIGJvb2wgbGF6eUF0dGFjaCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQogICAgIHsKQEAgLTE0NCw3ICsxNDUsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkFk
ZENoaWxkQW5kQXR0YWNoVGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgUGFz
c1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoKQorICAgIEhUTUxQYXJzZXJET01N
dXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94
eT4gcGFyZW50LCBQYXNzUmVmUHRyPE5vZGVQcm94eT4gY2hpbGQsIGJvb2wgbGF6eUF0dGFjaCkK
ICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKEFkZENoaWxkQW5kQXR0YWNoKQog
ICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKICAgICAgICAgLCBtX2NoaWxkKGNoaWxkKQpAQCAt
MTUzLDE5ICsxNTQsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IG1fcGFyZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX2NoaWxkOworICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlUHJveHk+IG1fcGFyZW50OworICAgIFJlZlB0cjxOb2RlUHJveHk+
IG1fY2hpbGQ7CiAgICAgYm9vbCBtX2xhenlBdHRhY2g7CiB9OwogCiBjbGFzcyBIVE1MUGFyc2Vy
RE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9N
TXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9t
UGFyZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZVByb3h5PiBub2RlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9t
UGFyZW50VGFzayhub2RlKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFz
ayhOb2RlKik7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhOb2RlUHJveHkqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpAQCAtMTczLDIzICsxNzQsMjMg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25S
ZW1vdmVGcm9tUGFyZW50VGFzayhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgSFRNTFBhcnNl
ckRPTU11dGF0aW9uUmVtb3ZlRnJvbVBhcmVudFRhc2soUGFzc1JlZlB0cjxOb2RlUHJveHk+IG5v
ZGUpCiAgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhSZW1vdmVGcm9tUGFyZW50
KQogICAgICAgICAsIG1fbm9kZShub2RlKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8Tm9k
ZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlUHJveHk+IG1fbm9kZTsKIH07CiAKIGNsYXNzIEhU
TUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50VGFzayA6IHB1Ymxp
YyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5ld1BhcmVudCwgUGFzc1JlZlB0cjxD
b250YWluZXJOb2RlPiBvbGRQYXJlbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNl
ckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxDb250YWluZXJOb2RlUHJveHk+IG5ld1BhcmVudCwgUGFzc1JlZlB0cjxDb250YWluZXJO
b2RlUHJveHk+IG9sZFBhcmVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SFRNTFBhcnNlckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrKG5ld1Bh
cmVudCwgb2xkUGFyZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFz
ayhDb250YWluZXJOb2RlKiBuZXdQYXJlbnQsIENvbnRhaW5lck5vZGUqIG9sZFBhcmVudCk7Cisg
ICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlUHJveHkqIG5ld1BhcmVu
dCwgQ29udGFpbmVyTm9kZVByb3h5KiBvbGRQYXJlbnQpOwogCiAgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKCkKICAgICB7CkBAIC0xOTcsMjUgKzE5OCwyNSBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3
UGFyZW50VGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5ld1BhcmVudCwgUGFzc1JlZlB0
cjxDb250YWluZXJOb2RlPiBvbGRQYXJlbnQpCisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uTW92
ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5
PiBuZXdQYXJlbnQsIFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBvbGRQYXJlbnQpCiAg
ICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhNb3ZlQWxsQ2hpbGRyZW5Ub05ld1Bh
cmVudCkKICAgICAgICAgLCBtX25ld1BhcmVudChuZXdQYXJlbnQpCiAgICAgICAgICwgbV9vbGRQ
YXJlbnQob2xkUGFyZW50KQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gbV9uZXdQYXJlbnQ7Ci0gICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fb2xkUGFyZW50Owor
ICAgIFJlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IG1fbmV3UGFyZW50OworICAgIFJlZlB0cjxD
b250YWluZXJOb2RlUHJveHk+IG1fb2xkUGFyZW50OwogfTsKIAogY2xhc3MgSFRNTFBhcnNlckRP
TU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRyZW5UYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRh
dGlvblRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01N
dXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gbm9kZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25S
ZW1vdmVBbGxDaGlsZHJlblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94
eT4gbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRP
TU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRyZW5UYXNrKG5vZGUpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCBk
b1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGVQcm94eSopOwogCiAgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKCkKICAgICB7CkBAIC0yMjMsMjMgKzIyNCwyMyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFz
ayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUpCisgICAgSFRNTFBhcnNlckRPTU11dGF0
aW9uUmVtb3ZlQWxsQ2hpbGRyZW5UYXNrKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBu
b2RlKQogICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soUmVtb3ZlQWxsQ2hpbGRy
ZW4pCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gbV9u
b2RlOwogfTsKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzayA6
IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRBdHRyaWJ1dGVUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxl
bWVudFByb3h5PiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxQYXJzZXJET01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2soZWxlbWVudCwgYXR0cmlidXRl
LCB2YWx1ZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVu
dCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50UHJveHkqLCBjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwog
CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKICAgICB7CkBAIC0yNDcsNyArMjQ4LDcg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25T
ZXRBdHRyaWJ1dGVUYXNrKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIEhUTUxQ
YXJzZXJET01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2soUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+
IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKFNldEF0dHJp
YnV0ZSkKICAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBtX2F0dHJpYnV0
ZShhdHRyaWJ1dGUpCkBAIC0yNTUsMTkgKzI1NiwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICB9
CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFJlZlB0cjxFbGVtZW50UHJv
eHk+IG1fZWxlbWVudDsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyBtX3ZhbHVlOwogfTsKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11
dGF0aW9uU2V0SW5zZXJ0ZWRCeVBhcnNlclRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0
aW9uVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11
dGF0aW9uU2V0SW5zZXJ0ZWRCeVBhcnNlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxIdG1s
RWxlbWVudD4gZWxlbWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0
YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SFRNTEh0bWxF
bGVtZW50UHJveHk+IGVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxQYXJzZXJET01NdXRhdGlvblNldEluc2VydGVkQnlQYXJzZXJUYXNrKGVsZW1lbnQpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKEhUTUxIdG1sRWxlbWVudCop
OworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soSFRNTEh0bWxFbGVtZW50UHJveHkqKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpAQCAtMjc1LDEzICsyNzYs
MTMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIVE1MUGFyc2VyRE9NTXV0YXRp
b25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzayhQYXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gZWxl
bWVudCkKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzayhQ
YXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudFByb3h5PiBlbGVtZW50KQogICAgICAgICA6IEhUTUxQ
YXJzZXJET01NdXRhdGlvblRhc2soU2V0SW5zZXJ0ZWRCeVBhcnNlcikKICAgICAgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVu
dD4gbV9lbGVtZW50OworICAgIFJlZlB0cjxIVE1MSHRtbEVsZW1lbnRQcm94eT4gbV9lbGVtZW50
OwogfTsKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1l
bnRBdmFpbGFibGVUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgewpAQCAt
MzEwLDEyICszMTEsMTIgQEAgcHJpdmF0ZToKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9u
U2V0RGVtb3RlZFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0RGVtb3Rl
ZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgYm9vbCBpc0Rl
bW90ZWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0RGVt
b3RlZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudFByb3h5PiBmb3JtLCBi
b29sIGlzRGVtb3RlZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFBh
cnNlckRPTU11dGF0aW9uU2V0RGVtb3RlZFRhc2soZm9ybSwgaXNEZW1vdGVkKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhIVE1MRm9ybUVsZW1lbnQqLCBib29sIGlz
RGVtb3RlZCk7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhIVE1MRm9ybUVsZW1lbnRQ
cm94eSosIGJvb2wgaXNEZW1vdGVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
CiAgICAgewpAQCAtMzIzLDI1ICszMjQsMjUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVkVGFzayhQYXNzUmVmUHRyPEhUTUxG
b3JtRWxlbWVudD4gZm9ybSwgYm9vbCBpc0RlbW90ZWQpCisgICAgSFRNTFBhcnNlckRPTU11dGF0
aW9uU2V0RGVtb3RlZFRhc2soUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnRQcm94eT4gZm9ybSwg
Ym9vbCBpc0RlbW90ZWQpCiAgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhTZXRE
ZW1vdGVkKQogICAgICAgICAsIG1fZm9ybShmb3JtKQogICAgICAgICAsIG1faXNEZW1vdGVkKGlz
RGVtb3RlZCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9m
b3JtOworICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnRQcm94eT4gbV9mb3JtOwogICAgIGJvb2wg
bV9pc0RlbW90ZWQ7CiB9OwogCiBjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25NZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0
aW9uVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11
dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrPiBjcmVhdGUoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9r
ZW4pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRy
aWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50
UHJveHk+IGVsZW1lbnQsIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiB0b2tlbikKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VB
dHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrKGVsZW1lbnQsIHRva2VuKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50KiwgQXRvbWljSFRNTFRv
a2VuKik7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50UHJveHkqLCBBdG9t
aWNIVE1MVG9rZW4qKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpA
QCAtMzQ5LDE0ICszNTAsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIVE1M
UGFyc2VyRE9NTXV0YXRpb25NZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2so
UGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4g
dG9rZW4pCisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2Vu
SW50b0VsZW1lbnRUYXNrKFBhc3NSZWZQdHI8RWxlbWVudFByb3h5PiBlbGVtZW50LCBQYXNzUmVm
UHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4pCiAgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0
aW9uVGFzayhNZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCkKICAgICAgICAgLCBt
X2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBtX3Rva2VuKHRva2VuKQogICAgIHsKICAgICB9
CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFJlZlB0cjxFbGVtZW50UHJv
eHk+IG1fZWxlbWVudDsKICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBtX3Rva2VuOwogfTsK
IApAQCAtNDEyLDIwICs0MTMsMjAgQEAgcHJpdmF0ZToKIAogY2xhc3MgSFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0VGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIFBhc3NSZWZQdHI8
Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4
Y2VlZGVkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gcGFyZW50LCBQYXNz
UmVmUHRyPE5vZGVQcm94eT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcsIGJvb2wgbWF4aW11bURP
TVRyZWVEZXB0aEV4Y2VlZGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
VE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrKHBhcmVudCwgY2hpbGQsIHNlbGZDbG9zaW5n
LCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBj
aGlsZCwgYm9vbCBzZWxmQ2xvc2luZywgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQp
OworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZVByb3h5KiBwYXJl
bnQsIE5vZGVQcm94eSogY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcsIGJvb2wgbWF4aW11bURPTVRy
ZWVEZXB0aEV4Y2VlZGVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAg
ewotICAgICAgICBkb1BlcmZvcm1UYXNrKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkLnJlbGVhc2Uo
KSwgbV9zZWxmQ2xvc2luZywgbV9tYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpOworICAgICAg
ICBkb1BlcmZvcm1UYXNrKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkLmdldCgpLCBtX3NlbGZDbG9z
aW5nLCBtX21heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCk7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJO
b2RlPiBwYXJlbnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcsIGJv
b2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQorICAgIEhUTUxQYXJzZXJET01NdXRhdGlv
bkluc2VydFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IHBhcmVudCwgUGFzc1Jl
ZlB0cjxOb2RlUHJveHk+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nLCBib29sIG1heGltdW1ET01U
cmVlRGVwdGhFeGNlZWRlZCkKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKElu
c2VydCkKICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgICwgbV9jaGlsZChjaGls
ZCkKQEAgLTQzNCw4ICs0MzUsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbV9wYXJlbnQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fY2hpbGQ7Cisg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gbV9wYXJlbnQ7CisgICAgUmVmUHRyPE5vZGVQ
cm94eT4gbV9jaGlsZDsKIAogICAgIGJvb2wgbV9zZWxmQ2xvc2luZzsKICAgICBib29sIG1fbWF4
aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkOwpAQCAtNDQzLDIwICs0NDQsMjAgQEAgcHJpdmF0ZToK
IAogY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUYXNrIDog
cHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gdGFibGUsIFBhc3NSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3QsIGJvb2wgaXNQYXJz
aW5nRnJhZ21lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFy
ZW50ZWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+IHRhYmxlLCBQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGVQcm94eT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5v
ZGVQcm94eT4gcm9vdCwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgUGFzc1JlZlB0cjxOb2RlUHJv
eHk+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRhc2sodGFi
bGUsIHRhYmxlTmV4dCwgcm9vdCwgaXNQYXJzaW5nRnJhZ21lbnQsIGNoaWxkLCBzZWxmQ2xvc2lu
ZykpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVudCogdGFi
bGUsIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9kZSogcm9vdCwgYm9vbCBp
c1BhcnNpbmdGcmFnbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2lu
Zyk7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50UHJveHkqIHRhYmxlLCBD
b250YWluZXJOb2RlUHJveHkqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9kZVByb3h5KiByb290LCBi
b29sIGlzUGFyc2luZ0ZyYWdtZW50LCBOb2RlUHJveHkqIGNoaWxkLCBib29sIHNlbGZDbG9zaW5n
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewotICAgICAgICBkb1Bl
cmZvcm1UYXNrKG1fdGFibGUuZ2V0KCksIG1fdGFibGVOZXh0LmdldCgpLCBtX3Jvb3QuZ2V0KCks
IG1faXNQYXJzaW5nRnJhZ21lbnQsIG1fY2hpbGQucmVsZWFzZSgpLCBtX3NlbGZDbG9zaW5nKTsK
KyAgICAgICAgZG9QZXJmb3JtVGFzayhtX3RhYmxlLmdldCgpLCBtX3RhYmxlTmV4dC5nZXQoKSwg
bV9yb290LmdldCgpLCBtX2lzUGFyc2luZ0ZyYWdtZW50LCBtX2NoaWxkLmdldCgpLCBtX3NlbGZD
bG9zaW5nKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5z
ZXJ0Rm9zdGVyUGFyZW50ZWRUYXNrKFBhc3NSZWZQdHI8RWxlbWVudD4gdGFibGUsIFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJv
b3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQsIGJvb2wg
c2VsZkNsb3NpbmcpCisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50
ZWRUYXNrKFBhc3NSZWZQdHI8RWxlbWVudFByb3h5PiB0YWJsZSwgUGFzc1JlZlB0cjxDb250YWlu
ZXJOb2RlUHJveHk+IHRhYmxlTmV4dCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IHJv
b3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIFBhc3NSZWZQdHI8Tm9kZVByb3h5PiBjaGlsZCwg
Ym9vbCBzZWxmQ2xvc2luZykKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKElu
c2VydEZvc3RlclBhcmVudGVkKQogICAgICAgICAsIG1fdGFibGUodGFibGUpCiAgICAgICAgICwg
bV90YWJsZU5leHQodGFibGVOZXh0KQpAQCAtNDY3LDEwICs0NjgsMTAgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgfQogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fdGFibGU7Ci0gICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IG1fdGFibGVOZXh0OwotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3Jv
b3Q7Ci0gICAgUmVmUHRyPE5vZGU+IG1fY2hpbGQ7CisgICAgUmVmUHRyPEVsZW1lbnRQcm94eT4g
bV90YWJsZTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBtX3RhYmxlTmV4dDsKKyAg
ICBSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBtX3Jvb3Q7CisgICAgUmVmUHRyPE5vZGVQcm94
eT4gbV9jaGlsZDsKIAogICAgIGJvb2wgbV9pc1BhcnNpbmdGcmFnbWVudDsKICAgICBib29sIG1f
c2VsZkNsb3Npbmc7CkBAIC00NzgsMTIgKzQ3OSwxMiBAQCBwcml2YXRlOgogCiBjbGFzcyBIVE1M
UGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0VGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9N
TXV0YXRpb25JbnNlcnRUZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4g
cGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3Ry
aW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZVByb3h5PiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywg
Ym9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2Vl
ZGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnRUZXh0VGFzayhwYXJlbnQsIGNoYXJhY3RlcnMsIHNob3VsZFVzZUF0b21pY1N0
cmluZywgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
Y2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcsIGJvb2wgbWF4aW11bURPTVRy
ZWVEZXB0aEV4Y2VlZGVkKTsKKyAgICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKENvbnRhaW5l
ck5vZGVQcm94eSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxk
VXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQogICAgIHsKQEAgLTQ5MSw3ICs0OTIsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dFRleHRUYXNrKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50LCBjb25zdCBTdHJpbmcm
IGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01U
cmVlRGVwdGhFeGNlZWRlZCkKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0VGFz
ayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gcGFyZW50LCBjb25zdCBTdHJpbmcmIGNo
YXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01UcmVl
RGVwdGhFeGNlZWRlZCkKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKEluc2Vy
dFRleHQpCiAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICAsIG1fY2hhcmFjdGVy
cyhjaGFyYWN0ZXJzKQpAQCAtNTAwLDcgKzUwMSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0K
IAotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3BhcmVudDsKKyAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZVByb3h5PiBtX3BhcmVudDsKIAogICAgIGNvbnN0IFN0cmluZyBtX2NoYXJhY3RlcnM7
CiAgICAgYm9vbCBtX3Nob3VsZFVzZUF0b21pY1N0cmluZzsKQEAgLTUxMCwxMiArNTExLDEyIEBA
IHByaXZhdGU6CiAKIGNsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVu
dGVkVGV4dFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVy
UGFyZW50ZWRUZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gdGFibGUsIFBhc3NS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+
IHJvb3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywg
Ym9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBh
cnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0VGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8RWxlbWVudFByb3h5PiB0YWJsZSwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+
IHRhYmxlTmV4dCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IHJvb3QsIGJvb2wgaXNQ
YXJzaW5nRnJhZ21lbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VB
dG9taWNTdHJpbmcpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJz
ZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGV4dFRhc2sodGFibGUsIHRhYmxlTmV4
dCwgcm9vdCwgaXNQYXJzaW5nRnJhZ21lbnQsIGNoYXJhY3RlcnMsIHNob3VsZFVzZUF0b21pY1N0
cmluZykpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVudCog
dGFibGUsIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9kZSogcm9vdCwgYm9v
bCBpc1BhcnNpbmdGcmFnbWVudCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3Vs
ZFVzZUF0b21pY1N0cmluZyk7CisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50
UHJveHkqIHRhYmxlLCBDb250YWluZXJOb2RlUHJveHkqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9k
ZVByb3h5KiByb290LCBib29sIGlzUGFyc2luZ0ZyYWdtZW50LCBjb25zdCBTdHJpbmcmIGNoYXJh
Y3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKIAogICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCiAgICAgewpAQCAtNTIzLDcgKzUyNCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRU
ZXh0VGFzayhQYXNzUmVmUHRyPEVsZW1lbnQ+IHRhYmxlLCBQYXNzUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHRhYmxlTmV4dCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiByb290LCBib29sIGlzUGFy
c2luZ0ZyYWdtZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxkVXNlQXRv
bWljU3RyaW5nKQorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVk
VGV4dFRhc2soUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+IHRhYmxlLCBQYXNzUmVmUHRyPENvbnRh
aW5lck5vZGVQcm94eT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4g
cm9vdCwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBi
b29sIHNob3VsZFVzZUF0b21pY1N0cmluZykKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRp
b25UYXNrKEluc2VydEZvc3RlclBhcmVudGVkVGV4dCkKICAgICAgICAgLCBtX3RhYmxlKHRhYmxl
KQogICAgICAgICAsIG1fdGFibGVOZXh0KHRhYmxlTmV4dCkKQEAgLTUzNCw5ICs1MzUsOSBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV90YWJsZTsKLSAg
ICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV90YWJsZU5leHQ7Ci0gICAgUmVmUHRyPENvbnRhaW5l
ck5vZGU+IG1fcm9vdDsKKyAgICBSZWZQdHI8RWxlbWVudFByb3h5PiBtX3RhYmxlOworICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlUHJveHk+IG1fdGFibGVOZXh0OworICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlUHJveHk+IG1fcm9vdDsKIAogICAgIGNvbnN0IFN0cmluZyBtX2NoYXJhY3RlcnM7CiAg
ICAgYm9vbCBtX3Nob3VsZFVzZUF0b21pY1N0cmluZzsKQEAgLTU0NiwxMiArNTQ3LDEyIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRUYXNrIDog
cHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY29tbWVudCwg
Ym9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRy
PENvbnRhaW5lck5vZGVQcm94eT4gcGFyZW50LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQsIGJvb2wg
bWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRDb21tZW50VGFzayhwYXJlbnQsIGNv
bW1lbnQsIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcm
IGNvbW1lbnQsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKTsKKyAgICBzdGF0aWMg
dm9pZCBkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGVQcm94eSogcGFyZW50LCBjb25zdCBTdHJp
bmcmIGNvbW1lbnQsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpAQCAtNTU5LDcgKzU2MCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29t
bWVudFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
Y29tbWVudCwgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCisgICAgSFRNTFBhcnNl
ckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJv
eHk+IHBhcmVudCwgY29uc3QgU3RyaW5nJiBjb21tZW50LCBib29sIG1heGltdW1ET01UcmVlRGVw
dGhFeGNlZWRlZCkKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKEluc2VydENv
bW1lbnQpCiAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICAsIG1fY29tbWVudChj
b21tZW50KQpAQCAtNTY3LDcgKzU2OCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3BhcmVudDsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZVByb3h5PiBtX3BhcmVudDsKIAogICAgIGNvbnN0IFN0cmluZyBtX2NvbW1lbnQ7CiAKQEAgLTU3
NiwxMiArNTc3LDEyIEBAIHByaXZhdGU6CiAKIGNsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbklu
c2VydENvbW1lbnRPbkRvY3VtZW50VGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25U
YXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRp
b25JbnNlcnRDb21tZW50T25Eb2N1bWVudFRhc2s+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IENvbnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9u
RG9jdW1lbnRUYXNrPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb250YWluZXJOb2RlUHJv
eHkqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRP
bkRvY3VtZW50VGFzayhkb2N1bWVudCwgYXR0YWNobWVudFJvb3QsIGNvbW1lbnQpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKERvY3VtZW50KiwgQ29udGFpbmVyTm9k
ZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgc3RhdGljIHZv
aWQgZG9QZXJmb3JtVGFzayhEb2N1bWVudCosIENvbnRhaW5lck5vZGVQcm94eSogYXR0YWNobWVu
dFJvb3QsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bVRhc2soKQogICAgIHsKQEAgLTU4OSw3ICs1OTAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRPbkRvY3VtZW50VGFz
ayhEb2N1bWVudCogZG9jdW1lbnQsIENvbnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25z
dCBTdHJpbmcmIGNvbW1lbnQpCisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVu
dE9uRG9jdW1lbnRUYXNrKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZVByb3h5KiBh
dHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQogICAgICAgICA6IEhUTUxQYXJz
ZXJET01NdXRhdGlvblRhc2soSW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQpCiAgICAgICAgICwgbV9k
b2N1bWVudChkb2N1bWVudCkKICAgICAgICAgLCBtX2F0dGFjaG1lbnRSb290KGF0dGFjaG1lbnRS
b290KQpAQCAtNTk4LDE5ICs1OTksMTkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKLSAgICBDb250YWluZXJOb2RlKiBtX2F0dGFjaG1lbnRSb290OworICAg
IENvbnRhaW5lck5vZGVQcm94eSogbV9hdHRhY2htZW50Um9vdDsKIAogICAgIGNvbnN0IFN0cmlu
ZyBtX2NvbW1lbnQ7CiB9OwogCiBjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0
eXBlVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0eXBlVGFz
az4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJv
b3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3Ry
aW5nJiBzeXN0ZW1JZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRp
b25JbnNlcnREb2N0eXBlVGFzaz4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVy
Tm9kZVByb3h5KiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0eXBlVGFzayhk
b2N1bWVudCwgYXR0YWNobWVudFJvb3QsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRG9jdW1lbnQqLCBDb250YWluZXJO
b2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1
YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKTsKKyAgICBzdGF0aWMgdm9pZCBkb1BlcmZv
cm1UYXNrKERvY3VtZW50KiwgQ29udGFpbmVyTm9kZVByb3h5KiBhdHRhY2htZW50Um9vdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5
c3RlbUlkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAgICAgewpAQCAtNjE4
LDcgKzYxOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRP
TU11dGF0aW9uSW5zZXJ0RG9jdHlwZVRhc2soRG9jdW1lbnQqIGRvY3VtZW50LCBDb250YWluZXJO
b2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1
YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQorICAgIEhUTUxQYXJzZXJET01NdXRhdGlv
bkluc2VydERvY3R5cGVUYXNrKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZVByb3h5
KiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHB1Ymxp
Y0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkKQogICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRh
dGlvblRhc2soSW5zZXJ0RG9jdHlwZSkKICAgICAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQog
ICAgICAgICAsIG1fYXR0YWNobWVudFJvb3QoYXR0YWNobWVudFJvb3QpCkBAIC02MjksNyArNjMw
LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBD
b250YWluZXJOb2RlKiBtX2F0dGFjaG1lbnRSb290OworICAgIENvbnRhaW5lck5vZGVQcm94eSog
bV9hdHRhY2htZW50Um9vdDsKIAogICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CiAgICAgY29uc3Qg
U3RyaW5nIG1fcHVibGljSWQ7CkBAIC02MzgsMjYgKzYzOSwyMiBAQCBwcml2YXRlOgogCiBjbGFz
cyBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzayA6IHB1YmxpYyBIVE1MUGFy
c2VyRE9NTXV0YXRpb25UYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
UGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29u
dGFpbmVyTm9kZT4gY3VycmVudE5vZGUsIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiB0b2tl
biwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlRWxlbWVudFRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPEVsZW1lbnRQcm94eT4gZWxlbWVudCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+
IGN1cnJlbnROb2RlLCBQYXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzayhjdXJyZW50Tm9kZSwg
dG9rZW4sIG5hbWVzcGFjZVVSSSwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlRWxlbWVu
dFRhc2soZWxlbWVudCwgY3VycmVudE5vZGUsIHRva2VuLCBuYW1lc3BhY2VVUkksIGZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbikpOwogICAgIH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogY3VycmVudE5vZGUsIEF0b21pY0hU
TUxUb2tlbiosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVudFBy
b3h5KiwgQ29udGFpbmVyTm9kZVByb3h5KiBjdXJyZW50Tm9kZSwgQXRvbWljSFRNTFRva2VuKiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQogICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IENhbid0IHF1ZXVlIGVsZW1lbnQgY3JlYXRpb24uIEFkZCBub2RlIHByb3h5IGNs
YXNzZXMgaW4gZm9sbG93LXVwIGNvbW1pdHMuCi0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVt
ZW50ID0gZG9QZXJmb3JtVGFzayhtX2N1cnJlbnROb2RlLmdldCgpLCBtX3Rva2VuLmdldCgpLCBt
X25hbWVzcGFjZVVSSSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKGVsZW1lbnQsIGVsZW1lbnQpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBkb1BlcmZvcm1UYXNr
KG1fZWxlbWVudC5nZXQoKSwgbV9jdXJyZW50Tm9kZS5nZXQoKSwgbV90b2tlbi5nZXQoKSwgbV9u
YW1lc3BhY2VVUkksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlRWxlbWVudFRhc2soUGFzc1Jl
ZlB0cjxDb250YWluZXJOb2RlPiBjdXJyZW50Tm9kZSwgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9r
ZW4+IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikKKyAgICBIVE1MUGFy
c2VyRE9NTXV0YXRpb25DcmVhdGVFbGVtZW50VGFzayhQYXNzUmVmUHRyPEVsZW1lbnRQcm94eT4g
ZWxlbWVudCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+IGN1cnJlbnROb2RlLCBQYXNz
UmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKQogICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soQ3JlYXRlRWxlbWVu
dCkKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBtX2N1cnJlbnROb2Rl
KGN1cnJlbnROb2RlKQogICAgICAgICAsIG1fdG9rZW4odG9rZW4pCiAgICAgICAgICwgbV9uYW1l
c3BhY2VVUkkobmFtZXNwYWNlVVJJKQpAQCAtNjY1LDcgKzY2Miw4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX2N1cnJlbnROb2RlOworICAg
IFJlZlB0cjxFbGVtZW50UHJveHk+IG1fZWxlbWVudDsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZVByb3h5PiBtX2N1cnJlbnROb2RlOwogICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IG1fdG9r
ZW47CiAgICAgY29uc3QgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOwogICAgIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbjsKQEAgLTY3
MywyNiArNjcxLDIyIEBAIHByaXZhdGU6CiAKIGNsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkNy
ZWF0ZUhUTUxFbGVtZW50VGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVh
dGVIVE1MRWxlbWVudFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IGN1cnJl
bnROb2RlLCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgUGFzc1JlZlB0cjxBdG9t
aWNIVE1MVG9rZW4+IHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01N
dXRhdGlvbkNyZWF0ZUhUTUxFbGVtZW50VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudFBy
b3h5PiBlbGVtZW50LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gY3VycmVudE5vZGUs
IFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50UHJveHk+IGZvcm0sIFBhc3NSZWZQdHI8QXRvbWlj
SFRNTFRva2VuPiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRN
TFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNrKGN1cnJlbnROb2RlLCBmb3Jt
LCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTEVsZW1lbnRUYXNrKGVs
ZW1lbnQsIGN1cnJlbnROb2RlLCBmb3JtLCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudD4gZG9QZXJmb3Jt
VGFzayhDb250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSwgSFRNTEZvcm1FbGVtZW50KiwgQXRvbWlj
SFRNTFRva2VuKiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBzdGF0aWMgdm9p
ZCBkb1BlcmZvcm1UYXNrKEVsZW1lbnRQcm94eSosIENvbnRhaW5lck5vZGVQcm94eSogY3VycmVu
dE5vZGUsIEhUTUxGb3JtRWxlbWVudFByb3h5KiwgQXRvbWljSFRNTFRva2VuKiwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCiAg
ICAgewotICAgICAgICAvLyBGSVhNRTogQ2FuJ3QgcXVldWUgZWxlbWVudCBjcmVhdGlvbi4gQWRk
IG5vZGUgcHJveHkgY2xhc3NlcyBpbiBmb2xsb3ctdXAgY29tbWl0cy4KLSAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQgPSBkb1BlcmZvcm1UYXNrKG1fY3VycmVudE5vZGUuZ2V0KCksIG1f
Zm9ybS5nZXQoKSwgbV90b2tlbi5nZXQoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24p
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVsZW1lbnQsIGVsZW1lbnQpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBk
b1BlcmZvcm1UYXNrKG1fZWxlbWVudC5nZXQoKSwgbV9jdXJyZW50Tm9kZS5nZXQoKSwgbV9mb3Jt
LmdldCgpLCBtX3Rva2VuLmdldCgpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxFbGVt
ZW50VGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IGN1cnJlbnROb2RlLCBQYXNzUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4gZm9ybSwgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2Vu
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
KQorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxFbGVtZW50VGFzayhQYXNzUmVm
UHRyPEVsZW1lbnRQcm94eT4gZWxlbWVudCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlUHJveHk+
IGN1cnJlbnROb2RlLCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudFByb3h5PiBmb3JtLCBQYXNz
UmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgICAgIDogSFRNTFBhcnNlckRPTU11
dGF0aW9uVGFzayhDcmVhdGVIVE1MRWxlbWVudCkKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKICAgICAgICAgLCBtX2N1cnJlbnROb2RlKGN1cnJlbnROb2RlKQogICAgICAgICAsIG1fZm9y
bShmb3JtKQogICAgICAgICAsIG1fdG9rZW4odG9rZW4pCkBAIC03MDAsMzQgKzY5NCwzMSBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9jdXJy
ZW50Tm9kZTsKLSAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2Zvcm07CisgICAgUmVmUHRy
PEVsZW1lbnRQcm94eT4gbV9lbGVtZW50OworICAgIFJlZlB0cjxDb250YWluZXJOb2RlUHJveHk+
IG1fY3VycmVudE5vZGU7CisgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudFByb3h5PiBtX2Zvcm07
CiAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gbV90b2tlbjsKICAgICBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb247CiB9OwogCiBjbGFz
cyBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MU2NyaXB0RWxlbWVudFRhc2sgOiBwdWJs
aWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBjdXJyZW50Tm9kZSwgUGFzc1JlZlB0cjxB
dG9taWNIVE1MVG9rZW4+IHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIGlzUGFyc2luZ0ZyYWdtZW50KQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudFByb3h5PiBlbGVtZW50LCBQYXNzUmVmUHRy
PENvbnRhaW5lck5vZGVQcm94eT4gY3VycmVudE5vZGUsIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRv
a2VuPiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1l
bnRUYXNrKGN1cnJlbnROb2RlLCB0b2tlbiwgZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBp
c1BhcnNpbmdGcmFnbWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJz
ZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxTY3JpcHRFbGVtZW50VGFzayhlbGVtZW50LCBjdXJyZW50
Tm9kZSwgdG9rZW4sIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiwgaXNQYXJzaW5nRnJhZ21l
bnQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbGVtZW50PiBkb1BlcmZvcm1U
YXNrKENvbnRhaW5lck5vZGUqIGN1cnJlbnROb2RlLCBBdG9taWNIVE1MVG9rZW4qLCBGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24sIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQpOworICAgIHN0YXRp
YyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVudFByb3h5KiwgQ29udGFpbmVyTm9kZVByb3h5KiBj
dXJyZW50Tm9kZSwgQXRvbWljSFRNTFRva2VuKiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
LCBib29sIGlzUGFyc2luZ0ZyYWdtZW50KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFz
aygpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogQ2FuJ3QgcXVldWUgZWxlbWVudCBjcmVhdGlv
bi4gQWRkIG5vZGUgcHJveHkgY2xhc3NlcyBpbiBmb2xsb3ctdXAgY29tbWl0cy4KLSAgICAgICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBkb1BlcmZvcm1UYXNrKG1fY3VycmVudE5vZGUuZ2V0
KCksIG1fdG9rZW4uZ2V0KCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBtX2lzUGFy
c2luZ0ZyYWdtZW50KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChlbGVtZW50LCBlbGVtZW50KTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICAgICAgZG9QZXJmb3JtVGFzayhtX2VsZW1lbnQuZ2V0KCksIG1fY3VycmVudE5vZGUu
Z2V0KCksIG1fdG9rZW4uZ2V0KCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBtX2lz
UGFyc2luZ0ZyYWdtZW50KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSFRNTFBhcnNlckRPTU11
dGF0aW9uQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnRUYXNrKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gY3VycmVudE5vZGUsIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiB0b2tlbiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiwgYm9vbCBp
c1BhcnNpbmdGcmFnbWVudCkKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MU2Ny
aXB0RWxlbWVudFRhc2soUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+IGVsZW1lbnQsIFBhc3NSZWZQ
dHI8Q29udGFpbmVyTm9kZVByb3h5PiBjdXJyZW50Tm9kZSwgUGFzc1JlZlB0cjxBdG9taWNIVE1M
VG9rZW4+IHRva2VuLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gZnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uLCBib29sIGlzUGFyc2luZ0ZyYWdtZW50KQogICAgICAgICA6IEhUTUxQYXJz
ZXJET01NdXRhdGlvblRhc2soQ3JlYXRlSFRNTFNjcmlwdEVsZW1lbnQpCisgICAgICAgICwgbV9l
bGVtZW50KGVsZW1lbnQpCiAgICAgICAgICwgbV9jdXJyZW50Tm9kZShjdXJyZW50Tm9kZSkKICAg
ICAgICAgLCBtX3Rva2VuKHRva2VuKQogICAgICAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikKQEAgLTczNSw3ICs3MjYsOCBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9jdXJy
ZW50Tm9kZTsKKyAgICBSZWZQdHI8RWxlbWVudFByb3h5PiBtX2VsZW1lbnQ7CisgICAgUmVmUHRy
PENvbnRhaW5lck5vZGVQcm94eT4gbV9jdXJyZW50Tm9kZTsKICAgICBSZWZQdHI8QXRvbWljSFRN
TFRva2VuPiBtX3Rva2VuOwogICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbjsKICAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CkBA
IC03NDMsMzIgKzczNSwyOSBAQCBwcml2YXRlOgogCiBjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRp
b25DcmVhdGVIVE1MSHRtbEVsZW1lbnRUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlv
blRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRh
dGlvbkNyZWF0ZUhUTUxIdG1sRWxlbWVudFRhc2s+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQs
IFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uIGZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVIVE1MSHRtbEVsZW1lbnRUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnRQcm94eT4gZWxlbWVudCwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBQYXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkNyZWF0ZUhUTUxIdG1sRWxl
bWVudFRhc2soZG9jdW1lbnQsIHRva2VuLCBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25DcmVhdGVI
VE1MSHRtbEVsZW1lbnRUYXNrKGVsZW1lbnQsIGRvY3VtZW50LCB0b2tlbiwgZnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEh0
bWxFbGVtZW50PiBkb1BlcmZvcm1UYXNrKERvY3VtZW50KiwgQXRvbWljSFRNTFRva2VuKiwgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNr
KEhUTUxIdG1sRWxlbWVudFByb3h5KiwgRG9jdW1lbnQqLCBBdG9taWNIVE1MVG9rZW4qLCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDYW4ndCBxdWV1ZSBlbGVtZW50IGNyZWF0aW9u
LiBBZGQgbm9kZSBwcm94eSBjbGFzc2VzIGluIGZvbGxvdy11cCBjb21taXRzLgotICAgICAgICBS
ZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBlbGVtZW50ID0gZG9QZXJmb3JtVGFzayhtX2RvY3VtZW50
LCBtX3Rva2VuLmdldCgpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQoZWxlbWVudCwgZWxlbWVudCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGRvUGVyZm9ybVRh
c2sobV9lbGVtZW50LmdldCgpLCBtX2RvY3VtZW50LCBtX3Rva2VuLmdldCgpLCBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEhUTUxQYXJzZXJE
T01NdXRhdGlvbkNyZWF0ZUhUTUxIdG1sRWxlbWVudFRhc2soRG9jdW1lbnQqIGRvY3VtZW50LCBQ
YXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pCisgICAgSFRNTFBhcnNlckRPTU11dGF0
aW9uQ3JlYXRlSFRNTEh0bWxFbGVtZW50VGFzayhQYXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudFBy
b3h5PiBlbGVtZW50LCBEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8QXRvbWljSFRNTFRv
a2VuPiB0b2tlbiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbikKICAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKENyZWF0ZUhU
TUxIdG1sRWxlbWVudCkKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQogICAgICAgICAsIG1fdG9rZW4odG9rZW4pCiAgICAgICAgICwg
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
KQogICAgIHsKICAgICB9CiAKKyAgICBSZWZQdHI8SFRNTEh0bWxFbGVtZW50UHJveHk+IG1fZWxl
bWVudDsKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBSZWZQdHI8QXRvbWljSFRNTFRv
a2VuPiBtX3Rva2VuOwogICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTdGFja0l0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTdGFj
a0l0ZW0uaAppbmRleCAzNzFhYzQzZjQ0OGFkNWUyZTY3NDljNGY1NTkxNWZiYzk1OTJlZDJhLi40
YTM5YzVjMjA0MjQ1ZWY1YTQxNDBlNTFkNWM2MjM4NDExYTU1NjExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUb2tl
bi5oIgorI2luY2x1ZGUgIk5vZGVQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zNiw4ICszNyw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29udGFpbmVyTm9kZTsKLQogY2xhc3MgSFRNTFN0YWNrSXRl
bSA6IHB1YmxpYyBSZWZDb3VudGVkPEhUTUxTdGFja0l0ZW0+IHsKIHB1YmxpYzoKICAgICBlbnVt
IEl0ZW1UeXBlIHsKQEAgLTQ2LDE5ICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8v
IFVzZWQgYnkgZG9jdW1lbnQgZnJhZ21lbnQgbm9kZSBhbmQgY29udGV4dCBlbGVtZW50LgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRh
aW5lck5vZGU+IG5vZGUsIEl0ZW1UeXBlIHR5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBub2RlLCBJ
dGVtVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MU3Rh
Y2tJdGVtKG5vZGUsIHR5cGUpKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGJ5IEhUTUxFbGVtZW50
U3RhY2sgYW5kIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTFN0YWNrSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwg
UGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVBy
b3h5PiBub2RlLCBQYXNzUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFN0YWNrSXRlbShub2RlLCB0b2tl
biwgbmFtZXNwYWNlVVJJKSk7CiAgICAgfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRvRWxlbWVudChtX25vZGUuZ2V0KCkpOyB9Ci0gICAgQ29udGFpbmVyTm9kZSog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIEVsZW1lbnRQcm94eSog
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRQcm94eSo+KG1fbm9k
ZS5nZXQoKSk7IH0KKyAgICBDb250YWluZXJOb2RlUHJveHkqIG5vZGUoKSBjb25zdCB7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KIAogICAgIGJvb2wgaXNEb2N1bWVudEZyYWdtZW50Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZTsgfQogICAgIGJvb2wgaXNFbGVt
ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGU7IH0KQEAg
LTgwLDcgKzc5LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIVE1MU3RhY2tJ
dGVtKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgSXRlbVR5cGUgdHlwZSkKKyAgICBI
VE1MU3RhY2tJdGVtKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBub2RlLCBJdGVtVHlw
ZSB0eXBlKQogICAgICAgICA6IG1fbm9kZShub2RlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CkBAIC05MywxNCArOTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEl0ZW1Gb3JDb250ZXh0RWxlbWVudDoKICAgICAgICAgICAgIC8vIENyZWF0
ZSBhIGZha2UgdG9rZW4gZm9yIGEgY29udGV4dCBlbGVtZW50IGZvciB0aGUgc2FtZSByZWFzb24g
YXMgYWJvdmUuCi0gICAgICAgICAgICBtX3Rva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUo
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBtX25vZGUtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
ICAgIG1fbmFtZXNwYWNlVVJJID0gbV9ub2RlLT5uYW1lc3BhY2VVUkkoKTsKKyAgICAgICAgICAg
IG1fdG9rZW4gPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRU
YWcsIG1fbm9kZS0+bm9kZSgpLT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBtX25hbWVzcGFj
ZVVSSSA9IG1fbm9kZS0+bm9kZSgpLT5uYW1lc3BhY2VVUkkoKTsKICAgICAgICAgICAgIG1faXNE
b2N1bWVudEZyYWdtZW50Tm9kZSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBIVE1MU3RhY2tJdGVtKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4g
bm9kZSwgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgSFRN
TFN0YWNrSXRlbShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGVQcm94eT4gbm9kZSwgUGFzc1JlZlB0
cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCiAgICAgICAgIDogbV9ub2RlKG5vZGUp
CiAgICAgICAgICwgbV90b2tlbih0b2tlbikKICAgICAgICAgLCBtX25hbWVzcGFjZVVSSShuYW1l
c3BhY2VVUkkpCkBAIC0xMDgsNyArMTA3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0g
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZVByb3h5PiBtX25vZGU7CiAKICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBtX3Rva2VuOwog
ICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDkwZjI4OTIzNWQzYWUzYTcxNWJjNjdi
N2MyZTEyOGE1NDFkOTJjZmMuLjVmYzg0ZGYxYWIyZDkzZmMwZTNlZWRlMDU1OGZmZDBlNDJkMjE0
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNw
cApAQCAtMzgyLDkgKzM4MiwxMSBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihI
VE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVudCogZgogICAgICAgICAv
LyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRp
cGFnZS90aGUtZW5kLmh0bWwjZnJhZ21lbnQtY2FzZQogICAgICAgICAvLyBGb3IgZWZmaWNpZW5j
eSwgd2Ugc2tpcCBzdGVwIDQuMiAoIkxldCByb290IGJlIGEgbmV3IGh0bWwgZWxlbWVudCB3aXRo
IG5vIGF0dHJpYnV0ZXMiKQogICAgICAgICAvLyBhbmQgaW5zdGVhZCB1c2UgdGhlIERvY3VtZW50
RnJhZ21lbnQgYXMgYSByb290IG5vZGUuCi0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
cHVzaFJvb3ROb2RlKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShmcmFnbWVudCwgSFRNTFN0YWNrSXRl
bTo6SXRlbUZvckRvY3VtZW50RnJhZ21lbnROb2RlKSk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cHVzaFJvb3ROb2RlKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShDb250YWluZXJOb2Rl
UHJveHk6OmNyZWF0ZShmcmFnbWVudCksIEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JEb2N1bWVudEZy
YWdtZW50Tm9kZSkpOwogICAgICAgICByZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCk7
Ci0gICAgICAgIG1fdHJlZS5zZXRGb3JtKGNsb3Nlc3RGb3JtQW5jZXN0b3IoY29udGV4dEVsZW1l
bnQpKTsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGNsb3Nlc3RGb3Jt
QW5jZXN0b3IoY29udGV4dEVsZW1lbnQpOworICAgICAgICBpZiAoZm9ybUVsZW1lbnQpCisgICAg
ICAgICAgICBtX3RyZWUuc2V0Rm9ybShIVE1MRm9ybUVsZW1lbnRQcm94eTo6Y3JlYXRlKGZvcm1F
bGVtZW50KSk7CiAgICAgfQogfQogCkBAIC00MzAsNyArNDMyLDkgQEAgUGFzc1JlZlB0cjxFbGVt
ZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGEKICAgICAvLyBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgogICAgIHNjcmlwdFN0YXJ0
UG9zaXRpb24gPSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb247CiAgICAgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gdW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCk7Ci0g
ICAgcmV0dXJuIG1fc2NyaXB0VG9Qcm9jZXNzLnJlbGVhc2UoKTsKKyAgICBSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCA9IG1fc2NyaXB0VG9Qcm9jZXNzLT5lbGVtZW50KCk7CisgICAgbV9z
Y3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgpOworICAgIHJldHVybiBzY3JpcHRFbGVtZW50LnJlbGVh
c2UoKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4o
SFRNTFRva2VuJiByYXdUb2tlbikKQEAgLTg1NSw3ICs4NTksNyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYVRhZykgewot
ICAgICAgICBFbGVtZW50KiBhY3RpdmVBVGFnID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpLT5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShhVGFnLmxvY2FsTmFtZSgpKTsK
KyAgICAgICAgRWxlbWVudFByb3h5KiBhY3RpdmVBVGFnID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLT5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShhVGFnLmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgaWYgKGFjdGl2ZUFUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoYVRhZyk7CkBAIC0xNDkyLDcg
KzE0OTYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB9CiAKIC8vIEZJWE1FOiBUaGlzIHByb2Jh
Ymx5IGJlbG9uZ3Mgb24gSFRNTEVsZW1lbnRTdGFjay4KLUhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQqIEhUTUxUcmVlQnVpbGRlcjo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVt
ZW50KEVsZW1lbnQqIGZvcm1hdHRpbmdFbGVtZW50KQorSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogSFRNTFRyZWVCdWlsZGVyOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1l
bnQoRWxlbWVudFByb3h5KiBmb3JtYXR0aW5nRWxlbWVudCkKIHsKICAgICBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrID0gMDsKICAgICBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJl
Y29yZCgpOwpAQCAtMTUxOCw3ICsxNTIyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxU
aGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBvdXRlckl0ZXJhdGlvbkxpbWl0OyArK2kpIHsKICAgICAgICAgLy8gMS4KLSAg
ICAgICAgRWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQgPSBtX3RyZWUuYWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzKCktPmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLT5uYW1lKCkp
OworICAgICAgICBFbGVtZW50UHJveHkqIGZvcm1hdHRpbmdFbGVtZW50ID0gbV90cmVlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZSh0b2tl
bi0+bmFtZSgpKTsKICAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudCB8fCAoKG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+Y29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnQpKSAmJiAhbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblNjb3BlKGZvcm1hdHRpbmdFbGVtZW50KSkpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hl
Y2sgdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBl
cnJvci4KQEAgLTE2MTIsNyArMTYxNiw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldElu
c2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCkKICAgICAgICAgaWYgKGl0ZW0tPm5vZGUoKSA9PSBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnJvb3ROb2RlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChp
c1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAgIGxhc3QgPSB0cnVlOwotICAgICAgICAg
ICAgaXRlbSA9IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShtX2ZyYWdtZW50Q29udGV4dC5jb250ZXh0
RWxlbWVudCgpLCBIVE1MU3RhY2tJdGVtOjpJdGVtRm9yQ29udGV4dEVsZW1lbnQpOworICAgICAg
ICAgICAgaXRlbSA9IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShFbGVtZW50UHJveHk6OmNyZWF0ZSht
X2ZyYWdtZW50Q29udGV4dC5jb250ZXh0RWxlbWVudCgpKSwgSFRNTFN0YWNrSXRlbTo6SXRlbUZv
ckNvbnRleHRFbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFt
ZShzZWxlY3RUYWcpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7
CkBAIC0xODEyLDcgKzE4MTYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZvcm1UYWcpIHsKLSAgICAgICAgUmVmUHRyPEVs
ZW1lbnQ+IG5vZGUgPSBtX3RyZWUudGFrZUZvcm0oKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnRQ
cm94eT4gbm9kZSA9IG1fdHJlZS50YWtlRm9ybSgpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZShub2RlLmdldCgpKSkgewogICAgICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDg2ZDIyOWRlMGRlNDU1Y2RmOWNi
NTRhMWQxZjMyMTQ1N2RkNmU0NGMuLjZlZWY5ZTI4ZmIyZDEwYjg5Y2IzNzQ5ZTNkZDQxNTI2YTRj
YThlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5oIgogI2luY2x1
ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVy
LmgiCisjaW5jbHVkZSAiTm9kZVByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBA
IC0xNzQsNyArMTc1LDcgQEAgcHJpdmF0ZToKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJp
YnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKik7CiAKLSAgICBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQo
RWxlbWVudCopOworICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0
QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVtZW50UHJveHkqKTsKICAgICB2b2lkIGNhbGxU
aGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qKTsKIAogICAgIHZvaWQgY2xvc2VUaGVD
ZWxsKCk7CkBAIC0yMzAsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBmcm9tIHdpdGhpbiBw
YXJzZXIgYWN0aW9ucy4gV2UgYWxzbyBuZWVkIGl0IHRvIHRyYWNrIHRoZSBjdXJyZW50IHBvc2l0
aW9uLgogICAgIEhUTUxEb2N1bWVudFBhcnNlciogbV9wYXJzZXI7CiAKLSAgICBSZWZQdHI8RWxl
bWVudD4gbV9zY3JpcHRUb1Byb2Nlc3M7IC8vIDxzY3JpcHQ+IHRhZyB3aGljaCBuZWVkcyBwcm9j
ZXNzaW5nIGJlZm9yZSByZXN1bWluZyB0aGUgcGFyc2VyLgorICAgIFJlZlB0cjxFbGVtZW50UHJv
eHk+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vz
c2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KICAgICBUZXh0UG9zaXRpb24gbV9zY3Jp
cHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUg
c2NyaXB0IHRhZyBuZWVkaW5nIHByb2Nlc3NpbmcuCiAKICAgICBib29sIG1fdXNlUHJlSFRNTDVQ
YXJzZXJRdWlya3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Ob2Rl
UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL05vZGVQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA1ZjVjY2RiYzMzNjhlZDBmZDUyYjc4NzFkOWQ2Yjk4ZjI3YzJkYjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Ob2RlUHJveHkuaApAQCAtMCwwICsx
LDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55MTAwLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgTm9kZVByb3h5X2gKKyNkZWZpbmUgTm9kZVByb3h5X2gKKworI2luY2x1
ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MSHRtbEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5vZGVQcm94
eSA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVQcm94eT4geworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE5vZGVQcm94eSk7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZVByb3h5
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTm9kZVByb3h5KCkpOyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Tm9kZVByb3h5PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTm9kZVByb3h5KG5vZGUpKTsgfQorCisgICAgdm9pZCBzZXRO
b2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9CisgICAgTm9kZSog
bm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9ub2RlKTsKKyAgICAgICAgcmV0
dXJuIG1fbm9kZS5nZXQoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBOb2RlUHJveHkoKSB7
IH0KKyAgICBOb2RlUHJveHkoUGFzc1JlZlB0cjxOb2RlPiBub2RlKSA6IG1fbm9kZShub2RlKSB7
IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworfTsKKworY2xhc3MgQ29u
dGFpbmVyTm9kZVByb3h5IDogcHVibGljIE5vZGVQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZVByb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ29udGFpbmVyTm9kZVByb3h5KCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29u
dGFpbmVyTm9kZVByb3h5PiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFpbmVyTm9kZVByb3h5KG5vZGUpKTsgfQorCisgICAg
dm9pZCBzZXRDb250YWluZXJOb2RlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSkgeyBz
ZXROb2RlKG5vZGUpOyB9CisgICAgQ29udGFpbmVyTm9kZSogY29udGFpbmVyTm9kZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpLT5pc0NvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgIHJldHVybiB0b0NvbnRhaW5lck5vZGUobm9kZSgpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBDb250YWluZXJOb2RlUHJveHkoKSA6IE5vZGVQcm94eSgpIHsgfQorICAgIENvbnRhaW5l
ck5vZGVQcm94eShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUpIDogTm9kZVByb3h5KG5v
ZGUpIHsgfQorCit9OworCitjbGFzcyBFbGVtZW50UHJveHkgOiBwdWJsaWMgQ29udGFpbmVyTm9k
ZVByb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbGVtZW50UHJveHkoKSk7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFbGVtZW50UHJveHk+IGNyZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFbGVtZW50UHJveHkoZWxlbWVudCkpOyB9CisK
KyAgICB2b2lkIHNldEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KSB7IHNldENv
bnRhaW5lck5vZGUoZWxlbWVudCk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjb250YWluZXJOb2RlKCktPmlzRWxlbWVudE5vZGUoKSk7Cisg
ICAgICAgIHJldHVybiB0b0VsZW1lbnQobm9kZSgpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICBFbGVtZW50UHJveHkoKSA6IENvbnRhaW5lck5vZGVQcm94eSgpIHsgfQorICAgIEVsZW1lbnRQ
cm94eShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpIDogQ29udGFpbmVyTm9kZVByb3h5KGVs
ZW1lbnQpIHsgfQorCit9OworCitjbGFzcyBIVE1MRm9ybUVsZW1lbnRQcm94eSA6IHB1YmxpYyBF
bGVtZW50UHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGb3JtRWxl
bWVudFByb3h5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSFRNTEZvcm1FbGVtZW50
UHJveHkoKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnRQcm94eT4g
Y3JlYXRlKFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBlbGVtZW50KSB7IHJldHVybiBhZG9w
dFJlZihuZXcgSFRNTEZvcm1FbGVtZW50UHJveHkoZWxlbWVudCkpOyB9CisKKyAgICB2b2lkIHNl
dEhUTUxGb3JtRWxlbWVudChQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZWxlbWVudCkgeyBz
ZXRFbGVtZW50KGVsZW1lbnQpOyB9CisgICAgSFRNTEZvcm1FbGVtZW50KiBodG1sRm9ybUVsZW1l
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmZvcm1UYWcpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudCo+KGVsZW1lbnQoKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgSFRNTEZvcm1F
bGVtZW50UHJveHkoKSA6IEVsZW1lbnRQcm94eSgpIHsgfQorICAgIEhUTUxGb3JtRWxlbWVudFBy
b3h5KFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBlbGVtZW50KSA6IEVsZW1lbnRQcm94eShl
bGVtZW50KSB7IH0KK307CisKK2NsYXNzIEhUTUxIdG1sRWxlbWVudFByb3h5IDogcHVibGljIEVs
ZW1lbnRQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVt
ZW50UHJveHk+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MSHRtbEVsZW1lbnRQ
cm94eSgpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxIdG1sRWxlbWVudFByb3h5PiBj
cmVhdGUoUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGVsZW1lbnQpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MSHRtbEVsZW1lbnRQcm94eShlbGVtZW50KSk7IH0KKworICAgIHZvaWQgc2V0
SFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBlbGVtZW50KSB7IHNl
dEVsZW1lbnQoZWxlbWVudCk7IH0KKyAgICBIVE1MSHRtbEVsZW1lbnQqIGh0bWxIdG1sRWxlbWVu
dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbFRhZykpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEh0bWxF
bGVtZW50Kj4oZWxlbWVudCgpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBIVE1MSHRtbEVs
ZW1lbnRQcm94eSgpIDogRWxlbWVudFByb3h5KCkgeyB9CisgICAgSFRNTEh0bWxFbGVtZW50UHJv
eHkoUGFzc1JlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGVsZW1lbnQpIDogRWxlbWVudFByb3h5KGVs
ZW1lbnQpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTm9k
ZVByb3h5X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>