<?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>91443</bug_id>
          
          <creation_ts>2012-07-16 16:37:37 -0700</creation_ts>
          <short_desc>[Chromium] Move AccessibilityController and AccessibilityUIElement into TestRunner.a</short_desc>
          <delta_ts>2012-07-16 23:19:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91308</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>jochen</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>670772</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-16 16:37:37 -0700</bug_when>
    <thetext>[Chromium] Move AccessibilityController and AccessibilityUIElement into TestRunner.a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670773</commentid>
    <comment_count>1</comment_count>
      <attachid>152641</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-16 16:38:24 -0700</bug_when>
    <thetext>Created attachment 152641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670775</commentid>
    <comment_count>2</comment_count>
      <attachid>152641</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-16 16:39:53 -0700</bug_when>
    <thetext>Comment on attachment 152641
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671010</commentid>
    <comment_count>3</comment_count>
      <attachid>152641</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 23:19:14 -0700</bug_when>
    <thetext>Comment on attachment 152641
Patch

Clearing flags on attachment: 152641

Committed r122808: &lt;http://trac.webkit.org/changeset/122808&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671011</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 23:19:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152641</attachid>
            <date>2012-07-16 16:38:24 -0700</date>
            <delta_ts>2012-07-16 23:19:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91443-20120716163831.patch</filename>
            <type>text/plain</type>
            <size>101525</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNjU5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzExNWZjNDY4N2ZlMjlkNDQxNTRhYzliYWVlYjhiYzUy
NzJiMDIwZi4uNTcxNjY0ZjI2M2JhYjMwODk4ZTc1MGI1ZjYxOTRlNWUwZGNmM2Q0YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIw
IEBACiAyMDEyLTA3LTE2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAg
ICAgW0Nocm9taXVtXSBNb3ZlIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGFuZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IGludG8gVGVzdFJ1bm5lci5hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFB1cmVseSBhIGZpbGUgbW92ZSAoYW5kIGEgc29ydGluZyBv
ZiAjaW5jbHVkZXMpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
Z3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmg6IFJl
bmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDog
UmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaC4KKworMjAxMi0wNy0xNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgorCiAgICAgICAgIFtDaHJvbWl1bV0gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgc2hvdWxkbid0
IGtub3cgYW55dGhpbmcgYWJvdXQgVGVzdFNoZWxsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTQ0MQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwaQppbmRleCA3Y2NhNjNkMjRjMDg0Yjg0ZTc0YjA5ZmI2Y2NmY2FjMDY1OWEx
ZjM4Li42MGMwZWYwMmRjYTUxNmQxNWM5YTBmMzUwZGQxODcxMTkwNGE5NWUxIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKQEAgLTEsMTAgKzEsNiBAQAogewogICAg
ICd2YXJpYWJsZXMnOiB7CiAgICAgICAgICdkcnRfZmlsZXMnOiBbCi0gICAgICAgICAgICAnY2hy
b21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50
LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAnLApAQCAtNjAsNiArNTYsMTAg
QEAKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJWaWV3SG9zdC5oJywKICAgICAgICAgXSwKICAg
ICAgICAgJ3Rlc3RfcnVubmVyX2ZpbGVzJzogWworICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1
bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAnLAorICAgICAgICAg
ICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuY3BwJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9DcHBWYXJpYW50LmNwcCcsCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYjUyY2RkMDBmYTFlYTczNjhjNjFhZDc1NDMw
ZjU4YjgzMDViMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYkFjY2Vz
c2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKCkKLSAgICA6IG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhmYWxzZSkKLXsKLQotICAgIGJp
bmRNZXRob2QoImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYWRk
Tm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lckNhbGxiYWNrKTsKLQotICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNlZEVsZW1lbnQi
LCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2sp
OwotICAgIGJpbmRQcm9wZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2spOwotCi0gICAgYmluZEZhbGxiYWNrTWV0aG9k
KCZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmJpbmRUb0phdmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGNsYXNzbmFtZSkKLXsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2
YXNjcmlwdChmcmFtZSwgY2xhc3NuYW1lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6cmVzZXQoKQotewotICAgIG1fcm9vdEVsZW1lbnQgPSBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCk7Ci0gICAgbV9mb2N1c2VkRWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsK
LSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci0KLSAgICBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMg
PSBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgZm9jdXNlZEVsZW1lbnQpCi17Ci0g
ICAgbV9mb2N1c2VkRWxlbWVudCA9IGZvY3VzZWRFbGVtZW50OwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0Rm9jdXNlZEVsZW1lbnQoKQot
ewotICAgIGlmIChtX2ZvY3VzZWRFbGVtZW50LmlzTnVsbCgpKQotICAgICAgICBtX2ZvY3VzZWRF
bGVtZW50ID0gbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0gICAgcmV0dXJuIG1f
ZWxlbWVudHMuZ2V0T3JDcmVhdGUobV9mb2N1c2VkRWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRSb290RWxlbWVudCgpCi17
Ci0gICAgaWYgKG1fcm9vdEVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fcm9vdEVsZW1lbnQg
PSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLSAgICByZXR1cm4gbV9lbGVtZW50
cy5jcmVhdGVSb290KG1fcm9vdEVsZW1lbnQpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzaG91bGRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKCkKLXsKLSAgICByZXR1cm4gbV9s
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
Ojpub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSkKLXsKLSAgICAvLyBDYWxs
IG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgb24gdGhlIGVsZW1lbnQuCi0gICAgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudHMuZ2V0T3JDcmVhdGUodGFyZ2V0KTsKLSAg
ICBlbGVtZW50LT5ub3RpZmljYXRpb25SZWNlaXZlZChub3RpZmljYXRpb25OYW1lKTsKLQotICAg
IC8vIENhbGwgZ2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMuCi0gICAgc2l6ZV90IGNhbGxi
YWNrQ291bnQgPSBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50OyBpKyspIHsKLSAgICAgICAgQ3BwVmFyaWFudCBh
cmd1bWVudHNbMl07Ci0gICAgICAgIGFyZ3VtZW50c1swXS5zZXQoKmVsZW1lbnQtPmdldEFzQ3Bw
VmFyaWFudCgpKTsKLSAgICAgICAgYXJndW1lbnRzWzFdLnNldChub3RpZmljYXRpb25OYW1lKTsK
LSAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2tzW2ldLmludm9rZURlZmF1bHQoYXJndW1lbnRzLCAyLCBpbnZva2VSZXN1bHQpOwot
ICAgIH0KLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaWJpbGl0
eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFh
cmd1bWVudHNbMF0uaXNPYmplY3QoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hf
YmFjayhhcmd1bWVudHNbMF0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQo
KS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cm9vdEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoKihnZXRSb290RWxlbWVudCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBwcmludGYoIkNPTlNP
TEUgTUVTU0FHRTogSmF2YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uICIK
LSAgICAgICAgICAgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyXG4iKTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NjcyNTk1MzYwOGI0ODc0MDNjMmFhMjFhNjI0ZTg2NGZkNzBlZWVkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcl9oCi0jZGVmaW5lIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdDsKLWNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViVmlldzsKLX0K
LQotY2xhc3MgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7
Ci1wdWJsaWM6Ci0gICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKLQotICAgIC8vIFNoYWRv
dyB0byBpbmNsdWRlIGFjY2Vzc2liaWxpdHkgaW5pdGlhbGl6YXRpb24uCi0gICAgdm9pZCBiaW5k
VG9KYXZhc2NyaXB0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYg
Y2xhc3NuYW1lKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldEZvY3VzZWRFbGVt
ZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotICAgIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQqIGdldEZvY3VzZWRFbGVtZW50KCk7Ci0gICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZ2V0Um9vdEVsZW1lbnQoKTsKLQotICAgIGJvb2wgc2hvdWxkTG9nQWNjZXNzaWJp
bGl0eUV2ZW50cygpOwotCi0gICAgdm9pZCBub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90aWZpY2F0
aW9uTmFtZSk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3
KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBJZiB0cnVlLCB3
aWxsIGxvZyBhbGwgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb25zLgotICAgIGJvb2wgbV9sb2dB
Y2Nlc3NpYmlsaXR5RXZlbnRzOwotCi0gICAgLy8gQm91bmQgbWV0aG9kcyBhbmQgcHJvcGVydGll
cwotICAgIHZvaWQgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYWRkTm90aWZpY2F0aW9u
TGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZm9jdXNlZEVsZW1lbnRHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByb290RWxlbWVudEdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKLQotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX2Zv
Y3VzZWRFbGVtZW50OwotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX3Jvb3RF
bGVtZW50OwotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgbV9lbGVtZW50czsKLQot
ICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzOwotCi0g
ICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Ci19OwotCi0jZW5kaWYgLy8gQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTgzODA2NTg1YjQ4MWVlMTQxYWJlNDg0YjdlMjQ4NGU4ODQ3ZWMxOC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDg2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLS8vIE1hcCByb2xlIHZhbHVlIHRvIHN0
cmluZywgbWF0Y2hpbmcgU2FmYXJpL01hYyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiB0bwotLy8g
YXZvaWQgcmViYXNlbGluaW5nIGxheW91dCB0ZXN0cy4KLXN0YXRpYyBzdHJpbmcgcm9sZVRvU3Ry
aW5nKFdlYkFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpCi17Ci0gICAgc3RyaW5nIHJlc3VsdCA9ICJB
WFJvbGU6IEFYIjsKLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlQnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnV0dG9uIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvQnV0dG9uOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiUmFkaW9CdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlQ2hlY2tCb3g6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDaGVja0JveCIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlkZXI6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJTbGlkZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGFiR3Jv
dXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUYWJHcm91cCIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVUZXh0RmllbGQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJUZXh0RmllbGQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3RhdGljVGV4
dDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN0YXRpY1RleHQiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEFyZWE6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJUZXh0QXJlYSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxBcmVh
OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2Nyb2xsQXJlYSIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVQb3BVcEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlBvcFVwQnV0dG9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVC
dXR0b246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51QnV0dG9uIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiVGFibGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb246
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvbiIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVHcm91cDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
Ikdyb3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvR3JvdXA6Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSYWRpb0dyb3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZUxpc3Q6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Iik7
Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNjcm9sbEJhcjoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIlNjcm9sbEJhciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVWYWx1ZUluZGljYXRvcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlZhbHVlSW5k
aWNhdG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiSW1hZ2UiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlTWVudUJhcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVCYXIiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIk1lbnUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudUl0ZW06Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51SXRlbSIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVDb2x1bW46Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2x1
bW4iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUm93OgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiUm93Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRvb2xi
YXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUb29sYmFyIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1c3lJbmRpY2F0b3I6Ci0gICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJCdXN5SW5kaWNhdG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVBy
b2dyZXNzSW5kaWNhdG9yOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUHJvZ3Jlc3NJ
bmRpY2F0b3IiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlV2luZG93OgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiV2luZG93Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZURyYXdlcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRyYXdlciIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTeXN0ZW1XaWRlOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiU3lzdGVtV2lkZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVPdXRsaW5lOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiT3V0bGluZSIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbmNyZW1lbnRvcjoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkluY3JlbWVudG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZUJyb3dzZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJCcm93c2VyIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNvbWJvQm94OgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiQ29tYm9Cb3giKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BsaXRH
cm91cDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNwbGl0R3JvdXAiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BsaXR0ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJTcGxpdHRlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2xvcldl
bGw6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2xvcldlbGwiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlR3Jvd0FyZWE6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJHcm93QXJlYSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTaGVldDoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNoZWV0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZUhlbHBUYWc6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWxwVGFn
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1hdHRlOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiTWF0dGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVs
ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSdWxlciIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVSdWxlck1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIlJ1bGVyTWFya2VyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpbms6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaW5rIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZURpc2Nsb3N1cmVUcmlhbmdsZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIkRpc2Nsb3N1cmVUcmlhbmdsZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVH
cmlkOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiR3JpZCIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVDZWxsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ2Vs
bCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2x1bW5IZWFkZXI6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2x1bW5IZWFkZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlUm93SGVhZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUm93
SGVhZGVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkNvcmVMaW5rOgotICAg
ICAgICAvLyBNYXBzIHRvIExpbmsgcm9sZS4KLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkxpbmsiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSW1hZ2VNYXBMaW5rOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSW1hZ2VNYXBMaW5rIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUltYWdlTWFwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
SW1hZ2VNYXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdE1hcmtlcjoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RNYXJrZXIiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlV2ViQXJlYToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldl
YkFyZWEiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSGVhZGluZzoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkhlYWRpbmciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlTGlzdEJveDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RCb3giKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdEJveE9wdGlvbjoKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RCb3hPcHRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlVGFibGVIZWFkZXJDb250YWluZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJUYWJsZUhlYWRlckNvbnRhaW5lciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVEZWZpbml0aW9uTGlzdFRlcm06Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEZWZp
bml0aW9uTGlzdFRlcm0iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVmaW5pdGlv
bkxpc3REZWZpbml0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVmaW5pdGlv
bkxpc3REZWZpbml0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFubm90YXRp
b246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBbm5vdGF0aW9uIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNsaWRlclRodW1iOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiU2xpZGVyVGh1bWIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFu
ZG1hcmtBcHBsaWNhdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJr
QXBwbGljYXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtCYW5u
ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0Jhbm5lciIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya0NvbXBsZW1lbnRhcnk6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbXBsZW1lbnRhcnkiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtDb250ZW50SW5mbzoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrQ29udGVudEluZm8iKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlTGFuZG1hcmtNYWluOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
TGFuZG1hcmtNYWluIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTmF2
aWdhdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTmF2aWdhdGlv
biIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya1NlYXJjaDoKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrU2VhcmNoIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTG9nOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiQXBwbGljYXRpb25Mb2ciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBw
bGljYXRpb25NYXJxdWVlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRp
b25NYXJxdWVlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uU3Rh
dHVzOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb25TdGF0dXMiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25UaW1lcjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uVGltZXIiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlRG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJE
b2N1bWVudCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudEFydGljbGU6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEb2N1bWVudEFydGljbGUiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1lbnROb3RlOgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiRG9jdW1lbnROb3RlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZURvY3VtZW50UmVnaW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnRS
ZWdpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVXNlckludGVyZmFjZVRvb2x0
aXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVc2VySW50ZXJmYWNlVG9vbHRpcCIp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEFsc28gbWF0Y2hlcyBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVVua25vd24uCi0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVbmtub3duIik7Ci0g
ICAgfQotfQotCi1zdHJpbmcgZ2V0RGVzY3JpcHRpb24oY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYgb2JqZWN0KQotewotICAgIHN0cmluZyBkZXNjcmlwdGlvbiA9IG9iamVjdC5hY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKS51dGY4KCk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9uLmluc2Vy
dCgwLCAiQVhEZXNjcmlwdGlvbjogIik7Ci19Ci0KLXN0cmluZyBnZXRIZWxwVGV4dChjb25zdCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIGhlbHBUZXh0ID0g
b2JqZWN0LmhlbHBUZXh0KCkudXRmOCgpOwotICAgIHJldHVybiBoZWxwVGV4dC5pbnNlcnQoMCwg
IkFYSGVscDogIik7Ci19Ci0KLXN0cmluZyBnZXRTdHJpbmdWYWx1ZShjb25zdCBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHZhbHVlID0gb2JqZWN0LnN0cmlu
Z1ZhbHVlKCkudXRmOCgpOwotICAgIHJldHVybiB2YWx1ZS5pbnNlcnQoMCwgIkFYVmFsdWU6ICIp
OwotfQotCi1zdHJpbmcgZ2V0Um9sZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIHJvbGVUb1N0cmluZyhvYmplY3Qucm9sZVZhbHVlKCkpOwotfQot
Ci1zdHJpbmcgZ2V0VGl0bGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQot
ewotICAgIHN0cmluZyB0aXRsZSA9IG9iamVjdC50aXRsZSgpLnV0ZjgoKTsKLSAgICByZXR1cm4g
dGl0bGUuaW5zZXJ0KDAsICJBWFRpdGxlOiAiKTsKLX0KLQotc3RyaW5nIGdldE9yaWVudGF0aW9u
KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0
LmlzVmVydGljYWwoKSkKLSAgICAgICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWFZlcnRpY2Fs
T3JpZW50YXRpb24iOwotCi0gICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWEhvcml6b250YWxP
cmllbnRhdGlvbiI7Ci19Ci0KLXN0cmluZyBnZXRBdHRyaWJ1dGVzKGNvbnN0IFdlYkFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICAvLyBGSVhNRTogQ29uY2F0ZW5hdGUgYWxsIGF0
dHJpYnV0ZXMgb2YgdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QuCi0gICAgc3RyaW5nIGF0dHJpYnV0
ZXMoZ2V0VGl0bGUob2JqZWN0KSk7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoIlxuIik7Ci0gICAg
YXR0cmlidXRlcy5hcHBlbmQoZ2V0Um9sZShvYmplY3QpKTsKLSAgICBhdHRyaWJ1dGVzLmFwcGVu
ZCgiXG4iKTsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChnZXREZXNjcmlwdGlvbihvYmplY3QpKTsK
LSAgICByZXR1cm4gYXR0cmlidXRlczsKLX0KLQotCi0vLyBDb2xsZWN0cyBhdHRyaWJ1dGVzIGlu
dG8gYSBzdHJpbmcsIGRlbGltaXRlZCBieSBkYXNoZXMuIFVzZWQgYnkgYWxsIG1ldGhvZHMKLS8v
IHRoYXQgb3V0cHV0IGxpc3RzIG9mIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxl
bWVudHNDYWxsYmFjaywKLS8vIEF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2ssIGV0Yy4KLWNs
YXNzIEF0dHJpYnV0ZXNDb2xsZWN0b3IgewotcHVibGljOgotICAgIHZvaWQgY29sbGVjdEF0dHJp
YnV0ZXMoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotICAgIHsKLSAgICAg
ICAgbV9hdHRyaWJ1dGVzLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1cbiIpOwotICAgICAgICBtX2F0
dHJpYnV0ZXMuYXBwZW5kKGdldEF0dHJpYnV0ZXMob2JqZWN0KSk7Ci0gICAgfQotCi0gICAgc3Ry
aW5nIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLQotcHJpdmF0
ZToKLSAgICBzdHJpbmcgbV9hdHRyaWJ1dGVzOwotfTsKLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBv
YmplY3QsIEZhY3RvcnkqIGZhY3RvcnkpCi0gICAgOiBtX2FjY2Vzc2liaWxpdHlPYmplY3Qob2Jq
ZWN0KQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi17Ci0KLSAgICBBU1NFUlQoZmFjdG9yeSk7
Ci0KLSAgICAvLwotICAgIC8vIFByb3BlcnRpZXMKLSAgICAvLwotCi0gICAgYmluZFByb3BlcnR5
KCJyb2xlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVHZXR0ZXJDYWxsYmFjayk7Ci0g
ICAgYmluZFByb3BlcnR5KCJ0aXRsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZUdl
dHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9w
ZXJ0eSgiaGVscFRleHQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHRHZXR0ZXJD
YWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJzdHJpbmdWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHko
IngiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5k
UHJvcGVydHkoInkiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eUdldHRlckNhbGxiYWNrKTsK
LSAgICBiaW5kUHJvcGVydHkoIndpZHRoIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRo
R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaGVpZ2h0IiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmhlaWdodEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlu
dFZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlR2V0dGVyQ2FsbGJhY2sp
OwotICAgIGJpbmRQcm9wZXJ0eSgibWluVmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bWluVmFsdWVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJtYXhWYWx1ZSIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5k
UHJvcGVydHkoImNoaWxkcmVuQ291bnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRy
ZW5Db3VudEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImluc2VydGlvblBvaW50
TGluZU51bWJlciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVO
dW1iZXJHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJzZWxlY3RlZFRleHRSYW5n
ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZUdldHRlckNhbGxi
YWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzRW5hYmxlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0VuYWJsZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1JlcXVp
cmVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWRHZXR0ZXJDYWxsYmFjayk7
Ci0gICAgYmluZFByb3BlcnR5KCJpc0ZvY3VzZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNGb2N1c2FibGUi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFjayk7Ci0g
ICAgYmluZFByb3BlcnR5KCJpc1NlbGVjdGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
U2VsZWN0ZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1NlbGVjdGFibGUi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2spOwot
ICAgIGJpbmRQcm9wZXJ0eSgiaXNNdWx0aVNlbGVjdGFibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNNdWx0aVNlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5
KCJpc1NlbGVjdGVkT3B0aW9uQWN0aXZlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWRPcHRpb25BY3RpdmVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0V4
cGFuZGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0NoZWNrZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNDaGVja2VkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNWaXNpYmxl
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZUdldHRlckNhbGxiYWNrKTsKLSAg
ICBiaW5kUHJvcGVydHkoImlzT2ZmU2NyZWVuIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
T2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNDb2xsYXBzZWQi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayk7Ci0g
ICAgYmluZFByb3BlcnR5KCJoYXNQb3B1cCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQ
b3B1cEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzVmFsaWQiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVy
dHkoIm9yaWVudGF0aW9uIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0aW9uR2V0
dGVyQ2FsbGJhY2spOwotCi0gICAgLy8KLSAgICAvLyBNZXRob2RzCi0gICAgLy8KLQotICAgIGJp
bmRNZXRob2QoImFsbEF0dHJpYnV0ZXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0
cmlidXRlc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZMaW5rZWRVSUVs
ZW1lbnRzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxl
bWVudHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mRG9jdW1lbnRMaW5r
cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzQ2Fs
bGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkNoaWxkcmVuIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2spOwotICAgIGJpbmRN
ZXRob2QoImxpbmVGb3JJbmRleCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5k
ZXhDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYm91bmRzRm9yUmFuZ2UiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
c3RyaW5nRm9yUmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2VD
YWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiY2hpbGRBdEluZGV4IiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJlbGVtZW50
QXRQb2ludCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludENhbGxiYWNr
KTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayk7Ci0gICAg
YmluZE1ldGhvZCgiYXR0cmlidXRlc09mUm93SGVhZGVycyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0
dHJpYnV0ZXNPZkNvbHVtbnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Q29sdW1uc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZSb3dzIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgiYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJh
dHRyaWJ1dGVzT2ZIZWFkZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
SGVhZGVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImluZGV4SW5UYWJsZSIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGVDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
cm93SW5kZXhSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlQ2Fs
bGJhY2spOwotICAgIGJpbmRNZXRob2QoImNvbHVtbkluZGV4UmFuZ2UiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJj
ZWxsRm9yQ29sdW1uQW5kUm93IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1
bW5BbmRSb3dDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgidGl0bGVVSUVsZW1lbnQiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1l
dGhvZCgic2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0
U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlVmFs
dWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlVmFsdWVDYWxsYmFjayk7Ci0g
ICAgYmluZE1ldGhvZCgiaXNBdHRyaWJ1dGVTZXR0YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImlzQWN0
aW9uU3VwcG9ydGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3VwcG9ydGVk
Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInBhcmVudEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpbmNy
ZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50Q2FsbGJhY2spOwotICAg
IGJpbmRNZXRob2QoImRlY3JlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1l
bnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic2hvd01lbnUiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2hvd01lbnVDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgicHJlc3MiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3NDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiaXNF
cXVhbCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsQ2FsbGJhY2spOwotICAgIGJp
bmRNZXRob2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInRha2VGb2N1
cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXNDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgic2Nyb2xsVG9NYWtlVmlzaWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
Y3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInNjcm9sbFRvTWFr
ZVZpc2libGVXaXRoU3ViRm9jdXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9N
YWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzY3JvbGxU
b0dsb2JhbFBvaW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9p
bnRDYWxsYmFjayk7Ci0KLSAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmZhbGxiYWNrQ2FsbGJhY2spOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgcmV0dXJuIG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9iamVjdCgp
LmNoaWxkQXQoaW5kZXgpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Vx
dWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb3RoZXIpCi17Ci0gICAg
cmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5lcXVhbHMob3RoZXIpOwotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IGNoYXIqIG5v
dGlmaWNhdGlvbk5hbWUpCi17Ci0gICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25vdGlmaWNh
dGlvbkNhbGxiYWNrcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFj
a0NvdW50OyBpKyspIHsKLSAgICAgICAgQ3BwVmFyaWFudCBub3RpZmljYXRpb25OYW1lQXJndW1l
bnQ7Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudC5zZXQobm90aWZpY2F0aW9uTmFt
ZSk7Ci0gICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OwotICAgICAgICBtX25vdGlmaWNh
dGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KCZub3RpZmljYXRpb25OYW1lQXJndW1lbnQs
IDEsIGludm9rZVJlc3VsdCk7Ci0gICAgfQotfQotCi0vLwotLy8gUHJvcGVydGllcwotLy8KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFJvbGUoYWNjZXNzaWJpbGl0eU9iamVj
dCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0VGl0bGUoYWNj
ZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQoZ2V0RGVzY3JpcHRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0SGVscFRleHQoYWNjZXNzaWJpbGl0
eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFs
dWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQo
Z2V0U3RyaW5nVmFsdWUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6eEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCku
eCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eUdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuYm91bmRpbmdCb3hSZWN0KCkueSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6d2lkdGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLndpZHRoKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHRHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgp
LmJvdW5kaW5nQm94UmVjdCgpLmhlaWdodCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aW50VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLnZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgp
Lm1pblZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLm1heFZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpbnQgY291bnQgPSAxOyAvLyBSb290IG9iamVjdCBh
bHdheXMgaGFzIG9ubHkgb25lIGNoaWxkLCB0aGUgV2ViVmlldy4KLSAgICBpZiAoIWlzUm9vdCgp
KQotICAgICAgICBjb3VudCA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGlsZENvdW50KCk7Ci0g
ICAgcmVzdWx0LT5zZXQoY291bnQpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBXZWJWZWN0b3I8aW50PiBsaW5lQnJlYWtzOwotICAgIGFjY2Vzc2liaWxpdHlP
YmplY3QoKS5saW5lQnJlYWtzKGxpbmVCcmVha3MpOwotICAgIGludCBjdXJzb3IgPSBhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuc2VsZWN0aW9uRW5kKCk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIHdo
aWxlIChsaW5lIDwgc3RhdGljX2Nhc3Q8aW50PihsaW5lQnJlYWtzLnNpemUoKSkgJiYgbGluZUJy
ZWFrc1tsaW5lXSA8PSBjdXJzb3IpCi0gICAgICAgIGxpbmUrKzsKLSAgICByZXN1bHQtPnNldChs
aW5lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5n
ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0Vu
YWJsZWQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuaXNSZXF1aXJlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRm9jdXNlZCgpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCkuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNTZWxlY3RlZCgpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc011bHRp
U2VsZWN0YWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVj
dGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1NlbGVjdGVkT3B0aW9uQWN0aXZl
KCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWRHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoIWFjY2Vzc2li
aWxpdHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ2hlY2tlZCgpKTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgp
LmlzVmlzaWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNj
cmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNPZmZTY3JlZW4oKSk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ29sbGFw
c2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5hcmlhSGFzUG9wdXAoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNWYWxpZCgpKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRPcmllbnRhdGlvbihhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotLy8KLS8vIE1ldGhvZHMKLS8vCi0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRBdHRyaWJ1
dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRM
aW5rc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgQXR0cmlidXRlc0NvbGxlY3Rv
ciBjb2xsZWN0b3I7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5j
aGlsZENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAg
ICAgICAgY29sbGVjdG9yLmNvbGxlY3RBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5j
aGlsZEF0KGkpKTsKLSAgICByZXN1bHQtPnNldChjb2xsZWN0b3IuYXR0cmlidXRlcygpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0cml6ZWRBdHRyaWJ1dGVOYW1l
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpsaW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2VDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoIWFyZ3VtZW50cy5zaXplKCkgfHwgIWFyZ3VtZW50c1swXS5pc051
bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogY2hpbGQgPSBnZXRDaGlsZEF0SW5k
ZXgoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7Ci0gICAgaWYgKCFjaGlsZCkgewotICAgICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdC0+
c2V0KCooY2hpbGQtPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93c0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZUNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
b3dJbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJ
RWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVWYWx1ZUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNl
dHRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgJiYgIWFyZ3VtZW50
c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3RyaW5nIGF0dHJpYnV0ZSA9IGFyZ3VtZW50c1swXS50b1N0
cmluZygpOwotICAgIGJvb2wgc2V0dGFibGUgPSBmYWxzZTsKLSAgICBpZiAoYXR0cmlidXRlID09
ICJBWFZhbHVlIikKLSAgICAgICAgc2V0dGFibGUgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2Fu
U2V0VmFsdWVBdHRyaWJ1dGUoKTsKLSAgICByZXN1bHQtPnNldChzZXR0YWJsZSk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gVGhpcyBv
bmUgbWF5IGJlIHJlYWxseSBoYXJkIHRvIGltcGxlbWVudC4KLSAgICAvLyBOb3QgZXhwb3NlZCBi
eSBBY2Nlc3NpYmlsaXR5T2JqZWN0LgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVu
dENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzaG93TWVudUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwcmVzc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkucGVyZm9ybURlZmF1bHRB
Y3Rpb24oKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0VxdWFsQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEg
fHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0LT5zZXQoYXJndW1lbnRzWzBd
LmlzRXF1YWwoKmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25vdGlmaWNh
dGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5zZXRGb2N1c2VkKHRydWUpOwotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2li
bGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9sbFRvTWFrZVZpc2libGUoKTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3Jv
bGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQKLSAgICAgICAgfHwgIWFyZ3VtZW50
c1swXS5pc051bWJlcigpCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKQotICAg
ICAgICB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkKLSAgICAgICAgfHwgIWFyZ3VtZW50c1sz
XS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IGFyZ3VtZW50c1sw
XS50b0ludDMyKCk7Ci0gICAgaW50IHkgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIGlu
dCB3aWR0aCA9IGFyZ3VtZW50c1syXS50b0ludDMyKCk7Ci0gICAgaW50IGhlaWdodCA9IGFyZ3Vt
ZW50c1szXS50b0ludDMyKCk7Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9sbFRvTWFr
ZVZpc2libGVXaXRoU3ViRm9jdXMoV2ViUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Ny
b2xsVG9HbG9iYWxQb2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBpbnQgeSA9IGFy
Z3VtZW50c1sxXS50b0ludDMyKCk7Ci0KLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2Nyb2xs
VG9HbG9iYWxQb2ludChXZWJQb2ludCh4LCB5KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZmFsbGJhY2tDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QgJiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotUm9vdEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OlJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYkFjY2Vz
c2liaWxpdHlPYmplY3QgJm9iamVjdCwgRmFjdG9yeSAqZmFjdG9yeSkKLSAgICA6IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQob2JqZWN0LCBmYWN0b3J5KSB7IH0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGZhY3RvcnkoKS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKTsKLX0KLQot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlz
dCgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlz
dDo6Y2xlYXIoKQotewotICAgIGZvciAoRWxlbWVudExpc3Q6Oml0ZXJhdG9yIGkgPSBtX2VsZW1l
bnRzLmJlZ2luKCk7IGkgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUg
KCppKTsKLSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpnZXRPckNyZWF0ZShjb25zdCBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgaWYgKG9iamVjdC5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3QgZWxlbWVudENvdW50ID0gbV9lbGVtZW50cy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkrKykgewot
ICAgICAgICBpZiAobV9lbGVtZW50c1tpXS0+aXNFcXVhbChvYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIG1fZWxlbWVudHNbaV07Ci0gICAgfQotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCogZWxlbWVudCA9IG5ldyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KG9iamVjdCwgdGhpcyk7Ci0g
ICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0K
LUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpjcmVh
dGVSb290KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbmV3IFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KG9iamVjdCwgdGhpcyk7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Ci0gICAg
cmV0dXJuIGVsZW1lbnQ7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhhZTZkNDEyZmYxOWQxZTlkYjAzM2E5NTNlYjY0MDFkNTQ3Yzg5OTEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaAotI2RlZmluZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50X2gKLQotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLSNpbmNsdWRl
ICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotY2xhc3MgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCA6IHB1YmxpYyBD
cHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBGYWN0b3J5IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgfkZhY3RvcnkoKSB7IH0KLSAgICAgICAgdmlydHVhbCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxp
dHlPYmplY3QmKSA9IDA7Ci0gICAgfTsKLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29u
c3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgRmFjdG9yeSopOwotCi0gICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQpOwot
ICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0VxdWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYp
OwotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IGNoYXIgKm5v
dGlmaWNhdGlvbk5hbWUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9h
Y2Nlc3NpYmlsaXR5T2JqZWN0OyB9Ci0KLSAgICBGYWN0b3J5KiBmYWN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9mYWN0b3J5OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gQm91bmQgcHJvcGVydGllcy4K
LSAgICB2b2lkIHJvbGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0aXRs
ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRlc2NyaXB0aW9uR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGVscFRleHRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB5
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgd2lkdGhHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBoZWlnaHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBpbnRWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIG1pblZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbWF4VmFs
dWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjaGlsZHJlbkNvdW50R2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVt
YmVyR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2VsZWN0ZWRUZXh0UmFu
Z2VHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0VuYWJsZWRHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgaXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBpc1NlbGVjdGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
aXNTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNNdWx0
aVNlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1NlbGVj
dGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNF
eHBhbmRlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQ2hlY2tlZEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzVmlzaWJsZUdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzT2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgaXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBoYXNQb3B1cEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGlzVmFsaWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvcmllbnRh
dGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEJvdW5kIG1ldGhvZHMu
Ci0gICAgdm9pZCBhbGxBdHRyaWJ1dGVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhcmFtZXRyaXplZEF0dHJp
YnV0ZU5hbWVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgbGluZUZvckluZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgYm91bmRzRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdHJpbmdGb3JSYW5nZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNoaWxkQXRJ
bmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZlJv
d0hlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBhdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mUm93c0NhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZlZp
c2libGVDZWxsc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGluZGV4SW5UYWJsZUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJvd0luZGV4UmFuZ2VDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjb2x1
bW5JbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgY2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHRpdGxlVUlFbGVtZW50Q2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRU
ZXh0UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBhdHRyaWJ1dGVWYWx1ZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0FjdGlvblN1cHBvcnRl
ZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IHBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBpbmNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkZWNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzaG93TWVudUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHByZXNzQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNFcXVhbENhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0YWtlRm9jdXNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY3Jv
bGxUb01ha2VWaXNpYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNjcm9sbFRvR2xv
YmFsUG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotCi0gICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fYWNjZXNzaWJp
bGl0eU9iamVjdDsKLSAgICBGYWN0b3J5KiBtX2ZhY3Rvcnk7Ci0gICAgc3RkOjp2ZWN0b3I8Q3Bw
VmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7Ci19OwotCi0KLWNsYXNzIFJvb3RBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IDogcHVibGljIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgewotcHVi
bGljOgotICAgIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdCYsIEZhY3RvcnkqKTsKLQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogZ2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotCi0vLyBQcm92aWRlcyBzaW1w
bGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBpbnN0
YW5jZXM6Ci0vLyBhbGwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudHMgZXZlciBjcmVhdGVkIGZyb20g
dGhlIGNvbnRyb2xsZXIgYXJlIHN0b3JlZCBpbgotLy8gYSBsaXN0IGFuZCBjbGVhcmVkIGV4cGxp
Y2l0bHkuCi1jbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6IHB1YmxpYyBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpGYWN0b3J5IHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50TGlzdCgpIHsgfQotICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0
KCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsK
LSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBjcmVhdGVSb290KGNvbnN0IFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYpOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgVmVjdG9yPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqPiBFbGVtZW50TGlzdDsKLSAgICBFbGVtZW50TGlzdCBtX2Vs
ZW1lbnRzOwotfTsKLQotI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmU0NDA0YzJjMzQ3
MmIzYjY4Y2YyMjA5YjA3YWZjNmY5NmEyY2JmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKKyAgICA6IG1f
bG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhmYWxzZSkKK3sKKworICAgIGJpbmRNZXRob2QoImxvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2li
aWxpdHlFdmVudHNDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwg
JkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKTsKKworICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNlZEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9w
ZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50
R2V0dGVyQ2FsbGJhY2spOworCisgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmJpbmRUb0phdmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJp
bmcmIGNsYXNzbmFtZSkKK3sKKyAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbmFibGVBY2Nl
c3NpYmlsaXR5KCk7CisgICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2YXNjcmlwdChmcmFtZSwg
Y2xhc3NuYW1lKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXQoKQor
eworICAgIG1fcm9vdEVsZW1lbnQgPSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisgICAgbV9m
b2N1c2VkRWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsKKyAgICBtX2VsZW1lbnRz
LmNsZWFyKCk7CisKKyAgICBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0Rm9jdXNlZEVsZW1lbnQoY29uc3QgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYgZm9jdXNlZEVsZW1lbnQpCit7CisgICAgbV9mb2N1c2VkRWxl
bWVudCA9IGZvY3VzZWRFbGVtZW50OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0Rm9jdXNlZEVsZW1lbnQoKQoreworICAgIGlmIChtX2Zv
Y3VzZWRFbGVtZW50LmlzTnVsbCgpKQorICAgICAgICBtX2ZvY3VzZWRFbGVtZW50ID0gbV93ZWJW
aWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisgICAgcmV0dXJuIG1fZWxlbWVudHMuZ2V0T3JD
cmVhdGUobV9mb2N1c2VkRWxlbWVudCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRSb290RWxlbWVudCgpCit7CisgICAgaWYgKG1fcm9v
dEVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFj
Y2Vzc2liaWxpdHlPYmplY3QoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50cy5jcmVhdGVSb290KG1f
cm9vdEVsZW1lbnQpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzaG91bGRM
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzKCkKK3sKKyAgICByZXR1cm4gbV9sb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25S
ZWNlaXZlZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29u
c3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSkKK3sKKyAgICAvLyBDYWxsIG5vdGlmaWNhdGlvbiBs
aXN0ZW5lcnMgb24gdGhlIGVsZW1lbnQuCisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxl
bWVudCA9IG1fZWxlbWVudHMuZ2V0T3JDcmVhdGUodGFyZ2V0KTsKKyAgICBlbGVtZW50LT5ub3Rp
ZmljYXRpb25SZWNlaXZlZChub3RpZmljYXRpb25OYW1lKTsKKworICAgIC8vIENhbGwgZ2xvYmFs
IG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMuCisgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
YWxsYmFja0NvdW50OyBpKyspIHsKKyAgICAgICAgQ3BwVmFyaWFudCBhcmd1bWVudHNbMl07Cisg
ICAgICAgIGFyZ3VtZW50c1swXS5zZXQoKmVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKTsKKyAg
ICAgICAgYXJndW1lbnRzWzFdLnNldChub3RpZmljYXRpb25OYW1lKTsKKyAgICAgICAgQ3BwVmFy
aWFudCBpbnZva2VSZXN1bHQ7CisgICAgICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmlu
dm9rZURlZmF1bHQoYXJndW1lbnRzLCAyLCBpbnZva2VSZXN1bHQpOworICAgIH0KK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2xv
Z0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNP
YmplY3QoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVudHNb
MF0pOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJp
YW50KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoKihn
ZXRSb290RWxlbWVudCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBwcmludGYoIkNPTlNPTEUgTUVTU0FHRTogSmF2
YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uICIKKyAgICAgICAgICAgIkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyXG4iKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjcyNTk1MzYwOGI0
ODc0MDNjMmFhMjFhNjI0ZTg2NGZkNzBlZWVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyX2gKKyNkZWZp
bmUgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5oIgorI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OworY2xhc3MgV2ViRnJhbWU7CitjbGFz
cyBXZWJWaWV3OworfQorCitjbGFzcyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciA6IHB1YmxpYyBD
cHBCb3VuZENsYXNzIHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwor
CisgICAgLy8gU2hhZG93IHRvIGluY2x1ZGUgYWNjZXNzaWJpbGl0eSBpbml0aWFsaXphdGlvbi4K
KyAgICB2b2lkIGJpbmRUb0phdmFzY3JpcHQoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiBjbGFzc25hbWUpOworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHZvaWQg
c2V0Rm9jdXNlZEVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7
CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Rm9jdXNlZEVsZW1lbnQoKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRSb290RWxlbWVudCgpOworCisgICAgYm9vbCBzaG91
bGRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKCk7CisKKyAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2Vp
dmVkKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgdGFyZ2V0LCBjb25zdCBj
aGFyKiBub3RpZmljYXRpb25OYW1lKTsKKworICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6Oldl
YlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3ID0gd2ViVmlldzsgfQorCitwcml2YXRlOgorICAg
IC8vIElmIHRydWUsIHdpbGwgbG9nIGFsbCBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbnMuCisg
ICAgYm9vbCBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHM7CisKKyAgICAvLyBCb3VuZCBtZXRob2Rz
IGFuZCBwcm9wZXJ0aWVzCisgICAgdm9pZCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZmFsbGJhY2tD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBh
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBmb2N1c2Vk
RWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJvb3RFbGVtZW50
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworCisgICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0IG1fZm9jdXNlZEVsZW1lbnQ7CisgICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0IG1fcm9vdEVsZW1lbnQ7CisKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCBt
X2VsZW1lbnRzOworCisgICAgc3RkOjp2ZWN0b3I8Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25D
YWxsYmFja3M7CisKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKK307CisKKyNlbmRp
ZiAvLyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODM4MDY1ODViNDgxZWUxNDFhYmU0ODRiN2UyNDg0ZTg4
NDdlYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcApAQCAtMCwwICsxLDg2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0v
V2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUmVjdC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2lu
ZyBuYW1lc3BhY2Ugc3RkOworCisvLyBNYXAgcm9sZSB2YWx1ZSB0byBzdHJpbmcsIG1hdGNoaW5n
IFNhZmFyaS9NYWMgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gdG8KKy8vIGF2b2lkIHJlYmFzZWxp
bmluZyBsYXlvdXQgdGVzdHMuCitzdGF0aWMgc3RyaW5nIHJvbGVUb1N0cmluZyhXZWJBY2Nlc3Np
YmlsaXR5Um9sZSByb2xlKQoreworICAgIHN0cmluZyByZXN1bHQgPSAiQVhSb2xlOiBBWCI7Cisg
ICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1dHRvbjoK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVSYWRpb0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IlJhZGlvQnV0dG9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNoZWNrQm94Ogor
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ2hlY2tCb3giKTsKKyAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlU2xpZGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2xp
ZGVyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYkdyb3VwOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFiR3JvdXAiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlVGV4dEZpZWxkOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEZpZWxk
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVN0YXRpY1RleHQ6CisgICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJTdGF0aWNUZXh0Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVRleHRBcmVhOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEFyZWEi
KTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU2Nyb2xsQXJlYToKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIlNjcm9sbEFyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlUG9wVXBCdXR0b246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQb3BVcEJ1
dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51QnV0dG9uOgorICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVUYWJsZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYmxlIik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uOgorICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb24iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlR3JvdXA6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJHcm91cCIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRpb0dyb3VwOgorICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiUmFkaW9Hcm91cCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVM
aXN0OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGlzdCIpOworICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxCYXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJTY3JvbGxCYXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVmFsdWVJbmRpY2F0
b3I6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJWYWx1ZUluZGljYXRvciIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkltYWdlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVCYXI6Cisg
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51QmFyIik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZU1lbnU6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51Iik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVJdGVtOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiTWVudUl0ZW0iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
Q29sdW1uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sdW1uIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvdzoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IlJvdyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUb29sYmFyOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9vbGJhciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVCdXN5SW5kaWNhdG9yOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnVzeUlu
ZGljYXRvciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVQcm9ncmVzc0luZGljYXRv
cjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlByb2dyZXNzSW5kaWNhdG9yIik7Cisg
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdpbmRvdzoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIldpbmRvdyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEcmF3ZXI6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEcmF3ZXIiKTsKKyAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlU3lzdGVtV2lkZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IlN5c3RlbVdpZGUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlT3V0bGluZToKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk91dGxpbmUiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlSW5jcmVtZW50b3I6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJJ
bmNyZW1lbnRvciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCcm93c2VyOgorICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnJvd3NlciIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVDb21ib0JveDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNvbWJv
Qm94Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNwbGl0R3JvdXA6CisgICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGxpdEdyb3VwIik7CisgICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVNwbGl0dGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3BsaXR0
ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sb3JXZWxsOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sb3JXZWxsIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUdyb3dBcmVhOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiR3Jvd0FyZWEi
KTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU2hlZXQ6CisgICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJTaGVldCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxw
VGFnOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSGVscFRhZyIpOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVNYXR0ZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
Ik1hdHRlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJ1bGVyOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiUnVsZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlUnVsZXJNYXJrZXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSdWxlck1hcmtl
ciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaW5rOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiTGluayIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEaXNj
bG9zdXJlVHJpYW5nbGU6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEaXNjbG9zdXJl
VHJpYW5nbGUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JpZDoKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkdyaWQiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlQ2VsbDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNlbGwiKTsKKyAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uSGVhZGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiQ29sdW1uSGVhZGVyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJv
d0hlYWRlcjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvd0hlYWRlciIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVXZWJDb3JlTGluazoKKyAgICAgICAgLy8gTWFwcyB0
byBMaW5rIHJvbGUuCisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaW5rIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlTWFwTGluazoKKyAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkltYWdlTWFwTGluayIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVJbWFnZU1hcDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwIik7Cisg
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RNYXJrZXI6CisgICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJMaXN0TWFya2VyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZVdlYkFyZWE6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJXZWJBcmVhIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUhlYWRpbmc6CisgICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJIZWFkaW5nIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3g6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94Iik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3hPcHRpb246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJMaXN0Qm94T3B0aW9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxl
SGVhZGVyQ29udGFpbmVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFibGVIZWFk
ZXJDb250YWluZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVmaW5pdGlvbkxp
c3RUZXJtOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVmaW5pdGlvbkxpc3RUZXJt
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURlZmluaXRpb25MaXN0RGVmaW5pdGlv
bjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRlZmluaXRpb25MaXN0RGVmaW5pdGlv
biIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBbm5vdGF0aW9uOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiQW5ub3RhdGlvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVTbGlkZXJUaHVtYjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNsaWRl
clRodW1iIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQXBwbGljYXRp
b246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0FwcGxpY2F0aW9uIik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQmFubmVyOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtCYW5uZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlTGFuZG1hcmtDb21wbGVtZW50YXJ5OgorICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiTGFuZG1hcmtDb21wbGVtZW50YXJ5Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUxhbmRtYXJrQ29udGVudEluZm86CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJMYW5kbWFya0NvbnRlbnRJbmZvIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxh
bmRtYXJrTWFpbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTWFpbiIp
OworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya05hdmlnYXRpb246CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya05hdmlnYXRpb24iKTsKKyAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtTZWFyY2g6CisgICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJMYW5kbWFya1NlYXJjaCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVBcHBsaWNhdGlvbkxvZzoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0
aW9uTG9nIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTWFycXVl
ZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTWFycXVlZSIpOwor
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvblN0YXR1czoKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uU3RhdHVzIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uVGltZXI6CisgICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJBcHBsaWNhdGlvblRpbWVyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZURvY3VtZW50OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnQiKTsKKyAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1lbnRBcnRpY2xlOgorICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnRBcnRpY2xlIik7CisgICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZURvY3VtZW50Tm90ZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRv
Y3VtZW50Tm90ZSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudFJlZ2lv
bjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50UmVnaW9uIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVVzZXJJbnRlcmZhY2VUb29sdGlwOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiVXNlckludGVyZmFjZVRvb2x0aXAiKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICAvLyBBbHNvIG1hdGNoZXMgV2ViQWNjZXNzaWJpbGl0eVJvbGVVbmtub3duLgor
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVW5rbm93biIpOworICAgIH0KK30KKworc3Ry
aW5nIGdldERlc2NyaXB0aW9uKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkK
K3sKKyAgICBzdHJpbmcgZGVzY3JpcHRpb24gPSBvYmplY3QuYWNjZXNzaWJpbGl0eURlc2NyaXB0
aW9uKCkudXRmOCgpOworICAgIHJldHVybiBkZXNjcmlwdGlvbi5pbnNlcnQoMCwgIkFYRGVzY3Jp
cHRpb246ICIpOworfQorCitzdHJpbmcgZ2V0SGVscFRleHQoY29uc3QgV2ViQWNjZXNzaWJpbGl0
eU9iamVjdCYgb2JqZWN0KQoreworICAgIHN0cmluZyBoZWxwVGV4dCA9IG9iamVjdC5oZWxwVGV4
dCgpLnV0ZjgoKTsKKyAgICByZXR1cm4gaGVscFRleHQuaW5zZXJ0KDAsICJBWEhlbHA6ICIpOwor
fQorCitzdHJpbmcgZ2V0U3RyaW5nVmFsdWUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYg
b2JqZWN0KQoreworICAgIHN0cmluZyB2YWx1ZSA9IG9iamVjdC5zdHJpbmdWYWx1ZSgpLnV0Zjgo
KTsKKyAgICByZXR1cm4gdmFsdWUuaW5zZXJ0KDAsICJBWFZhbHVlOiAiKTsKK30KKworc3RyaW5n
IGdldFJvbGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIHJl
dHVybiByb2xlVG9TdHJpbmcob2JqZWN0LnJvbGVWYWx1ZSgpKTsKK30KKworc3RyaW5nIGdldFRp
dGxlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKK3sKKyAgICBzdHJpbmcg
dGl0bGUgPSBvYmplY3QudGl0bGUoKS51dGY4KCk7CisgICAgcmV0dXJuIHRpdGxlLmluc2VydCgw
LCAiQVhUaXRsZTogIik7Cit9CisKK3N0cmluZyBnZXRPcmllbnRhdGlvbihjb25zdCBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCit7CisgICAgaWYgKG9iamVjdC5pc1ZlcnRpY2FsKCkp
CisgICAgICAgIHJldHVybiAiQVhPcmllbnRhdGlvbjogQVhWZXJ0aWNhbE9yaWVudGF0aW9uIjsK
KworICAgIHJldHVybiAiQVhPcmllbnRhdGlvbjogQVhIb3Jpem9udGFsT3JpZW50YXRpb24iOwor
fQorCitzdHJpbmcgZ2V0QXR0cmlidXRlcyhjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBv
YmplY3QpCit7CisgICAgLy8gRklYTUU6IENvbmNhdGVuYXRlIGFsbCBhdHRyaWJ1dGVzIG9mIHRo
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0LgorICAgIHN0cmluZyBhdHRyaWJ1dGVzKGdldFRpdGxlKG9i
amVjdCkpOworICAgIGF0dHJpYnV0ZXMuYXBwZW5kKCJcbiIpOworICAgIGF0dHJpYnV0ZXMuYXBw
ZW5kKGdldFJvbGUob2JqZWN0KSk7CisgICAgYXR0cmlidXRlcy5hcHBlbmQoIlxuIik7CisgICAg
YXR0cmlidXRlcy5hcHBlbmQoZ2V0RGVzY3JpcHRpb24ob2JqZWN0KSk7CisgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7Cit9CisKKworLy8gQ29sbGVjdHMgYXR0cmlidXRlcyBpbnRvIGEgc3RyaW5nLCBk
ZWxpbWl0ZWQgYnkgZGFzaGVzLiBVc2VkIGJ5IGFsbCBtZXRob2RzCisvLyB0aGF0IG91dHB1dCBs
aXN0cyBvZiBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2ss
CisvLyBBdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrLCBldGMuCitjbGFzcyBBdHRyaWJ1dGVz
Q29sbGVjdG9yIHsKK3B1YmxpYzoKKyAgICB2b2lkIGNvbGxlY3RBdHRyaWJ1dGVzKGNvbnN0IFdl
YkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1fYXR0cmlidXRl
cy5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzLmFwcGVu
ZChnZXRBdHRyaWJ1dGVzKG9iamVjdCkpOworICAgIH0KKworICAgIHN0cmluZyBhdHRyaWJ1dGVz
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzOyB9CisKK3ByaXZhdGU6CisgICAgc3RyaW5n
IG1fYXR0cmlidXRlczsKK307CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBGYWN0b3J5
KiBmYWN0b3J5KQorICAgIDogbV9hY2Nlc3NpYmlsaXR5T2JqZWN0KG9iamVjdCkKKyAgICAsIG1f
ZmFjdG9yeShmYWN0b3J5KQoreworCisgICAgQVNTRVJUKGZhY3RvcnkpOworCisgICAgLy8KKyAg
ICAvLyBQcm9wZXJ0aWVzCisgICAgLy8KKworICAgIGJpbmRQcm9wZXJ0eSgicm9sZSIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0
eSgidGl0bGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVHZXR0ZXJDYWxsYmFjayk7
CisgICAgYmluZFByb3BlcnR5KCJkZXNjcmlwdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImhlbHBUZXh0
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0R2V0dGVyQ2FsbGJhY2spOworICAg
IGJpbmRQcm9wZXJ0eSgic3RyaW5nVmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Ry
aW5nVmFsdWVHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJ4IiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnhHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJ5Iiwg
JkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnlHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3Bl
cnR5KCJ3aWR0aCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aEdldHRlckNhbGxiYWNr
KTsKKyAgICBiaW5kUHJvcGVydHkoImhlaWdodCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpo
ZWlnaHRHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpbnRWYWx1ZSIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJv
cGVydHkoIm1pblZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlR2V0dGVy
Q2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgibWF4VmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWF4VmFsdWVHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJjaGls
ZHJlbkNvdW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnRHZXR0ZXJD
YWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpbnNlcnRpb25Qb2ludExpbmVOdW1iZXIiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVyQ2Fs
bGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgic2VsZWN0ZWRUZXh0UmFuZ2UiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayk7CisgICAgYmlu
ZFByb3BlcnR5KCJpc0VuYWJsZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVk
R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNSZXF1aXJlZCIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9w
ZXJ0eSgiaXNGb2N1c2VkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZEdldHRl
ckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzRm9jdXNhYmxlIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0
eSgiaXNTZWxlY3RlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkR2V0dGVy
Q2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNTZWxlY3RhYmxlIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVy
dHkoImlzTXVsdGlTZWxlY3RhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlT
ZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNTZWxlY3RlZE9w
dGlvbkFjdGl2ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0
aXZlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNFeHBhbmRlZCIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQ
cm9wZXJ0eSgiaXNDaGVja2VkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZEdl
dHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzVmlzaWJsZSIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5
KCJpc09mZlNjcmVlbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbkdldHRl
ckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzQ29sbGFwc2VkIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0
eSgiaGFzUG9wdXAiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXBHZXR0ZXJDYWxs
YmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc1ZhbGlkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzVmFsaWRHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJvcmllbnRhdGlv
biIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKTsK
KworICAgIC8vCisgICAgLy8gTWV0aG9kcworICAgIC8vCisKKyAgICBiaW5kTWV0aG9kKCJhbGxB
dHRyaWJ1dGVzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXNDYWxsYmFj
ayk7CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50cyIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2sp
OworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rc0NhbGxiYWNrKTsKKyAgICBi
aW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDaGlsZHJlbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJsaW5lRm9y
SW5kZXgiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4Q2FsbGJhY2spOwor
ICAgIGJpbmRNZXRob2QoImJvdW5kc0ZvclJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInN0cmluZ0ZvclJhbmdl
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlQ2FsbGJhY2spOworICAg
IGJpbmRNZXRob2QoImNoaWxkQXRJbmRleCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGls
ZEF0SW5kZXhDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiZWxlbWVudEF0UG9pbnQiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnRDYWxsYmFjayk7CisgICAgYmluZE1l
dGhvZCgiYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0
dHJpYnV0ZXNPZlJvd0hlYWRlcnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mUm93SGVhZGVyc0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDb2x1
bW5zIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFj
ayk7CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mUm93cyIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJp
YnV0ZXNPZlZpc2libGVDZWxscyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZWaXNpYmxlQ2VsbHNDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mSGVh
ZGVyIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNr
KTsKKyAgICBiaW5kTWV0aG9kKCJpbmRleEluVGFibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aW5kZXhJblRhYmxlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInJvd0luZGV4UmFuZ2Ui
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZUNhbGxiYWNrKTsKKyAgICBi
aW5kTWV0aG9kKCJjb2x1bW5JbmRleFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNv
bHVtbkluZGV4UmFuZ2VDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiY2VsbEZvckNvbHVtbkFu
ZFJvdyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJh
Y2spOworICAgIGJpbmRNZXRob2QoInRpdGxlVUlFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInNldFNlbGVj
dGVkVGV4dFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJh
bmdlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZVZhbHVlIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZVZhbHVlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2Qo
ImlzQXR0cmlidXRlU2V0dGFibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1
dGVTZXR0YWJsZUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJpc0FjdGlvblN1cHBvcnRlZCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0FjdGlvblN1cHBvcnRlZENhbGxiYWNrKTsKKyAg
ICBiaW5kTWV0aG9kKCJwYXJlbnRFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmVudEVsZW1lbnRDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiaW5jcmVtZW50IiwgJkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJk
ZWNyZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2FsbGJhY2spOwor
ICAgIGJpbmRNZXRob2QoInNob3dNZW51IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dN
ZW51Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInByZXNzIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnByZXNzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImlzRXF1YWwiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNFcXVhbENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhZGRO
b3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJyZW1vdmVOb3RpZmljYXRp
b25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25M
aXN0ZW5lckNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJ0YWtlRm9jdXMiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInNjcm9s
bFRvTWFrZVZpc2libGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlz
aWJsZUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1
YkZvY3VzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRo
U3ViRm9jdXNDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgic2Nyb2xsVG9HbG9iYWxQb2ludCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2spOwor
CisgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpmYWxsYmFj
a0NhbGxiYWNrKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBt
X2ZhY3RvcnktPmdldE9yQ3JlYXRlKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGlsZEF0KGluZGV4
KSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFcXVhbChjb25zdCBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG90aGVyKQoreworICAgIHJldHVybiBhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuZXF1YWxzKG90aGVyKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1l
KQoreworICAgIHNpemVfdCBjYWxsYmFja0NvdW50ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Mu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7
CisgICAgICAgIENwcFZhcmlhbnQgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBu
b3RpZmljYXRpb25OYW1lQXJndW1lbnQuc2V0KG5vdGlmaWNhdGlvbk5hbWUpOworICAgICAgICBD
cHBWYXJpYW50IGludm9rZVJlc3VsdDsKKyAgICAgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3Nb
aV0uaW52b2tlRGVmYXVsdCgmbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50LCAxLCBpbnZva2VSZXN1
bHQpOworICAgIH0KK30KKworLy8KKy8vIFByb3BlcnRpZXMKKy8vCisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldChnZXRSb2xlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldFRpdGxlKGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldERl
c2NyaXB0aW9uKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmhlbHBUZXh0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIHJlc3VsdC0+c2V0KGdldEhlbHBUZXh0KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlR2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldFN0cmluZ1ZhbHVl
KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLngpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnlHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94
UmVjdCgpLnkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS53aWR0aCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJl
Y3QoKS5oZWlnaHQpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVl
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS52YWx1ZUZvclJhbmdlKCkpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5taW5WYWx1ZUZvclJh
bmdlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5tYXhWYWx1ZUZvclJhbmdlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaW50IGNvdW50ID0gMTsgLy8gUm9vdCBvYmplY3QgYWx3YXlzIGhhcyBvbmx5
IG9uZSBjaGlsZCwgdGhlIFdlYlZpZXcuCisgICAgaWYgKCFpc1Jvb3QoKSkKKyAgICAgICAgY291
bnQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRDb3VudCgpOworICAgIHJlc3VsdC0+c2V0
KGNvdW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2lu
dExpbmVOdW1iZXJHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgV2Vi
VmVjdG9yPGludD4gbGluZUJyZWFrczsKKyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubGluZUJy
ZWFrcyhsaW5lQnJlYWtzKTsKKyAgICBpbnQgY3Vyc29yID0gYWNjZXNzaWJpbGl0eU9iamVjdCgp
LnNlbGVjdGlvbkVuZCgpOworICAgIGludCBsaW5lID0gMDsKKyAgICB3aGlsZSAobGluZSA8IHN0
YXRpY19jYXN0PGludD4obGluZUJyZWFrcy5zaXplKCkpICYmIGxpbmVCcmVha3NbbGluZV0gPD0g
Y3Vyc29yKQorICAgICAgICBsaW5lKys7CisgICAgcmVzdWx0LT5zZXQobGluZSk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgor
ICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3RyaW5nKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRW5hYmxlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNFbmFibGVkKCkpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVj
dCgpLmlzUmVxdWlyZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNG
b2N1c2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0ZvY3VzZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldEZv
Y3VzQXR0cmlidXRlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzU2VsZWN0ZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jYW5TZXRT
ZWxlY3RlZEF0dHJpYnV0ZSgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c011bHRpU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNNdWx0aVNlbGVjdGFibGUoKSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2
ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSgpKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KCFhY2Nlc3NpYmlsaXR5T2JqZWN0KCku
aXNDb2xsYXBzZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVj
a2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0NoZWNrZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1Zpc2libGUoKSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW5HZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0
eU9iamVjdCgpLmlzT2ZmU2NyZWVuKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzQ29sbGFwc2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoYXNQb3B1cEdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCku
YXJpYUhhc1BvcHVwKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmFs
aWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQo
YWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzVmFsaWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6b3JpZW50YXRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXQoZ2V0T3JpZW50YXRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgp
KSk7Cit9CisKKy8vCisvLyBNZXRob2RzCisvLworCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFsbEF0dHJpYnV0ZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZ2V0QXR0cmlidXRlcyhhY2Nlc3NpYmls
aXR5T2JqZWN0KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mQ2hpbGRyZW5DYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIEF0dHJpYnV0ZXNDb2xsZWN0b3IgY29sbGVjdG9yOwor
ICAgIHVuc2lnbmVkIHNpemUgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRDb3VudCgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGNvbGxlY3Rv
ci5jb2xsZWN0QXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRBdChpKSk7Cisg
ICAgcmVzdWx0LT5zZXQoY29sbGVjdG9yLmF0dHJpYnV0ZXMoKSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldHJpemVkQXR0cmlidXRlTmFtZXNDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKCFhcmd1bWVudHMuc2l6ZSgpIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkgeworICAg
ICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGNoaWxkID0gZ2V0Q2hpbGRBdEluZGV4KGFyZ3VtZW50c1sw
XS50b0ludDMyKCkpOworICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQtPnNldCgqKGNoaWxkLT5n
ZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVs
ZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVh
ZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlz
aWJsZUNlbGxzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZUNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
b2x1bW5JbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2Vs
ZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlVmFsdWVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxICYmICFhcmd1bWVudHNbMF0uaXNTdHJpbmco
KSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHN0cmluZyBhdHRyaWJ1dGUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBi
b29sIHNldHRhYmxlID0gZmFsc2U7CisgICAgaWYgKGF0dHJpYnV0ZSA9PSAiQVhWYWx1ZSIpCisg
ICAgICAgIHNldHRhYmxlID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldFZhbHVlQXR0cmli
dXRlKCk7CisgICAgcmVzdWx0LT5zZXQoc2V0dGFibGUpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIFRoaXMgb25lIG1heSBiZSByZWFs
bHkgaGFyZCB0byBpbXBsZW1lbnQuCisgICAgLy8gTm90IGV4cG9zZWQgYnkgQWNjZXNzaWJpbGl0
eU9iamVjdC4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZWNyZW1lbnRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnVDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJl
c3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnBlcmZvcm1EZWZhdWx0QWN0aW9uKCk7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNF
cXVhbENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNb
MF0uaXNPYmplY3QoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHJlc3VsdC0+c2V0KGFyZ3VtZW50c1swXS5pc0VxdWFsKCpnZXRB
c0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEg
fHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3Mu
cHVzaF9iYWNrKGFyZ3VtZW50c1swXSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1c0NhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCkuc2V0Rm9jdXNlZCh0cnVlKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJs
ZVdpdGhTdWJGb2N1c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSAhPSA0CisgICAgICAgIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIo
KQorICAgICAgICB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgIWFyZ3Vt
ZW50c1syXS5pc051bWJlcigpCisgICAgICAgIHx8ICFhcmd1bWVudHNbM10uaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwor
ICAgIGludCB5ID0gYXJndW1lbnRzWzFdLnRvSW50MzIoKTsKKyAgICBpbnQgd2lkdGggPSBhcmd1
bWVudHNbMl0udG9JbnQzMigpOworICAgIGludCBoZWlnaHQgPSBhcmd1bWVudHNbM10udG9JbnQz
MigpOworICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1
YkZvY3VzKFdlYlJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9p
bnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgIT0gMgorICAgICAgICB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkKKyAgICAgICAg
fHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
eCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7CisgICAgaW50IHkgPSBhcmd1bWVudHNbMV0udG9J
bnQzMigpOworCisgICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9sbFRvR2xvYmFsUG9pbnQo
V2ViUG9pbnQoeCwgeSkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
ICYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK1Jvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
ICZvYmplY3QsIEZhY3RvcnkgKmZhY3RvcnkpCisgICAgOiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KG9iamVjdCwgZmFjdG9yeSkgeyB9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIFJvb3RBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgaWYgKGluZGV4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBmYWN0b3J5KCkt
PmdldE9yQ3JlYXRlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSk7Cit9CisKKworQWNjZXNzaWJpbGl0
eVVJRWxlbWVudExpc3QgOjp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QoKQoreworICAgIGNs
ZWFyKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3Q6OmNsZWFyKCkKK3sK
KyAgICBmb3IgKEVsZW1lbnRMaXN0OjppdGVyYXRvciBpID0gbV9lbGVtZW50cy5iZWdpbigpOyBp
ICE9IG1fZWxlbWVudHMuZW5kKCk7ICsraSkKKyAgICAgICAgZGVsZXRlICgqaSk7CisgICAgbV9l
bGVtZW50cy5jbGVhcigpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50TGlzdDo6Z2V0T3JDcmVhdGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYgb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IG1fZWxlbWVudHMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKG1f
ZWxlbWVudHNbaV0tPmlzRXF1YWwob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2VsZW1l
bnRzW2ldOworICAgIH0KKworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBu
ZXcgQWNjZXNzaWJpbGl0eVVJRWxlbWVudChvYmplY3QsIHRoaXMpOworICAgIG1fZWxlbWVudHMu
YXBwZW5kKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50OworfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdDo6Y3JlYXRlUm9vdChjb25zdCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogZWxlbWVudCA9IG5ldyBSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudChvYmplY3QsIHRo
aXMpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50
OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWU2ZDQx
MmZmMTlkMWU5ZGIwMzNhOTUzZWI2NDAxZDU0N2M4OTkxCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaAor
I2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKKworI2luY2x1ZGUgIkNwcEJvdW5kQ2xh
c3MuaCIKKyNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSA8dmVj
dG9yPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBGYWN0b3J5
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkZhY3RvcnkoKSB7IH0KKyAgICAgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSA9IDA7CisgICAgfTsKKworICAgIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgRmFjdG9y
eSopOworCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRDaGlsZEF0SW5k
ZXgodW5zaWduZWQpOworICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VxdWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNz
aWJpbGl0eU9iamVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVk
KGNvbnN0IGNoYXIgKm5vdGlmaWNhdGlvbk5hbWUpOworCitwcm90ZWN0ZWQ6CisgICAgY29uc3Qg
V2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0OyB9CisKKyAgICBGYWN0b3J5KiBmYWN0
b3J5KCkgY29uc3QgeyByZXR1cm4gbV9mYWN0b3J5OyB9CisKK3ByaXZhdGU6CisgICAgLy8gQm91
bmQgcHJvcGVydGllcy4KKyAgICB2b2lkIHJvbGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7
CisgICAgdm9pZCB0aXRsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGRl
c2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaGVscFRleHRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzdHJpbmdWYWx1ZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7CisgICAgdm9pZCB5R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgd2lk
dGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBoZWlnaHRHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpbnRWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIG1pblZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgbWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBj
aGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaW5zZXJ0
aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQg
c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBp
c0VuYWJsZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1JlcXVpcmVk
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNGb2N1c2VkR2V0dGVyQ2Fs
bGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1NlbGVjdGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgaXNTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgaXNNdWx0aVNlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBpc1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCop
OworICAgIHZvaWQgaXNFeHBhbmRlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIGlzQ2hlY2tlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzVmlz
aWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzT2ZmU2NyZWVuR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNDb2xsYXBzZWRHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBoYXNQb3B1cEdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGlzVmFsaWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKworICAgIC8v
IEJvdW5kIG1ldGhvZHMuCisgICAgdm9pZCBhbGxBdHRyaWJ1dGVzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIGF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZDaGlsZHJlbkNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHBh
cmFtZXRyaXplZEF0dHJpYnV0ZU5hbWVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworICAgIHZvaWQgbGluZUZvckluZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYm91bmRzRm9yUmFuZ2VDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzdHJpbmdG
b3JSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGNoaWxkQXRJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVy
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IGF0dHJpYnV0ZXNPZlJvd0hlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRlc09mUm93
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IGF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGluZGV4SW5UYWJsZUNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJv
d0luZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBjb2x1bW5JbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHRpdGxlVUlFbGVt
ZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVWYWx1ZUNhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzQXR0cmlidXRlU2V0dGFibGVD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBp
c0FjdGlvblN1cHBvcnRlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpbmNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBkZWNyZW1lbnRDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzaG93TWVudUNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHBy
ZXNzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgaXNFcXVhbENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCB0YWtlRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJG
b2N1c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisKKyAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKKyAgICBGYWN0b3J5KiBtX2ZhY3Rvcnk7CisgICAg
c3RkOjp2ZWN0b3I8Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7Cit9OworCisK
K2NsYXNzIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IDogcHVibGljIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgeworcHVibGljOgorICAgIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0
IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYsIEZhY3RvcnkqKTsKKworICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworCisv
LyBQcm92aWRlcyBzaW1wbGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0aGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCBpbnN0YW5jZXM6CisvLyBhbGwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudHMgZXZl
ciBjcmVhdGVkIGZyb20gdGhlIGNvbnRyb2xsZXIgYXJlIHN0b3JlZCBpbgorLy8gYSBsaXN0IGFu
ZCBjbGVhcmVkIGV4cGxpY2l0bHkuCitjbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6
IHB1YmxpYyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCgpIHsgfQorICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnRMaXN0KCk7CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2li
aWxpdHlPYmplY3QmKTsKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBjcmVhdGVSb290KGNv
bnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOworCitwcml2YXRlOgorICAgIHR5
cGVkZWYgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPiBFbGVtZW50TGlzdDsKKyAgICBF
bGVtZW50TGlzdCBtX2VsZW1lbnRzOworfTsKKworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>