<?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>16136</bug_id>
          
          <creation_ts>2007-11-25 18:25:56 -0800</creation_ts>
          <short_desc>Use shared PixelDumpSupport for Mac DRT</short_desc>
          <delta_ts>2007-11-26 13:17:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>62342</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-11-25 18:25:56 -0800</bug_when>
    <thetext>Now that the windows pixel dump code has landed, we should use the same code for both platform where possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62378</commentid>
    <comment_count>1</comment_count>
      <attachid>17532</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-11-26 10:47:55 -0800</bug_when>
    <thetext>Created attachment 17532
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62379</commentid>
    <comment_count>2</comment_count>
      <attachid>17532</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-26 10:54:28 -0800</bug_when>
    <thetext>Comment on attachment 17532
patch

You might mention in the ChangeLog that you&apos;re now using ImageDiffCG as well.

+void drawWebViewIntoContext(CGContextRef);
+void repaintWithVerticalSweep(CGContextRef);
+void repaintWithHorizontalSweep(CGContextRef);
+void drawSelectionRectIntoContext(CGContextRef, CGRect);

How about:

void paintWebView(CGContextRef);
void repaintWebView(CGContextRef, bool horizontal);
void drawSelectionRect(CGContextRef, const CGRect&amp;);

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62390</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-11-26 13:17:06 -0800</bug_when>
    <thetext>Fixes landed in r28042 and r28047.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17532</attachid>
            <date>2007-11-26 10:47:55 -0800</date>
            <delta_ts>2007-11-26 10:54:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>sharedPixelDump.diff</filename>
            <type>text/plain</type>
            <size>72236</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4MDM5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMDctMTEt
MjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaXggZm9yIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTM2CisgICAgICAgIFVzZSBzaGFy
ZWQgUGl4ZWxEdW1wU3VwcG9ydCBmb3IgTWFjIERSVAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QaXhl
bER1bXBTdXBwb3J0Lmg6IENvcGllZCBmcm9tIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBT
dXBwb3J0LmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2cvSW1hZ2VEaWZmQ0cuY3BwOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA6CisgICAg
ICAgIChkcmF3U2VsZWN0aW9uUmVjdEludG9Db250ZXh0KToKKyAgICAgICAgKGR1bXBXZWJWaWV3
QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jZy9QaXhlbER1bXBTdXBwb3J0Q0cuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
Q29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvSW1hZ2VEaWZmLm06IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9ydC5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvUGl4ZWxEdW1wU3VwcG9ydE1hYy5tbTogQ29waWVkIGZyb20gRHVtcFJlbmRl
clRyZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnQubW0uCisgICAgICAgIChzZXREZWZhdWx0Q29sb3JQ
cm9maWxlVG9SR0IpOgorICAgICAgICAoZ2V0Qml0bWFwQ29udGV4dEZyb21XZWJWaWV3KToKKyAg
ICAgICAgKGRyYXdXZWJWaWV3SW50b0NvbnRleHQpOgorICAgICAgICAocmVwYWludFdpdGhWZXJ0
aWNhbFN3ZWVwKToKKyAgICAgICAgKHJlcGFpbnRXaXRoSG9yaXpvbnRhbFN3ZWVwKToKKyAgICAg
ICAgKGdldFNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhl
bER1bXBTdXBwb3J0Lmg6IFJlbW92ZWQuCisKIDIwMDctMTEtMjUgIERhdmlkIEQuIEtpbHplciAg
PGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVnIDE2MDUyOiBwcmVwYXJlLUNoYW5n
ZUxvZyBkb2Vzbid0IHJlcG9ydCBkZWxldGVkIGZpbGVzCkluZGV4OiBEdW1wUmVuZGVyVHJlZS9Q
aXhlbER1bXBTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1w
U3VwcG9ydC5oCShyZXZpc2lvbiAyODAyOCkJKGZyb20gRHVtcFJlbmRlclRyZWUvd2luL1BpeGVs
RHVtcFN1cHBvcnQuaDoyODAyOCkKKysrIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQaXhlbER1bXBTdXBw
b3J0X2gKKyNkZWZpbmUgUGl4ZWxEdW1wU3VwcG9ydF9oCisKKy8vIEZJWE1FOiBUaGlzIGZpbGUg
c2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3aW4vIHN1YmRpcmVjdG9yeS4KKwordm9pZCBkdW1wV2Vi
Vmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBjaGFyKiBjdXJyZW50VGVz
dCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKTsKKworI2VuZGlmIC8vIFBpeGVsRHVt
cFN1cHBvcnRfaApJbmRleDogRHVtcFJlbmRlclRyZWUvUGl4ZWxEdW1wU3VwcG9ydC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIER1bXBSZW5kZXJUcmVlL1BpeGVsRHVtcFN1cHBvcnQuaAkocmV2aXNpb24gMjgw
MjgpCisrKyBEdW1wUmVuZGVyVHJlZS9QaXhlbER1bXBTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4
ICsyOSwxMiBAQAogI2lmbmRlZiBQaXhlbER1bXBTdXBwb3J0X2gKICNkZWZpbmUgUGl4ZWxEdW1w
U3VwcG9ydF9oCiAKLS8vIEZJWE1FOiBUaGlzIGZpbGUgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3
aW4vIHN1YmRpcmVjdG9yeS4KLQogdm9pZCBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdp
dGhFeHBlY3RlZChjb25zdCBjaGFyKiBjdXJyZW50VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9E
dW1wUGl4ZWxzKTsKIAorLy8gQ2FuIGJlIHVzZWQgYXMgYSBzaWduYWwgaGFuZGxlcgordm9pZCBy
ZXN0b3JlQ29sb3JTcGFjZShpbnQgaWdub3JlZCk7CisKKy8vIE1heSBjaGFuZ2UgeW91ciBjb2xv
ciBzcGFjZSwgcmVxdWlyaW5nIGEgY2FsbCB0byByZXN0b3JlQ29sb3JTcGFjZQordm9pZCBpbml0
aWFsaXplQ29sb3JTcGFjZUFuZFNjcmVlQnVmZmVyRm9yUGl4ZWxUZXN0cygpOworCiAjZW5kaWYg
Ly8gUGl4ZWxEdW1wU3VwcG9ydF9oCkluZGV4OiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJl
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIER1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4MDM4
KQorKysgRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsNyBAQAogCQlBOEI5MUFEQzBDRjNCMzJG
MDA4RjkxRkYgLyogRHVtcFJlbmRlclRyZWVXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEI5MUFEOTBDRjNCMzJGMDA4RjkxRkYgLyogRHVt
cFJlbmRlclRyZWVXaW5kb3cubW0gKi87IH07CiAJCUE4QjkxQUUwMENGM0IzNzIwMDhGOTFGRiAv
KiBEdW1wUmVuZGVyVHJlZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThCOTFBREQwQ0YzQjM3MjAwOEY5MUZGIC8qIER1bXBSZW5kZXJUcmVl
V2luZG93LmggKi87IH07CiAJCUE4QjkxQUUyMENGM0IzNzIwMDhGOTFGRiAvKiBEdW1wUmVuZGVy
VHJlZVBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QjkxQURGMENGM0IzNzIwMDhGOTFGRiAvKiBEdW1wUmVuZGVyVHJlZVBhc3RlYm9h
cmQuaCAqLzsgfTsKLQkJQThCOTFCRkEwQ0Y1MjJCNDAwOEY5MUZGIC8qIFBpeGVsRHVtcFN1cHBv
cnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4Qjkx
QkY0MENGNTIyQjQwMDhGOTFGRiAvKiBQaXhlbER1bXBTdXBwb3J0LmggKi87IH07CiAJCUE4Qjkx
QkZCMENGNTIyQjQwMDhGOTFGRiAvKiBKYXZhU2NyaXB0VGhyZWFkaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEI5MUJGNTBDRjUyMkI0MDA4Rjkx
RkYgLyogSmF2YVNjcmlwdFRocmVhZGluZy5oICovOyB9OwotCQlBOEI5MUJGQzBDRjUyMkI0MDA4
RjkxRkYgLyogUGl4ZWxEdW1wU3VwcG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QjkxQkY2MENGNTIyQjQwMDhGOTFGRiAvKiBQaXhlbER1bXBT
dXBwb3J0Lm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItV25vLWRlcHJlY2F0
ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKIAkJQThCOTFCRkQwQ0Y1MjJCNDAwOEY5MUZGIC8qIENo
ZWNrZWRNYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThCOTFCRjcwQ0Y1MjJCNDAwOEY5MUZGIC8qIENoZWNrZWRNYWxsb2MuY3BwICovOyB9
OwogCQlBOEI5MUJGRTBDRjUyMkI0MDA4RjkxRkYgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEI5MUJGODBD
RjUyMkI0MDA4RjkxRkYgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4Qjkx
QkZGMENGNTIyQjQwMDhGOTFGRiAvKiBDaGVja2VkTWFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEI5MUJGOTBDRjUyMkI0MDA4RjkxRkYgLyog
Q2hlY2tlZE1hbGxvYy5oICovOyB9OwpAQCAtODYsOSArODQsMTMgQEAKIAkJQkNBMThCN0UwQzlC
MDhGMTAwMTE0MzY5IC8qIE9iakNQbHVnaW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4Qjc3MEM5QjA4RjEwMDExNDM2OSAvKiBPYmpDUGx1Z2lu
Lm0gKi87IH07CiAJCUJDQTE4QjdGMEM5QjA4RjEwMDExNDM2OSAvKiBPYmpDUGx1Z2luRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4
Qjc4MEM5QjA4RjEwMDExNDM2OSAvKiBPYmpDUGx1Z2luRnVuY3Rpb24uaCAqLzsgfTsKIAkJQkNB
MThCODAwQzlCMDhGMTAwMTE0MzY5IC8qIE9iakNQbHVnaW5GdW5jdGlvbi5tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThCNzkwQzlCMDhGMTAwMTE0
MzY5IC8qIE9iakNQbHVnaW5GdW5jdGlvbi5tICovOyB9OwotCQlCQ0ExOEI5QzBDOUIwOUI0MDAx
MTQzNjkgLyogSW1hZ2VEaWZmLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0ExOEI3NTBDOUIwOEYxMDAxMTQzNjkgLyogSW1hZ2VEaWZmLm0gKi87IH07
CiAJCUJDQTE4QzBCMEM5QjU5RUYwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMThDMEEwQzlCNTlF
RjAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlTWFjLmggKi87IH07CiAJCUJDQTE4QzQ3MEM5QjVC
OTQwMDExNDM2OSAvKiBEdW1wUmVuZGVyVHJlZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE4QzQ2MEM5QjVCOTQwMDExNDM2OSAvKiBEdW1wUmVu
ZGVyVHJlZS5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby1kZXByZWNh
dGVkLWRlY2xhcmF0aW9ucyI7IH07IH07CisJCUJDQjI4NEM3MENGQTgzQzQwMDdFNTMzRSAvKiBQ
aXhlbER1bXBTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0IyODQ4QTBDRkE4MjBGMDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydC5oICov
OyB9OworCQlCQ0IyODRDRDBDRkE4M0M4MDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydENHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjI4NDg4
MENGQTgyMDIwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0Q0cuY3BwICovOyB9OworCQlCQ0Iy
ODREMDBDRkE4M0NDMDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydENHLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IyODQ4OTBDRkE4MjAyMDA3RTUz
M0UgLyogUGl4ZWxEdW1wU3VwcG9ydENHLmggKi87IH07CisJCUJDQjI4NEQ2MENGQTgzRDEwMDdF
NTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMjg0OEMwQ0ZBODIyMTAwN0U1MzNFIC8qIFBpeGVsRHVt
cFN1cHBvcnRNYWMubW0gKi87IH07CisJCUJDQjI4NEY2MENGQTg0RjgwMDdFNTMzRSAvKiBJbWFn
ZURpZmZDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0IyODRGMzBDRkE4NEYyMDA3RTUzM0UgLyogSW1hZ2VEaWZmQ0cuY3BwICovOyB9OwogCQlC
Q0Y2QzY1MDBDOThFOUMwMDBBQzA2M0UgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjZDNjRGMEM5OEU5QzAwMEFDMDYz
RSAvKiBHQ0NvbnRyb2xsZXIuY3BwICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCiAKQEAgLTEzNSw5ICsxMzcsNyBAQAogCQlBOEI5MUFEOTBDRjNCMzJGMDA4RjkxRkYgLyog
RHVtcFJlbmRlclRyZWVXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBEdW1wUmVuZGVyVHJlZVdpbmRvdy5tbTsgcGF0aCA9IG1hYy9EdW1wUmVuZGVyVHJl
ZVdpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThCOTFBREQwQ0YzQjM3
MjAwOEY5MUZGIC8qIER1bXBSZW5kZXJUcmVlV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlV2luZG93Lmg7IHBhdGggPSBtYWMvRHVtcFJlbmRl
clRyZWVXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThCOTFBREYwQ0Yz
QjM3MjAwOEY5MUZGIC8qIER1bXBSZW5kZXJUcmVlUGFzdGVib2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQuaDsgcGF0aCA9IG1h
Yy9EdW1wUmVuZGVyVHJlZVBhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQThCOTFCRjQwQ0Y1MjJCNDAwOEY5MUZGIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGl4ZWxEdW1wU3VwcG9ydC5oOyBwYXRoID0gbWFj
L1BpeGVsRHVtcFN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThCOTFC
RjUwQ0Y1MjJCNDAwOEY5MUZGIC8qIEphdmFTY3JpcHRUaHJlYWRpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSmF2YVNjcmlwdFRocmVhZGluZy5oOyBwYXRoID0gbWFjL0ph
dmFTY3JpcHRUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThCOTFC
RjYwQ0Y1MjJCNDAwOEY5MUZGIC8qIFBpeGVsRHVtcFN1cHBvcnQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQaXhlbER1bXBTdXBwb3J0Lm1tOyBwYXRoID0gbWFj
L1BpeGVsRHVtcFN1cHBvcnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4Qjkx
QkY3MENGNTIyQjQwMDhGOTFGRiAvKiBDaGVja2VkTWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENoZWNrZWRNYWxsb2MuY3BwOyBwYXRoID0gbWFjL0NoZWNr
ZWRNYWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEI5MUJGODBDRjUy
MkI0MDA4RjkxRkYgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhU2NyaXB0VGhyZWFkaW5nLmNwcDsgcGF0aCA9IG1hYy9K
YXZhU2NyaXB0VGhyZWFkaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThC
OTFCRjkwQ0Y1MjJCNDAwOEY5MUZGIC8qIENoZWNrZWRNYWxsb2MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ2hlY2tlZE1hbGxvYy5oOyBwYXRoID0gbWFjL0NoZWNrZWRNYWxs
b2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NSw3ICsxNzUsNiBAQAogCQlC
Q0ExOEI2RTBDOUIwOERCMDAxMTQzNjkgLyogTmF2aWdhdGlvbkNvbnRyb2xsZXIubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IE5hdmlnYXRpb25Db250cm9sbGVyLm07IHBh
dGggPSBtYWMvTmF2aWdhdGlvbkNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMThCNzMwQzlCMDhGMTAwMTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZURy
YWdnaW5nSW5mby5oOyBwYXRoID0gbWFjL0R1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE4Qjc0MEM5QjA4RjEwMDExNDM2OSAvKiBE
dW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5tbTsgcGF0aCA9IG1hYy9E
dW1wUmVuZGVyVHJlZURyYWdnaW5nSW5mby5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkNBMThCNzUwQzlCMDhGMTAwMTE0MzY5IC8qIEltYWdlRGlmZi5tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gSW1hZ2VEaWZmLm07IHBhdGggPSBtYWMvSW1hZ2VEaWZm
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE4Qjc2MEM5QjA4RjEwMDExNDM2
OSAvKiBPYmpDUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmpD
UGx1Z2luLmg7IHBhdGggPSBtYWMvT2JqQ1BsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0ExOEI3NzBDOUIwOEYxMDAxMTQzNjkgLyogT2JqQ1BsdWdpbi5tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gT2JqQ1BsdWdpbi5tOyBwYXRoID0gbWFjL09i
akNQbHVnaW4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMThCNzgwQzlCMDhG
MTAwMTE0MzY5IC8qIE9iakNQbHVnaW5GdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gT2JqQ1BsdWdpbkZ1bmN0aW9uLmg7IHBhdGggPSBtYWMvT2JqQ1BsdWdpbkZ1
bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODcsNiArMTg2LDEyIEBA
CiAJCUJDQjI4MkY0MENGQTc0NTAwMDdFNTMzRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0
aCA9IG1hYy9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQjI4M0Q4MENGQTdBRkQwMDdFNTMzRSAvKiBJbWFnZURpZmYu
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEltYWdlRGlmZi54Y2Nv
bmZpZzsgcGF0aCA9IG1hYy9Db25maWd1cmF0aW9ucy9JbWFnZURpZmYueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjI4M0RFMENGQTdDMjAwMDdFNTMzRSAvKiBUZXN0
TmV0c2NhcGVQbHVnSW4ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9
IFRlc3ROZXRzY2FwZVBsdWdJbi54Y2NvbmZpZzsgcGF0aCA9IG1hYy9Db25maWd1cmF0aW9ucy9U
ZXN0TmV0c2NhcGVQbHVnSW4ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDQjI4NDg4MENGQTgyMDIwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0Q0cuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDMwOyBuYW1lID0gUGl4ZWxEdW1wU3VwcG9ydENHLmNw
cDsgcGF0aCA9IGNnL1BpeGVsRHVtcFN1cHBvcnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDQjI4NDg5MENGQTgyMDIwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0Q0cu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpeGVsRHVtcFN1cHBvcnRDRy5o
OyBwYXRoID0gY2cvUGl4ZWxEdW1wU3VwcG9ydENHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDQjI4NDhBMENGQTgyMEYwMDdFNTMzRSAvKiBQaXhlbER1bXBTdXBwb3J0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbER1bXBTdXBwb3J0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQjI4NDhDMENGQTgyMjEwMDdFNTMzRSAvKiBQaXhl
bER1bXBTdXBwb3J0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFBpeGVsRHVtcFN1cHBvcnRNYWMubW07IHBhdGggPSBtYWMvUGl4ZWxEdW1wU3VwcG9ydE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNCMjg0QjIwQ0ZBODJDQjAwN0U1
MzNFIC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBB
cHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OworCQlCQ0IyODRGMzBDRkE4NEYyMDA3RTUzM0UgLyogSW1hZ2VEaWZmQ0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEltYWdlRGlmZkNHLmNwcDsg
cGF0aCA9IGNnL0ltYWdlRGlmZkNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNGNkM2NEYwQzk4RTlDMDAwQUMwNjNFIC8qIEdDQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgZmlsZUVuY29kaW5nID0gMzA7IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBA
IC0yMjksMjEgKzIzNCwxOSBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJl
bmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTMyQTcwQUFCMDM3MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovLAog
CQkJCTE0MjJBMjc1MEFGNkY0QkQwMEUxQTg4MyAvKiBEZWxlZ2F0ZXMgKi8sCiAJCQkJMTQyMkEy
NjkwQUY2RjQ1MjAwRTFBODgzIC8qIENvbnRyb2xsZXJzICovLAotCQkJCTMyQTcwQUFCMDM3MDVF
MUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovLAorCQkJCUJDQjI4NDg3MENG
QTgxRUQwMDdFNTMzRSAvKiBQaXhlbER1bXAgKi8sCiAJCQkJQTgwM0ZGNzQwOUNBQUQwODAwOUIy
QTM3IC8qIER1bXBSZW5kZXJUcmVlLmggKi8sCiAJCQkJQkNBMThDNDYwQzlCNUI5NDAwMTE0MzY5
IC8qIER1bXBSZW5kZXJUcmVlLm1tICovLAogCQkJCUE4QjkxQkY3MENGNTIyQjQwMDhGOTFGRiAv
KiBDaGVja2VkTWFsbG9jLmNwcCAqLywKIAkJCQlBOEI5MUJGOTBDRjUyMkI0MDA4RjkxRkYgLyog
Q2hlY2tlZE1hbGxvYy5oICovLAogCQkJCUE4QjkxQkY4MENGNTIyQjQwMDhGOTFGRiAvKiBKYXZh
U2NyaXB0VGhyZWFkaW5nLmNwcCAqLywKIAkJCQlBOEI5MUJGNTBDRjUyMkI0MDA4RjkxRkYgLyog
SmF2YVNjcmlwdFRocmVhZGluZy5oICovLAotCQkJCUE4QjkxQkY0MENGNTIyQjQwMDhGOTFGRiAv
KiBQaXhlbER1bXBTdXBwb3J0LmggKi8sCi0JCQkJQThCOTFCRjYwQ0Y1MjJCNDAwOEY5MUZGIC8q
IFBpeGVsRHVtcFN1cHBvcnQubW0gKi8sCiAJCQkJQkNBMThDMEEwQzlCNTlFRjAwMTE0MzY5IC8q
IER1bXBSZW5kZXJUcmVlTWFjLmggKi8sCiAJCQkJQkNBMThCNzMwQzlCMDhGMTAwMTE0MzY5IC8q
IER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLmggKi8sCiAJCQkJQkNBMThCNzQwQzlCMDhGMTAw
MTE0MzY5IC8qIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvLm1tICovLAotCQkJCUJDQTE4Qjc1
MEM5QjA4RjEwMDExNDM2OSAvKiBJbWFnZURpZmYubSAqLywKIAkJCQlCQzlEOTAyMTBDOTc0NzJE
MDA5OUE0QTMgLyogV29ya1F1ZXVlLmNwcCAqLywKIAkJCQlCQzlEOTAyMjBDOTc0NzJFMDA5OUE0
QTMgLyogV29ya1F1ZXVlLmggKi8sCiAJCQkJQkM5RDkwMjMwQzk3NDcyRTAwOTlBNEEzIC8qIFdv
cmtRdWV1ZUl0ZW0uaCAqLywKQEAgLTMzMiwxMSArMzM1LDEyIEBACiAJCUE4MDNGRjY0MDlDQUFD
QzEwMDlCMkEzNyAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKLQkJCQk5MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1l
d29yayAqLywKKwkJCQlCQ0IyODRCMjBDRkE4MkNCMDA3RTUzM0UgLyogQXBwbGljYXRpb25TZXJ2
aWNlcy5mcmFtZXdvcmsgKi8sCisJCQkJQUU4MjU3RUYwOEQyMjM4OTAwMDUwN0FCIC8qIENhcmJv
bi5mcmFtZXdvcmsgKi8sCisJCQkJQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVGIC8qIENvY29hLmZy
YW1ld29yayAqLywKIAkJCQlBODE3MDkwMzA4QjE2NEQzMDBDQ0I5RkIgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrICovLAogCQkJCUI1QTc1MkExMDhBRjVEMUYwMDEzOEU0NSAvKiBRdWFydHpD
b3JlLmZyYW1ld29yayAqLywKLQkJCQlBODRGNjA4OTA4QjEzNkRBMDBFOTc0NUYgLyogQ29jb2Eu
ZnJhbWV3b3JrICovLAotCQkJCUFFODI1N0VGMDhEMjIzODkwMDA1MDdBQiAvKiBDYXJib24uZnJh
bWV3b3JrICovLAorCQkJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBXZWJLaXQuZnJhbWV3
b3JrICovLAogCQkJKTsKIAkJCW5hbWUgPSBGcmFtZXdvcmtzOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTM3Niw2ICszODAsMTggQEAKIAkJCW5hbWUgPSBDb25maWd1cmF0aW9uczsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUJDQjI4NDg3MENGQTgxRUQwMDdF
NTMzRSAvKiBQaXhlbER1bXAgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUJDQjI4NEYzMENGQTg0RjIwMDdFNTMzRSAvKiBJbWFnZURpZmZDRy5jcHAgKi8s
CisJCQkJQkNCMjg0OEEwQ0ZBODIwRjAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCAqLywK
KwkJCQlCQ0IyODQ4ODBDRkE4MjAyMDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydENHLmNwcCAq
LywKKwkJCQlCQ0IyODQ4OTBDRkE4MjAyMDA3RTUzM0UgLyogUGl4ZWxEdW1wU3VwcG9ydENHLmgg
Ki8sCisJCQkJQkNCMjg0OEMwQ0ZBODIyMTAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnRNYWMu
bW0gKi8sCisJCQkpOworCQkJbmFtZSA9IFBpeGVsRHVtcDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhI
ZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC00MTMsOSArNDI5LDEwIEBACiAJCQkJQkM5
RDkwMjYwQzk3NDcyRTAwOTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QjkxQUUwMENGM0IzNzIwMDhGOTFGRiAvKiBEdW1wUmVuZGVyVHJlZVdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThCOTFBRTIwQ0YzQjM3MjAwOEY5MUZGIC8qIER1bXBSZW5kZXJU
cmVlUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThCOTFCRkEwQ0Y1MjJCNDAwOEY5
MUZGIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QjkxQkZCMENG
NTIyQjQwMDhGOTFGRiAvKiBKYXZhU2NyaXB0VGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEI5MUJGRjBDRjUyMkI0MDA4RjkxRkYgLyogQ2hlY2tlZE1hbGxvYy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNCMjg0QzcwQ0ZBODNDNDAwN0U1MzNFIC8qIFBpeGVsRHVtcFN1cHBvcnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDQjI4NEQwMENGQTgzQ0MwMDdFNTMzRSAvKiBQaXhlbER1bXBT
dXBwb3J0Q0cuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTUxLDkgKzU2OCwxMCBAQAogCQkJCUJDQTE4
QjI2MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThCOTFBREEwQ0YzQjMyRjAwOEY5MUZGIC8qIER1bXBSZW5kZXJUcmVlUGFzdGVib2Fy
ZC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThCOTFBREMwQ0YzQjMyRjAwOEY5MUZGIC8qIER1bXBS
ZW5kZXJUcmVlV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQThCOTFCRkMwQ0Y1MjJCNDAw
OEY5MUZGIC8qIFBpeGVsRHVtcFN1cHBvcnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEI5MUJG
RDBDRjUyMkI0MDA4RjkxRkYgLyogQ2hlY2tlZE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEI5MUJGRTBDRjUyMkI0MDA4RjkxRkYgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQ0IyODRDRDBDRkE4M0M4MDA3RTUzM0UgLyogUGl4ZWxEdW1wU3Vw
cG9ydENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDQjI4NEQ2MENGQTgzRDEwMDdFNTMzRSAv
KiBQaXhlbER1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC01NjEsNyArNTc5LDcg
QEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0g
MjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCUJDQTE4QjlDMEM5QjA5QjQwMDExNDM2OSAv
KiBJbWFnZURpZmYubSBpbiBTb3VyY2VzICovLAorCQkJCUJDQjI4NEY2MENGQTg0RjgwMDdFNTMz
RSAvKiBJbWFnZURpZmZDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IER1bXBSZW5kZXJUcmVl
L2NnL0ltYWdlRGlmZkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBEdW1wUmVuZGVyVHJlZS9jZy9JbWFn
ZURpZmZDRy5jcHAJKHJldmlzaW9uIDI4MDM4KQorKysgRHVtcFJlbmRlclRyZWUvY2cvSW1hZ2VE
aWZmQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwyNCBAQAogI2luY2x1ZGUgPGlv
Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxMYXVuY2hTZXJ2aWNl
cy9VVENvcmVUeXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgQ0dGTE9BVF9ERUZJTkVECisjaWZk
ZWYgX19MUDY0X18KK3R5cGVkZWYgZG91YmxlIENHRmxvYXQ7CisjZWxzZQordHlwZWRlZiBmbG9h
dCBDR0Zsb2F0OworI2VuZGlmCisjZGVmaW5lIENHRkxPQVRfREVGSU5FRCAxCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorI2lmIFBMQVRGT1JNKFdJTikKIHN0YXRpYyBjb25zdCBD
RlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKKyNlbmRpZgogCiBz
dGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlRnJvbVN0ZGluKGludCBieXRl
c1JlbWFpbmluZykKIHsKSW5kZXg6IER1bXBSZW5kZXJUcmVlL2NnL1BpeGVsRHVtcFN1cHBvcnRD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3VwcG9ydENH
LmNwcAkocmV2aXNpb24gMjgwMzgpCisrKyBEdW1wUmVuZGVyVHJlZS9jZy9QaXhlbER1bXBTdXBw
b3J0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICoKQEAgLTI4LDggKzI4LDEwIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDRy5o
IgogCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxJbWFnZUlP
L0NHSW1hZ2VEZXN0aW5hdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMzgsMTEgKzQwLDE0IEBACiAjaWYgUExBVEZPUk0o
V0lOKQogI2luY2x1ZGUgIk1ENS5oIgogI2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPExh
dW5jaFNlcnZpY2VzL1VUQ29yZVR5cGVzLmg+CiAjZGVmaW5lIENPTU1PTl9ESUdFU1RfRk9SX09Q
RU5TU0wKICNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uRGlnZXN0Lmg+CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKFdJTikKIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0g
Q0ZTVFIoInB1YmxpYy5wbmciKTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBwcmludFBORyhDR0lt
YWdlUmVmIGltYWdlKQogewpAQCAtODAsMTAgKzg1LDMyIEBAIHN0YXRpYyB2b2lkIGdldE1ENUhh
c2hTdHJpbmdGb3JCaXRtYXAoQ0cKICAgICAgICAgc25wcmludGYoc3RyaW5nLCAzMywgIiVzJTAy
eCIsIHN0cmluZywgaGFzaFtpXSk7CiB9CiAKK3ZvaWQgZHJhd1NlbGVjdGlvblJlY3RJbnRvQ29u
dGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IHJlY3QpCit7CisgICAgY29uc3QgQ0dG
bG9hdCByZWRDb2xvcls0XSA9IHsgMS4wLCAwLjAsIDAuMCwgMC4wIH07CisKKyAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yKGNvbnRl
eHQsIHJlZENvbG9yKTsKKyAgICBDR0NvbnRleHRTdHJva2VSZWN0KGNvbnRleHQsIHJlY3QpOwor
ICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CisKIHZvaWQgZHVtcFdlYlZp
ZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoY29uc3QgY2hhciogLypjdXJyZW50VGVz
dCovLCBib29sIC8qZm9yY2VBbGxUZXN0c1RvRHVtcFBpeGVscyovKQogewogICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNvbnRleHQgPSBnZXRCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoKTsK
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIWxheW91dFRlc3RDb250cm9sbGVyLT50ZXN0
UmVwYWludCgpKQorICAgICAgICBkcmF3V2ViVmlld0ludG9Db250ZXh0KGNvbnRleHQuZ2V0KCkp
OworICAgIGVsc2UgaWYgKCFsYXlvdXRUZXN0Q29udHJvbGxlci0+dGVzdFJlcGFpbnRTd2VlcEhv
cml6b250YWxseSgpKQorICAgICAgICByZXBhaW50V2l0aFZlcnRpY2FsU3dlZXAoY29udGV4dC5n
ZXQoKSk7CisgICAgZWxzZQorICAgICAgICByZXBhaW50V2l0aEhvcml6b250YWxTd2VlcChjb250
ZXh0LmdldCgpKTsKKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNlbGVjdGlv
blJlY3QoKSkKKyAgICAgICAgZHJhd1NlbGVjdGlvblJlY3RJbnRvQ29udGV4dChjb250ZXh0Lmdl
dCgpLCBnZXRTZWxlY3Rpb25SZWN0KCkpOworI2VuZGlmCisKICAgICAvLyBDb21wdXRlIHRoZSBh
Y3R1YWwgaGFzaCB0byBjb21wYXJlIHRvIHRoZSBleHBlY3RlZCBpbWFnZSdzIGhhc2guCiAgICAg
Y2hhciBhY3R1YWxIYXNoWzMzXTsKICAgICBnZXRNRDVIYXNoU3RyaW5nRm9yQml0bWFwKGNvbnRl
eHQuZ2V0KCksIGFjdHVhbEhhc2gpOwpJbmRleDogRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1w
U3VwcG9ydENHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1wU3Vw
cG9ydENHLmgJKHJldmlzaW9uIDI4MDM4KQorKysgRHVtcFJlbmRlclRyZWUvY2cvUGl4ZWxEdW1w
U3VwcG9ydENHLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5k
ZW5uaXNAZ21haWwuY29tKQogICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKgpAQCAtMzEsMTEgKzMxLDI2IEBACiAjaWZuZGVmIFBpeGVsRHVtcFN1
cHBvcnRDR19oCiAjZGVmaW5lIFBpeGVsRHVtcFN1cHBvcnRDR19oCiAKLSNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZm5kZWYgQ0dGTE9B
VF9ERUZJTkVECisjaWZkZWYgX19MUDY0X18KK3R5cGVkZWYgZG91YmxlIENHRmxvYXQ7CisjZWxz
ZQordHlwZWRlZiBmbG9hdCBDR0Zsb2F0OworI2VuZGlmCisjZGVmaW5lIENHRkxPQVRfREVGSU5F
RCAxCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRleHRSZWY7Citz
dHJ1Y3QgQ0dSZWN0OwogCiBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBnZXRCaXRtYXBDb250ZXh0
RnJvbVdlYlZpZXcoKTsKK0NHUmVjdCBnZXRTZWxlY3Rpb25SZWN0KCk7CisKK3ZvaWQgZHJhd1dl
YlZpZXdJbnRvQ29udGV4dChDR0NvbnRleHRSZWYpOwordm9pZCByZXBhaW50V2l0aFZlcnRpY2Fs
U3dlZXAoQ0dDb250ZXh0UmVmKTsKK3ZvaWQgcmVwYWludFdpdGhIb3Jpem9udGFsU3dlZXAoQ0dD
b250ZXh0UmVmKTsKK3ZvaWQgZHJhd1NlbGVjdGlvblJlY3RJbnRvQ29udGV4dChDR0NvbnRleHRS
ZWYsIENHUmVjdCk7CiAKICNlbmRpZiAvLyBQaXhlbER1bXBTdXBwb3J0Q0dfaApJbmRleDogRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIER1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMjgwMzgpCisrKyBEdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBHcmFo
YW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTc2NCw3ICs3NjQsNyBAQCB2b2lkIGR1bXAoKQogICAgIH0KICAgICAKICAgICBpZiAoZHVtcFBp
eGVscykKLSAgICAgICAgZHVtcFdlYlZpZXdBc1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQo
Y3VycmVudFRlc3QsIGR1bXBBbGxQaXhlbHMpOworICAgICAgICBkdW1wV2ViVmlld0FzUGl4ZWxz
QW5kQ29tcGFyZVdpdGhFeHBlY3RlZChbY3VycmVudFRlc3QgVVRGOFN0cmluZ10sIGR1bXBBbGxQ
aXhlbHMpOwogCiAgICAgZmZsdXNoKHN0ZG91dCk7CiAKSW5kZXg6IER1bXBSZW5kZXJUcmVlL21h
Yy9JbWFnZURpZmYubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBEdW1wUmVuZGVyVHJlZS9tYWMvSW1hZ2VEaWZm
Lm0JKHJldmlzaW9uIDI4MDM4KQorKysgRHVtcFJlbmRlclRyZWUvbWFjL0ltYWdlRGlmZi5tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEJlbiBMYSBNb25pY2EgPGJlbi5sYW1vbmljYUBnbWFpbC5jb20+LiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8UXVhcnR6Q29y
ZS9Db3JlSW1hZ2UuaD4KLSNpbXBvcnQgPEFwcEtpdC9OU0JpdG1hcEltYWdlUmVwLmg+Ci0jaW1w
b3J0IDxBcHBLaXQvTlNHcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPEFwcEtpdC9OU0NJSW1h
Z2VSZXAuaD4KLQotI2ltcG9ydCA8Z2V0b3B0Lmg+Ci0KLS8qIHByb3RvdHlwZXMgKi8KLWludCBt
YWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pOwotQ0dJbWFnZVJlZiBjcmVhdGVJbWFn
ZUZyb21TdGRpbihpbnQgaW1hZ2VTaXplKTsKLXZvaWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVm
IGFjdHVhbEJpdG1hcCwgQ0dJbWFnZVJlZiBiYXNlbGluZUltYWdlLCB1bnNpZ25lZCB0aHJlc2hv
bGQpOwotTlNCaXRtYXBJbWFnZVJlcCAqZ2V0RGlmZmVyZW5jZUJpdG1hcChDR0ltYWdlUmVmIGFj
dHVhbEJpdG1hcCwgQ0dJbWFnZVJlZiBiYXNlbGluZUltYWdlKTsKLWZsb2F0IGNvbXB1dGVQZXJj
ZW50YWdlRGlmZmVyZW50KE5TQml0bWFwSW1hZ2VSZXAgKmRpZmZCaXRtYXAsIHVuc2lnbmVkIHRo
cmVzaG9sZCk7Ci0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKLXsK
LSAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2Nd
IGluaXRdOwotCi0gICAgdW5zaWduZWQgdGhyZXNob2xkID0gMDsKLQotICAgIHN0cnVjdCBvcHRp
b24gb3B0aW9uc1tdID0gewotICAgICAgICB7InRocmVzaG9sZCIsIHJlcXVpcmVkX2FyZ3VtZW50
LCBOVUxMLCAndCd9LAotICAgICAgICB7TlVMTCwgMCwgTlVMTCwgMH0KLSAgICB9OwotCi0gICAg
aW50IG9wdGlvbjsKLSAgICB3aGlsZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIChjaGFy
ICogY29uc3QgKilhcmd2LCAiIiwgb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7Ci0gICAgICAgIHN3
aXRjaCAob3B0aW9uKSB7Ci0gICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgdGhyZXNob2xk
ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSAnPyc6ICAgLy8gdW5rbm93biBvciBhbWJpZ3VvdXMgb3B0aW9uCi0gICAgICAgIGNhc2Ug
JzonOiAgIC8vIG1pc3NpbmcgYXJndW1lbnQKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBjaGFyIGJ1ZmZlclsyMDQ4
XTsKLSAgICBDR0ltYWdlUmVmIGFjdHVhbEltYWdlID0gbmlsOwotICAgIENHSW1hZ2VSZWYgYmFz
ZWxpbmVJbWFnZSA9IG5pbDsKLQotICAgIE5TQXV0b3JlbGVhc2VQb29sICppbm5lclBvb2wgPSBb
W05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLSAgICB3aGlsZSAoZmdldHMoYnVmZmVy
LCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7Ci0gICAgICAgIC8vIHJlbW92ZSB0aGUgQ1IKLSAg
ICAgICAgY2hhciAqbmV3TGluZUNoYXJhY3RlciA9IHN0cmNocihidWZmZXIsICdcbicpOwotICAg
ICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikgewotICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0
ZXIgPSAnXDAnOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc3RybmNtcCgiQ29u
dGVudC1sZW5ndGg6ICIsIGJ1ZmZlciwgMTYpID09IDApIHsKLSAgICAgICAgICAgIHN0cnRvayhi
dWZmZXIsICIgIik7Ci0gICAgICAgICAgICBpbnQgaW1hZ2VTaXplID0gc3RydG9sKHN0cnRvayhO
VUxMLCAiICIpLCBOVUxMLCAxMCk7Ci0KLSAgICAgICAgICAgIGlmKGltYWdlU2l6ZSA+IDAgJiYg
YWN0dWFsSW1hZ2UgPT0gbmlsKSAKLSAgICAgICAgICAgICAgICBhY3R1YWxJbWFnZSA9IGNyZWF0
ZUltYWdlRnJvbVN0ZGluKGltYWdlU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbWFnZVNp
emUgPiAwICYmIGJhc2VsaW5lSW1hZ2UgPT0gbmlsKQotICAgICAgICAgICAgICAgIGJhc2VsaW5l
SW1hZ2UgPSBjcmVhdGVJbWFnZUZyb21TdGRpbihpbWFnZVNpemUpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGZwdXRzKCJlcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNp
ZmllZC5cbiIsIHN0ZG91dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0dWFsSW1hZ2Ug
IT0gbmlsICYmIGJhc2VsaW5lSW1hZ2UgIT0gbmlsKSB7Ci0gICAgICAgICAgICBjb21wYXJlSW1h
Z2VzKGFjdHVhbEltYWdlLCBiYXNlbGluZUltYWdlLCB0aHJlc2hvbGQpOwotICAgICAgICAgICAg
Q0dJbWFnZVJlbGVhc2UoYWN0dWFsSW1hZ2UpOwotICAgICAgICAgICAgQ0dJbWFnZVJlbGVhc2Uo
YmFzZWxpbmVJbWFnZSk7Ci0gICAgICAgICAgICBhY3R1YWxJbWFnZSA9IG5pbDsKLSAgICAgICAg
ICAgIGJhc2VsaW5lSW1hZ2UgPSBuaWw7Ci0gICAgICAgICAgICBbaW5uZXJQb29sIHJlbGVhc2Vd
OwotICAgICAgICAgICAgaW5uZXJQb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5p
dF07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgIH0K
LSAgICBbaW5uZXJQb29sIHJlbGVhc2VdOwotICAgIAotICAgIFtwb29sIHJlbGVhc2VdOwotICAg
IHJldHVybiAwOwotfQotCi1DR0ltYWdlUmVmIGNyZWF0ZUltYWdlRnJvbVN0ZGluKGludCBieXRl
c1JlbWFpbmluZykKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyMDQ4XTsKLSAgICBOU011
dGFibGVEYXRhICpkYXRhID0gW1tOU011dGFibGVEYXRhIGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
OmJ5dGVzUmVtYWluaW5nXTsKLSAgICAKLSAgICBpbnQgYnl0ZXNSZWFkID0gMDsKLSAgICB3aGls
ZSAoYnl0ZXNSZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgIGJ5dGVzUmVhZCA9IChieXRlc1JlbWFp
bmluZyA+IDIwNDggPyAyMDQ4IDogYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICBmcmVhZChidWZm
ZXIsIGJ5dGVzUmVhZCwgMSwgc3RkaW4pOwotICAgICAgICBbZGF0YSBhcHBlbmRCeXRlczpidWZm
ZXIgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0gICAgICAgIGJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVh
ZDsKLSAgICB9Ci0gICAgQ0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKChDRkRhdGFSZWYpZGF0YSk7Ci0gICAgQ0dJbWFnZVJlZiBp
bWFnZSA9IENHSW1hZ2VDcmVhdGVXaXRoUE5HRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlciwgTlVM
TCwgTk8sIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwotICAgIFtkYXRhIHJlbGVhc2VdOwot
ICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOwotICAgIAotICAgIHJldHVy
biBpbWFnZTsgCi19Ci0KLXZvaWQgY29tcGFyZUltYWdlcyhDR0ltYWdlUmVmIGFjdHVhbEJpdG1h
cCwgQ0dJbWFnZVJlZiBiYXNlbGluZUJpdG1hcCwgdW5zaWduZWQgdGhyZXNob2xkKQotewotICAg
IC8vIHByZXBhcmUgdGhlIGRpZmZlcmVuY2UgYmxlbmQgdG8gY2hlY2sgZm9yIHBpeGVsIHZhcmlh
dGlvbnMKLSAgICBOU0JpdG1hcEltYWdlUmVwICpkaWZmQml0bWFwID0gZ2V0RGlmZmVyZW5jZUJp
dG1hcChhY3R1YWxCaXRtYXAsIGJhc2VsaW5lQml0bWFwKTsKLSAgICAgICAgICAgIAotICAgIGZs
b2F0IHBlcmNlbnRhZ2UgPSBjb21wdXRlUGVyY2VudGFnZURpZmZlcmVudChkaWZmQml0bWFwLCB0
aHJlc2hvbGQpOwotICAgIAotICAgIHBlcmNlbnRhZ2UgPSAoZmxvYXQpKChpbnQpKHBlcmNlbnRh
Z2UgKiAxMDAuMGYpKSAvIDEwMC4wZjsgLy8gcm91bmQgdG8gMiBkZWNpbWFsIHBsYWNlcwotICAg
IAotICAgIC8vIHNlbmQgbWVzc2FnZSB0byBsZXQgdGhlbSBrbm93IGlmIGFuIGltYWdlIHdhcyB3
cm9uZwotICAgIGlmIChwZXJjZW50YWdlID4gMC4wKSB7Ci0gICAgICAgIC8vIHNpbmNlIHRoZSBk
aWZmIG1pZ2h0IGFjdHVhbGx5IHNob3cgc29tZXRoaW5nLCBzZW5kIGl0IHRvIHN0ZG91dAotICAg
ICAgICBOU0RhdGEgKmRpZmZQTkdEYXRhID0gW2RpZmZCaXRtYXAgcmVwcmVzZW50YXRpb25Vc2lu
Z1R5cGU6TlNQTkdGaWxlVHlwZSBwcm9wZXJ0aWVzOm5pbF07Ci0gICAgICAgIGZwcmludGYoc3Rk
b3V0LCAiQ29udGVudC1sZW5ndGg6ICVkXG4iLCBbZGlmZlBOR0RhdGEgbGVuZ3RoXSk7Ci0gICAg
ICAgIGZ3cml0ZShbZGlmZlBOR0RhdGEgYnl0ZXNdLCBbZGlmZlBOR0RhdGEgbGVuZ3RoXSwgMSwg
c3Rkb3V0KTsKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBmYWlsZWRc
biIsIHBlcmNlbnRhZ2UpOwotICAgIH0gZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRp
ZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgcGVyY2VudGFnZSk7Ci19Ci0KLU5TQml0bWFwSW1hZ2VS
ZXAgKmdldERpZmZlcmVuY2VCaXRtYXAoQ0dJbWFnZVJlZiB0ZXN0Qml0bWFwLCBDR0ltYWdlUmVm
IHJlZmVyZW5jZUJpdG1hcCkKLXsKLSAgICAvLyB3ZSBtdXN0IGhhdmUgYm90aCBpbWFnZXMgdG8g
dGFrZSBkaWZmCi0gICAgaWYgKHRlc3RCaXRtYXAgPT0gbmlsIHx8IHJlZmVyZW5jZUJpdG1hcCA9
PSBuaWwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU0JpdG1hcEltYWdlUmVwICpkaWZm
Qml0bWFwID0gW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdOwotICAgIFtkaWZmQml0bWFwIGluaXRX
aXRoQml0bWFwRGF0YVBsYW5lczpOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
aXhlbHNXaWRlOkNHSW1hZ2VHZXRXaWR0aCh0ZXN0Qml0bWFwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxzSGlnaDpDR0ltYWdlR2V0SGVpZ2h0KHRlc3RCaXRtYXApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyU2FtcGxlOkNHSW1hZ2VHZXRCaXRzUGVyQ29t
cG9uZW50KHRlc3RCaXRtYXApCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlclBp
eGVsOkNHSW1hZ2VHZXRCaXRzUGVyUGl4ZWwodGVzdEJpdG1hcCkgLyBDR0ltYWdlR2V0Qml0c1Bl
ckNvbXBvbmVudCh0ZXN0Qml0bWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNBbHBoYTpZRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQbGFuYXI6Tk8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNDYWxpYnJhdGVkUkdC
Q29sb3JTcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcEZvcm1hdDowCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93OkNHSW1hZ2VHZXRCeXRlc1Bl
clJvdyh0ZXN0Qml0bWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJQaXhl
bDpDR0ltYWdlR2V0Qml0c1BlclBpeGVsKHRlc3RCaXRtYXApCi0gICAgXTsKLQotICAgIE5TR3Jh
cGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0V2l0aEJpdG1hcEltYWdlUmVwOmRpZmZCaXRtYXBdOwotICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBbbnNDb250ZXh0IGdyYXBoaWNzUG9ydF07Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNnQ29udGV4dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY2dDb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aCh0ZXN0Qml0bWFw
KSwgQ0dJbWFnZUdldEhlaWdodCh0ZXN0Qml0bWFwKSksIHRlc3RCaXRtYXApOwotICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShjZ0NvbnRleHQsIGtDR0JsZW5kTW9kZURpZmZlcmVuY2UpOwotICAg
IENHQ29udGV4dERyYXdJbWFnZShjZ0NvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdl
dFdpZHRoKHJlZmVyZW5jZUJpdG1hcCksIENHSW1hZ2VHZXRIZWlnaHQocmVmZXJlbmNlQml0bWFw
KSksIHJlZmVyZW5jZUJpdG1hcCk7Ci0KLSAgICByZXR1cm4gW2RpZmZCaXRtYXAgYXV0b3JlbGVh
c2VdOwotfQotCi0vKioKLSAqIENvdW50cyB0aGUgbnVtYmVyIG9mIG5vbi1ibGFjayBwaXhlbHMs
IGFuZCByZXR1cm5zIHRoZSBwZXJjZW50YWdlCi0gKiBvZiBub24tYmxhY2sgcGl4ZWxzIHRvIHRv
dGFsIHBpeGVscyBpbiB0aGUgaW1hZ2UuCi0gKi8KLWZsb2F0IGNvbXB1dGVQZXJjZW50YWdlRGlm
ZmVyZW50KE5TQml0bWFwSW1hZ2VSZXAgKmRpZmZCaXRtYXAsIHVuc2lnbmVkIHRocmVzaG9sZCkK
LXsKLSAgICAvLyBpZiBkaWZmQmlhdG1hcCBpcyBuaWwsIHRoZW4gdGhlcmUgd2FzIGFuIGVycm9y
LCBhbmQgaXQgZGlkbid0IG1hdGNoLgotICAgIGlmIChkaWZmQml0bWFwID09IG5pbCkKLSAgICAg
ICAgcmV0dXJuIDEwMC4wZjsKLSAgICAKLSAgICB1bnNpZ25lZCBiaXRtYXBGb3JtYXQgPSBbZGlm
ZkJpdG1hcCBiaXRtYXBGb3JtYXRdOwotICAgIGFzc2VydCghKGJpdG1hcEZvcm1hdCAmIE5TQWxw
aGFGaXJzdEJpdG1hcEZvcm1hdCkpOwotICAgIGFzc2VydCghKGJpdG1hcEZvcm1hdCAmIE5TRmxv
YXRpbmdQb2ludFNhbXBsZXNCaXRtYXBGb3JtYXQpKTsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhl
bHNIaWdoID0gW2RpZmZCaXRtYXAgcGl4ZWxzSGlnaF07Ci0gICAgdW5zaWduZWQgcGl4ZWxzV2lk
ZSA9IFtkaWZmQml0bWFwIHBpeGVsc1dpZGVdOwotICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0g
W2RpZmZCaXRtYXAgYnl0ZXNQZXJSb3ddOwotICAgIHVuc2lnbmVkIGNoYXIgKnBpeGVsUm93RGF0
YSA9IFtkaWZmQml0bWFwIGJpdG1hcERhdGFdOwotICAgIHVuc2lnbmVkIGRpZmZlcmVuY2VzID0g
MDsKLSAgICAKLSAgICAvLyBOT1RFOiBUaGlzIG1heSBub3QgYmUgc2FmZSB3aGVuIHN3aXRjaGlu
ZyBiZXR3ZWVuIEVORElBTiB0eXBlcwotICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwg
cGl4ZWxzSGlnaDsgcm93KyspIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb2wgPSAwOyBjb2wg
PCAocGl4ZWxzV2lkZSAqIDQpOyBjb2wgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciogcmVkID0gcGl4ZWxSb3dEYXRhICsgY29sOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciog
Z3JlZW4gPSByZWQgKyAxOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYmx1ZSA9IHJlZCAr
IDI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkaXN0YW5jZSA9ICpyZWQgKyAqZ3JlZW4gKyAqYmx1
ZTsKLSAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IHRocmVzaG9sZCkgewotICAgICAgICAgICAg
ICAgIGRpZmZlcmVuY2VzKys7Ci0gICAgICAgICAgICAgICAgLy8gc2hpZnQgdGhlIHBpeGVscyB0
b3dhcmRzIHdoaXRlIHRvIG1ha2UgdGhlbSBtb3JlIHZpc2libGUKLSAgICAgICAgICAgICAgICAq
cmVkID0gTUlOKFVDSEFSX01BWCwgKnJlZCArIDEwMCk7Ci0gICAgICAgICAgICAgICAgKmdyZWVu
ID0gTUlOKFVDSEFSX01BWCwgKmdyZWVuICsgMTAwKTsKLSAgICAgICAgICAgICAgICAqYmx1ZSA9
IE1JTihVQ0hBUl9NQVgsICpibHVlICsgMTAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBwaXhlbFJvd0RhdGEgKz0gYnl0ZXNQZXJSb3c7Ci0gICAgfQotICAgIAotICAgIGZs
b2F0IHRvdGFsUGl4ZWxzID0gcGl4ZWxzSGlnaCAqIHBpeGVsc1dpZGU7Ci0gICAgcmV0dXJuIChk
aWZmZXJlbmNlcyAqIDEwMC5mKSAvIHRvdGFsUGl4ZWxzOwotfQpJbmRleDogRHVtcFJlbmRlclRy
ZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBEdW1wUmVuZGVyVHJlZS9t
YWMvUGl4ZWxEdW1wU3VwcG9ydC5oCShyZXZpc2lvbiAyODAzOCkKKysrIER1bXBSZW5kZXJUcmVl
L21hYy9QaXhlbER1bXBTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykgMjAwNyBHcmFoYW0gRGVubmlzIChncmFo
YW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIGNhbiBiZSB1c2VkIGFzIGEgc2lnbmFsIGhhbmRsZXIKLXZv
aWQgcmVzdG9yZUNvbG9yU3BhY2UoaW50IGlnbm9yZWQpOwotCi0vLyBtYXkgY2hhbmdlIHlvdXIg
Y29sb3Igc3BhY2UsIHJlcXVpcmluZyBhIGNhbGwgdG8gcmVzdG9yZUNvbG9yU3BhY2UKLXZvaWQg
aW5pdGlhbGl6ZUNvbG9yU3BhY2VBbmRTY3JlZUJ1ZmZlckZvclBpeGVsVGVzdHMoKTsKLQotLy8g
YSBwb29yIGFic3RyYWN0aW9uLCBwYXJ0cyBvZiB0aGlzIHNob3VsZCBiZSBpbiB0aGlzIGZpbGUs
IGFuZCBwYXJ0cyBzaG91bGQgbm90Ci12b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJl
V2l0aEV4cGVjdGVkKE5TU3RyaW5nICpjdXJyZW50VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9E
dW1wUGl4ZWxzKTsKSW5kZXg6IER1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1bXBTdXBwb3J0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIER1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1bXBTdXBwb3J0Lm1tCShy
ZXZpc2lvbiAyODAzOCkKKysrIER1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1bXBTdXBwb3J0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICAg
ICAgICAgIChDKSAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQot
ICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNp
bXBvcnQgIlBpeGVsRHVtcFN1cHBvcnQuaCIKLQotI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIK
LSNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgPEFwcEtpdC9BcHBL
aXQuaD4KLSNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PiAvLyBmb3IgQ01TZXREZWZhdWx0UHJvZmlsZUJ5U3BhY2UKLSNpbXBvcnQgPFdlYktpdC9XZWJL
aXQuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJEb2N1bWVudFByaXZhdGUuaD4KLQotI2ltcG9ydCA8
dW5pc3RkLmg+IC8vIFRpZ2VyIHNlZW1zIHRvIG5lZWQgdGhpcyBmb3IgRl9PSwotCi0jZGVmaW5l
IENPTU1PTl9ESUdFU1RfRk9SX09QRU5TU0wKLSNpbXBvcnQgPENvbW1vbkNyeXB0by9Db21tb25E
aWdlc3QuaD4gICAgICAgICAgICAgICAvLyBmb3IgTUQ1IGZ1bmN0aW9ucwotCi1zdGF0aWMgdW5z
aWduZWQgY2hhciogc2NyZWVuQ2FwdHVyZUJ1ZmZlcjsKLQotc3RhdGljIENNUHJvZmlsZVJlZiBj
dXJyZW50Q29sb3JQcm9maWxlID0gMDsKLXN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc2hhcmVkQ29s
b3JTcGFjZTsKLQotdm9pZCByZXN0b3JlQ29sb3JTcGFjZShpbnQgaWdub3JlZCkKLXsKLSAgICAv
LyBUaGlzIGlzIHVzZWQgYXMgYSBzaWduYWwgaGFuZGxlciwgYW5kIHRodXMgdGhlIGNhbGxzIGlu
dG8gQ29sb3JTeW5jIGFyZSB1bnNhZmUKLSAgICAvLyBCdXQgd2UgbWlnaHQgYXMgd2VsbCB0cnkg
dG8gcmVzdG9yZSB0aGUgdXNlcidzIGNvbG9yIHByb2ZpbGUsIHdlJ3JlIGdvaW5nIGRvd24gYW55
d2F5Li4uCi0gICAgaWYgKGN1cnJlbnRDb2xvclByb2ZpbGUpIHsKLSAgICAgICAgLy8gVGhpcyBj
YWxsIGlzIGRlcHJlY2F0ZWQgaW4gTGVvcGFyZCwgYnV0IHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8g
cmVwbGFjZW1lbnQuCi0gICAgICAgIGludCBlcnJvciA9IENNU2V0RGVmYXVsdFByb2ZpbGVCeVVz
ZShjbURpc3BsYXlVc2UsIGN1cnJlbnRDb2xvclByb2ZpbGUpOwotICAgICAgICBpZiAoZXJyb3Ip
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZXRvcmUgcHJldmlvdXMg
Y29sb3IgcHJvZmlsZSEgIFlvdSBtYXkgbmVlZCB0byBvcGVuIFN5c3RlbSBQcmVmZXJlbmNlcyA6
IERpc3BsYXlzIDogQ29sb3IgYW5kIG1hbnVhbGx5IHJlc3RvcmUgeW91ciBjb2xvciBzZXR0aW5n
cy4gIChFcnJvcjogJWkpIiwgZXJyb3IpOwotICAgICAgICBjdXJyZW50Q29sb3JQcm9maWxlID0g
MDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldERlZmF1bHRDb2xvclByb2ZpbGVUb1JHQigp
Ci17Ci0gICAgQ01Qcm9maWxlUmVmIGdlbmVyaWNQcm9maWxlID0gKENNUHJvZmlsZVJlZilbW05T
Q29sb3JTcGFjZSBnZW5lcmljUkdCQ29sb3JTcGFjZV0gY29sb3JTeW5jUHJvZmlsZV07Ci0gICAg
Q01Qcm9maWxlUmVmIHByZXZpb3VzUHJvZmlsZTsKLSAgICBpbnQgZXJyb3IgPSBDTUdldERlZmF1
bHRQcm9maWxlQnlVc2UoY21EaXNwbGF5VXNlLCAmcHJldmlvdXNQcm9maWxlKTsKLSAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQg
Y29sb3IgcHJvZmlsZS4gIEkgd2lsbCBub3QgYmUgYWJsZSB0byByZXN0b3JlIHlvdXIgY3VycmVu
dCBwcm9maWxlLCB0aHVzIEknbSBub3QgY2hhbmdpbmcgaXQuICBNYW55IHBpeGVsIHRlc3RzIG1h
eSBmYWlsIGFzIGEgcmVzdWx0LiAgKEVycm9yOiAlaSlcbiIsIGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAocHJldmlvdXNQcm9maWxlID09IGdlbmVyaWNQcm9maWxlKQot
ICAgICAgICByZXR1cm47Ci0gICAgQ0ZTdHJpbmdSZWYgcHJldmlvdXNQcm9maWxlTmFtZTsKLSAg
ICBDRlN0cmluZ1JlZiBnZW5lcmljUHJvZmlsZU5hbWU7Ci0gICAgY2hhciBwcmV2aW91c1Byb2Zp
bGVOYW1lU3RyaW5nWzEwMjRdOwotICAgIGNoYXIgZ2VuZXJpY1Byb2ZpbGVOYW1lU3RyaW5nWzEw
MjRdOwotICAgIENNQ29weVByb2ZpbGVEZXNjcmlwdGlvblN0cmluZyhwcmV2aW91c1Byb2ZpbGUs
ICZwcmV2aW91c1Byb2ZpbGVOYW1lKTsKLSAgICBDTUNvcHlQcm9maWxlRGVzY3JpcHRpb25TdHJp
bmcoZ2VuZXJpY1Byb2ZpbGUsICZnZW5lcmljUHJvZmlsZU5hbWUpOwotICAgIENGU3RyaW5nR2V0
Q1N0cmluZyhwcmV2aW91c1Byb2ZpbGVOYW1lLCBwcmV2aW91c1Byb2ZpbGVOYW1lU3RyaW5nLCBz
aXplb2YocHJldmlvdXNQcm9maWxlTmFtZVN0cmluZyksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7
Ci0gICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKGdlbmVyaWNQcm9maWxlTmFtZSwgZ2VuZXJpY1Byb2Zp
bGVOYW1lU3RyaW5nLCBzaXplb2YocHJldmlvdXNQcm9maWxlTmFtZVN0cmluZyksIGtDRlN0cmlu
Z0VuY29kaW5nVVRGOCk7Ci0gICAgQ0ZSZWxlYXNlKGdlbmVyaWNQcm9maWxlTmFtZSk7Ci0gICAg
Q0ZSZWxlYXNlKHByZXZpb3VzUHJvZmlsZU5hbWUpOwotICAgIAotICAgIGZwcmludGYoc3RkZXJy
LCAiXG5cbldBUk5JTkc6IFRlbXBvcmFyaWx5IGNoYW5naW5nIHlvdXIgc3lzdGVtIGNvbG9yIHBy
b2ZpbGUgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgcHJldmlvdXNQcm9maWxlTmFtZVN0cmlu
ZywgZ2VuZXJpY1Byb2ZpbGVOYW1lU3RyaW5nKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMg
YWxsb3dzIHRoZSBXZWJLaXQgcGl4ZWwtYmFzZWQgcmVncmVzc2lvbiB0ZXN0cyB0byBoYXZlIGNv
bnNpc3RlbnQgY29sb3IgdmFsdWVzIGFjcm9zcyBhbGwgbWFjaGluZXMuXG4iKTsKLSAgICBmcHJp
bnRmKHN0ZGVyciwgIlRoZSBjb2xvcnMgb24geW91ciBzY3JlZW4gd2lsbCBjaGFuZ2UgZm9yIHRo
ZSBkdXJhdGlvbiBvZiB0aGUgdGVzdGluZy5cblxuIik7Ci0gICAgCi0gICAgaWYgKChlcnJvciA9
IENNU2V0RGVmYXVsdFByb2ZpbGVCeVVzZShjbURpc3BsYXlVc2UsIGdlbmVyaWNQcm9maWxlKSkp
Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCBjb2xvciBwcm9maWxlIHRv
IFwiJXNcIiEgTWFueSBwaXhlbCB0ZXN0cyB3aWxsIGZhaWwgYXMgYSByZXN1bHQuICAoRXJyb3I6
ICVpKSIsCi0gICAgICAgICAgICBnZW5lcmljUHJvZmlsZU5hbWVTdHJpbmcsIGVycm9yKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgY3VycmVudENvbG9yUHJvZmlsZSA9IHByZXZpb3VzUHJvZmlsZTsK
LSAgICAgICAgc2lnbmFsKFNJR0lOVCwgcmVzdG9yZUNvbG9yU3BhY2UpOwotICAgICAgICBzaWdu
YWwoU0lHSFVQLCByZXN0b3JlQ29sb3JTcGFjZSk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCBy
ZXN0b3JlQ29sb3JTcGFjZSk7Ci0gICAgfQotfQotCi12b2lkIGluaXRpYWxpemVDb2xvclNwYWNl
QW5kU2NyZWVCdWZmZXJGb3JQaXhlbFRlc3RzKCkKLXsKLSAgICBzZXREZWZhdWx0Q29sb3JQcm9m
aWxlVG9SR0IoKTsKLSAgICBzY3JlZW5DYXB0dXJlQnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilt
YWxsb2MobWF4Vmlld0hlaWdodCAqIG1heFZpZXdXaWR0aCAqIDQpOwotICAgIHNoYXJlZENvbG9y
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLX0KLQotLyogSGFzaGVzIGEg
Yml0bWFwIGFuZCByZXR1cm5zIGEgdGV4dCBzdHJpbmcgZm9yIGNvbXBhcmlzb24gYW5kIHNhdmlu
ZyB0byBhIGZpbGUgKi8KLXN0YXRpYyBOU1N0cmluZyAqbWQ1SGFzaFN0cmluZ0ZvckJpdG1hcChD
R0ltYWdlUmVmIGJpdG1hcCkKLXsKLSAgICBNRDVfQ1RYIG1kNUNvbnRleHQ7Ci0gICAgdW5zaWdu
ZWQgY2hhciBoYXNoWzE2XTsKLSAgICAKLSAgICB1bnNpZ25lZCBiaXRzUGVyUGl4ZWwgPSBDR0lt
YWdlR2V0Qml0c1BlclBpeGVsKGJpdG1hcCk7Ci0gICAgYXNzZXJ0KGJpdHNQZXJQaXhlbCA9PSAz
Mik7IC8vIEltYWdlRGlmZiBhc3N1bWVzIDMyIGJpdCBSR0JBLCB3ZSBtdXN0IGFzIHdlbGwuCi0g
ICAgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IGJpdHNQZXJQaXhlbCAvIDg7Ci0gICAgdW5zaWdu
ZWQgcGl4ZWxzSGlnaCA9IENHSW1hZ2VHZXRIZWlnaHQoYml0bWFwKTsKLSAgICB1bnNpZ25lZCBw
aXhlbHNXaWRlID0gQ0dJbWFnZUdldFdpZHRoKGJpdG1hcCk7Ci0gICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coYml0bWFwKTsKLSAgICBhc3NlcnQoYnl0ZXNQ
ZXJSb3cgPj0gKHBpeGVsc1dpZGUgKiBieXRlc1BlclBpeGVsKSk7Ci0gICAgCi0gICAgTUQ1X0lu
aXQoJm1kNUNvbnRleHQpOwotICAgIHVuc2lnbmVkIGNoYXIgKmJpdG1hcERhdGEgPSBzY3JlZW5D
YXB0dXJlQnVmZmVyOwotICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsgcm93IDwgcGl4ZWxzSGln
aDsgcm93KyspIHsKLSAgICAgICAgTUQ1X1VwZGF0ZSgmbWQ1Q29udGV4dCwgYml0bWFwRGF0YSwg
cGl4ZWxzV2lkZSAqIGJ5dGVzUGVyUGl4ZWwpOwotICAgICAgICBiaXRtYXBEYXRhICs9IGJ5dGVz
UGVyUm93OwotICAgIH0KLSAgICBNRDVfRmluYWwoaGFzaCwgJm1kNUNvbnRleHQpOwotICAgIAot
ICAgIGNoYXIgaGV4WzMzXSA9ICIiOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykg
ewotICAgICAgICBzbnByaW50ZihoZXgsIDMzLCAiJXMlMDJ4IiwgaGV4LCBoYXNoW2ldKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpoZXhd
OwotfQotCi12b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKE5T
U3RyaW5nKiBjdXJyZW50VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKQotewot
ICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQoKSAmJiAhbGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhbGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewotICAgICAgICAvLyBncmFiIGEgYml0bWFw
IGZyb20gdGhlIHZpZXcKLSAgICAgICAgV2ViVmlldyogdmlldyA9IFttYWluRnJhbWUgd2ViVmll
d107Ci0gICAgICAgIE5TU2l6ZSB3ZWJWaWV3U2l6ZSA9IFt2aWV3IGZyYW1lXS5zaXplOwotICAg
ICAgICAKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENy
ZWF0ZShzY3JlZW5DYXB0dXJlQnVmZmVyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdlYlZpZXdTaXpl
LndpZHRoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3ZWJWaWV3U2l6ZS5oZWlnaHQpLCA4LCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHdlYlZpZXdTaXplLndpZHRoKSAqIDQsIHNoYXJlZENvbG9yU3BhY2Us
IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCk7Ci0gICAgICAgIAotICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0ID0g
W1tbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIHJldGFpbl0gYXV0b3JlbGVhc2Vd
OwotICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCogbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBwZWQ6Tk9d
OwotICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bnNDb250ZXh0
XTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RSZXBh
aW50KCkpIHsKLSAgICAgICAgICAgIE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwOwotICAgICAg
ICAgICAgW3ZpZXcgZGlzcGxheUlmTmVlZGVkXTsKLSAgICAgICAgICAgIFt2aWV3IGxvY2tGb2N1
c107Ci0gICAgICAgICAgICBpbWFnZVJlcCA9IFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5p
dFdpdGhGb2N1c2VkVmlld1JlY3Q6W3ZpZXcgZnJhbWVdXTsKLSAgICAgICAgICAgIFt2aWV3IHVu
bG9ja0ZvY3VzXTsKLSAgICAgICAgICAgIFtpbWFnZVJlcCBkcmF3XTsKLSAgICAgICAgICAgIFtp
bWFnZVJlcCByZWxlYXNlXTsKLSAgICAgICAgfSBlbHNlIGlmICghbGF5b3V0VGVzdENvbnRyb2xs
ZXItPnRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSkgewotICAgICAgICAgICAgTlNSZWN0
IGxpbmUgPSBOU01ha2VSZWN0KDAsIDAsIHdlYlZpZXdTaXplLndpZHRoLCAxKTsKLSAgICAgICAg
ICAgIHdoaWxlIChsaW5lLm9yaWdpbi55IDwgd2ViVmlld1NpemUuaGVpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6bGluZSBpbkNvbnRleHQ6
bnNDb250ZXh0XTsKLSAgICAgICAgICAgICAgICBsaW5lLm9yaWdpbi55Kys7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOU1JlY3QgY29sdW1uID0gTlNNYWtl
UmVjdCgwLCAwLCAxLCB3ZWJWaWV3U2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgd2hpbGUgKGNv
bHVtbi5vcmlnaW4ueCA8IHdlYlZpZXdTaXplLndpZHRoKSB7Ci0gICAgICAgICAgICAgICAgW3Zp
ZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6Y29sdW1uIGluQ29udGV4dDpuc0NvbnRleHRd
OwotICAgICAgICAgICAgICAgIGNvbHVtbi5vcmlnaW4ueCsrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNlbGVjdGlvblJl
Y3QoKSkgewotICAgICAgICAgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW21haW5GcmFtZSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBj
b25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkRvY3VtZW50U2VsZWN0aW9uKV0pIHsKLSAg
ICAgICAgICAgICAgICBbW05TQ29sb3IgcmVkQ29sb3JdIHNldF07Ci0gICAgICAgICAgICAgICAg
W05TQmV6aWVyUGF0aCBzdHJva2VSZWN0Oltkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6WyhpZCA8
V2ViRG9jdW1lbnRTZWxlY3Rpb24+KWRvY3VtZW50VmlldyBzZWxlY3Rpb25SZWN0XSBmcm9tVmll
dzpuaWxdXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW05T
R3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnNhdmVkQ29udGV4dF07Ci0gICAgICAg
IAotICAgICAgICBDR0ltYWdlUmVmIGJpdG1hcEltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY2dDb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShjZ0NvbnRleHQpOwot
ICAgICAgICAKLSAgICAgICAgLy8gY29tcHV0ZSB0aGUgYWN0dWFsIGhhc2ggdG8gY29tcGFyZSB0
byB0aGUgZXhwZWN0ZWQgaW1hZ2UncyBoYXNoCi0gICAgICAgIE5TU3RyaW5nICphY3R1YWxIYXNo
ID0gbWQ1SGFzaFN0cmluZ0ZvckJpdG1hcChiaXRtYXBJbWFnZSk7Ci0gICAgICAgIHByaW50Zigi
XG5BY3R1YWxIYXNoOiAlc1xuIiwgW2FjdHVhbEhhc2ggVVRGOFN0cmluZ10pOwotICAgICAgICAK
LSAgICAgICAgQk9PTCBkdW1wSW1hZ2U7Ci0gICAgICAgIGlmIChmb3JjZUFsbFRlc3RzVG9EdW1w
UGl4ZWxzKQotICAgICAgICAgICAgZHVtcEltYWdlID0gWUVTOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgd2UgaGFyZGNvZGUgdGhl
IGZpbGUgbmFtaW5nIHNjaGVtZSBoZXJlLgotICAgICAgICAgICAgLy8gQXQgb25lIHRpbWUsIHRo
ZSBwZXJsIHNjcmlwdCBoYWQgYWxsIHRoZSBrbm93bGVkZ2UgYWJvdXQgZmlsZSBsYXlvdXQuCi0g
ICAgICAgICAgICAvLyBTb21lIGRheSB3ZSBzaG91bGQgcmVzdG9yZSB0aGF0IHNldHVwIGJ5IHBh
c3NpbmcgaW4gbW9yZSBwYXJhbWV0ZXJzIHRvIHRoaXMgdG9vbAotICAgICAgICAgICAgLy8gb3Ig
cmV0dXJuaW5nIG1vcmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgdG9vbCB0byB0aGUgcGVybCBzY3Jp
cHQKLSAgICAgICAgICAgIE5TU3RyaW5nICpiYXNlVGVzdFBhdGggPSBbY3VycmVudFRlc3Qgc3Ry
aW5nQnlEZWxldGluZ1BhdGhFeHRlbnNpb25dOwotICAgICAgICAgICAgTlNTdHJpbmcgKmJhc2Vs
aW5lSGFzaFBhdGggPSBbYmFzZVRlc3RQYXRoIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLWV4
cGVjdGVkLmNoZWNrc3VtIl07Ci0gICAgICAgICAgICBOU1N0cmluZyAqYmFzZWxpbmVIYXNoID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpiYXNlbGluZUhhc2hQYXRoIGVuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07Ci0gICAgICAgICAgICBOU1N0cmlu
ZyAqYmFzZWxpbmVJbWFnZVBhdGggPSBbYmFzZVRlc3RQYXRoIHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiLWV4cGVjdGVkLnBuZyJdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwcmludGYo
IkJhc2VsaW5lSGFzaDogJXNcbiIsIFtiYXNlbGluZUhhc2ggVVRGOFN0cmluZ10pOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLy8gc2VuZCB0aGUgaW1hZ2UgdG8gc3Rkb3V0IGlmIHRoZSBo
YXNoIG1pc21hdGNoZXMgb3IgaWYgdGhlcmUncyBubyBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbQot
ICAgICAgICAgICAgZHVtcEltYWdlID0gIVtiYXNlbGluZUhhc2ggaXNFcXVhbFRvU3RyaW5nOmFj
dHVhbEhhc2hdIHx8IGFjY2VzcyhbYmFzZWxpbmVJbWFnZVBhdGggZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uXSwgRl9PSykgIT0gMDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGR1
bXBJbWFnZSkgewotICAgICAgICAgICAgQ0ZNdXRhYmxlRGF0YVJlZiBpbWFnZURhdGEgPSBDRkRh
dGFDcmVhdGVNdXRhYmxlKDAsIDApOwotICAgICAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uUmVm
IGltYWdlRGVzdCA9IENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YSwg
Q0ZTVFIoInB1YmxpYy5wbmciKSwgMSwgMCk7Ci0gICAgICAgICAgICBDR0ltYWdlRGVzdGluYXRp
b25BZGRJbWFnZShpbWFnZURlc3QsIGJpdG1hcEltYWdlLCAwKTsKLSAgICAgICAgICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2Uo
aW1hZ2VEZXN0KTsKLSAgICAgICAgICAgIHByaW50ZigiQ29udGVudC1sZW5ndGg6ICVsdVxuIiwg
Q0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YSkpOwotICAgICAgICAgICAgZndyaXRlKENGRGF0YUdl
dEJ5dGVQdHIoaW1hZ2VEYXRhKSwgMSwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YSksIHN0ZG91
dCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2UoaW1hZ2VEYXRhKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoYml0bWFwSW1hZ2UpOwotICAgIH0KLSAgICAKLSAg
ICBwcmludGYoIiNFT0ZcbiIpOwotfQpJbmRleDogRHVtcFJlbmRlclRyZWUvbWFjL1BpeGVsRHVt
cFN1cHBvcnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRHVtcFJlbmRlclRyZWUvbWFjL1BpeGVsRHVt
cFN1cHBvcnRNYWMubW0JKHJldmlzaW9uIDI4MDI4KQkoZnJvbSBEdW1wUmVuZGVyVHJlZS9tYWMv
UGl4ZWxEdW1wU3VwcG9ydC5tbToyODAyOCkKKysrIER1bXBSZW5kZXJUcmVlL21hYy9QaXhlbER1
bXBTdXBwb3J0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5u
aXNAZ21haWwuY29tKQorICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyAKKyNpbXBvcnQgIlBpeGVsRHVtcFN1cHBvcnQuaCIKKworI2ltcG9ydCAiRHVt
cFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisKKyNpbXBv
cnQgPEFwcEtpdC9BcHBLaXQuaD4KKyNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGlj
YXRpb25TZXJ2aWNlcy5oPiAvLyBmb3IgQ01TZXREZWZhdWx0UHJvZmlsZUJ5U3BhY2UKKyNpbXBv
cnQgPFdlYktpdC9XZWJLaXQuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJEb2N1bWVudFByaXZhdGUu
aD4KKworI2ltcG9ydCA8dW5pc3RkLmg+IC8vIFRpZ2VyIHNlZW1zIHRvIG5lZWQgdGhpcyBmb3Ig
Rl9PSworCisjZGVmaW5lIENPTU1PTl9ESUdFU1RfRk9SX09QRU5TU0wKKyNpbXBvcnQgPENvbW1v
bkNyeXB0by9Db21tb25EaWdlc3QuaD4gICAgICAgICAgICAgICAvLyBmb3IgTUQ1IGZ1bmN0aW9u
cworCitzdGF0aWMgdW5zaWduZWQgY2hhciogc2NyZWVuQ2FwdHVyZUJ1ZmZlcjsKKworc3RhdGlj
IENNUHJvZmlsZVJlZiBjdXJyZW50Q29sb3JQcm9maWxlID0gMDsKK3N0YXRpYyBDR0NvbG9yU3Bh
Y2VSZWYgc2hhcmVkQ29sb3JTcGFjZTsKKwordm9pZCByZXN0b3JlQ29sb3JTcGFjZShpbnQgaWdu
b3JlZCkKK3sKKyAgICAvLyBUaGlzIGlzIHVzZWQgYXMgYSBzaWduYWwgaGFuZGxlciwgYW5kIHRo
dXMgdGhlIGNhbGxzIGludG8gQ29sb3JTeW5jIGFyZSB1bnNhZmUKKyAgICAvLyBCdXQgd2UgbWln
aHQgYXMgd2VsbCB0cnkgdG8gcmVzdG9yZSB0aGUgdXNlcidzIGNvbG9yIHByb2ZpbGUsIHdlJ3Jl
IGdvaW5nIGRvd24gYW55d2F5Li4uCisgICAgaWYgKGN1cnJlbnRDb2xvclByb2ZpbGUpIHsKKyAg
ICAgICAgLy8gVGhpcyBjYWxsIGlzIGRlcHJlY2F0ZWQgaW4gTGVvcGFyZCwgYnV0IHRoZXJlIGFw
cGVhcnMgdG8gYmUgbm8gcmVwbGFjZW1lbnQuCisgICAgICAgIGludCBlcnJvciA9IENNU2V0RGVm
YXVsdFByb2ZpbGVCeVVzZShjbURpc3BsYXlVc2UsIGN1cnJlbnRDb2xvclByb2ZpbGUpOworICAg
ICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBy
ZXRvcmUgcHJldmlvdXMgY29sb3IgcHJvZmlsZSEgIFlvdSBtYXkgbmVlZCB0byBvcGVuIFN5c3Rl
bSBQcmVmZXJlbmNlcyA6IERpc3BsYXlzIDogQ29sb3IgYW5kIG1hbnVhbGx5IHJlc3RvcmUgeW91
ciBjb2xvciBzZXR0aW5ncy4gIChFcnJvcjogJWkpIiwgZXJyb3IpOworICAgICAgICBjdXJyZW50
Q29sb3JQcm9maWxlID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldERlZmF1bHRDb2xv
clByb2ZpbGVUb1JHQigpCit7CisgICAgQ01Qcm9maWxlUmVmIGdlbmVyaWNQcm9maWxlID0gKENN
UHJvZmlsZVJlZilbW05TQ29sb3JTcGFjZSBnZW5lcmljUkdCQ29sb3JTcGFjZV0gY29sb3JTeW5j
UHJvZmlsZV07CisgICAgQ01Qcm9maWxlUmVmIHByZXZpb3VzUHJvZmlsZTsKKyAgICBpbnQgZXJy
b3IgPSBDTUdldERlZmF1bHRQcm9maWxlQnlVc2UoY21EaXNwbGF5VXNlLCAmcHJldmlvdXNQcm9m
aWxlKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQg
dG8gZ2V0IGN1cnJlbnQgY29sb3IgcHJvZmlsZS4gIEkgd2lsbCBub3QgYmUgYWJsZSB0byByZXN0
b3JlIHlvdXIgY3VycmVudCBwcm9maWxlLCB0aHVzIEknbSBub3QgY2hhbmdpbmcgaXQuICBNYW55
IHBpeGVsIHRlc3RzIG1heSBmYWlsIGFzIGEgcmVzdWx0LiAgKEVycm9yOiAlaSlcbiIsIGVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocHJldmlvdXNQcm9maWxlID09IGdl
bmVyaWNQcm9maWxlKQorICAgICAgICByZXR1cm47CisgICAgQ0ZTdHJpbmdSZWYgcHJldmlvdXNQ
cm9maWxlTmFtZTsKKyAgICBDRlN0cmluZ1JlZiBnZW5lcmljUHJvZmlsZU5hbWU7CisgICAgY2hh
ciBwcmV2aW91c1Byb2ZpbGVOYW1lU3RyaW5nWzEwMjRdOworICAgIGNoYXIgZ2VuZXJpY1Byb2Zp
bGVOYW1lU3RyaW5nWzEwMjRdOworICAgIENNQ29weVByb2ZpbGVEZXNjcmlwdGlvblN0cmluZyhw
cmV2aW91c1Byb2ZpbGUsICZwcmV2aW91c1Byb2ZpbGVOYW1lKTsKKyAgICBDTUNvcHlQcm9maWxl
RGVzY3JpcHRpb25TdHJpbmcoZ2VuZXJpY1Byb2ZpbGUsICZnZW5lcmljUHJvZmlsZU5hbWUpOwor
ICAgIENGU3RyaW5nR2V0Q1N0cmluZyhwcmV2aW91c1Byb2ZpbGVOYW1lLCBwcmV2aW91c1Byb2Zp
bGVOYW1lU3RyaW5nLCBzaXplb2YocHJldmlvdXNQcm9maWxlTmFtZVN0cmluZyksIGtDRlN0cmlu
Z0VuY29kaW5nVVRGOCk7CisgICAgQ0ZTdHJpbmdHZXRDU3RyaW5nKGdlbmVyaWNQcm9maWxlTmFt
ZSwgZ2VuZXJpY1Byb2ZpbGVOYW1lU3RyaW5nLCBzaXplb2YocHJldmlvdXNQcm9maWxlTmFtZVN0
cmluZyksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CisgICAgQ0ZSZWxlYXNlKGdlbmVyaWNQcm9m
aWxlTmFtZSk7CisgICAgQ0ZSZWxlYXNlKHByZXZpb3VzUHJvZmlsZU5hbWUpOworICAgIAorICAg
IGZwcmludGYoc3RkZXJyLCAiXG5cbldBUk5JTkc6IFRlbXBvcmFyaWx5IGNoYW5naW5nIHlvdXIg
c3lzdGVtIGNvbG9yIHByb2ZpbGUgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgcHJldmlvdXNQ
cm9maWxlTmFtZVN0cmluZywgZ2VuZXJpY1Byb2ZpbGVOYW1lU3RyaW5nKTsKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIlRoaXMgYWxsb3dzIHRoZSBXZWJLaXQgcGl4ZWwtYmFzZWQgcmVncmVzc2lvbiB0
ZXN0cyB0byBoYXZlIGNvbnNpc3RlbnQgY29sb3IgdmFsdWVzIGFjcm9zcyBhbGwgbWFjaGluZXMu
XG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBjb2xvcnMgb24geW91ciBzY3JlZW4gd2ls
bCBjaGFuZ2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdGluZy5cblxuIik7CisgICAgCisg
ICAgaWYgKChlcnJvciA9IENNU2V0RGVmYXVsdFByb2ZpbGVCeVVzZShjbURpc3BsYXlVc2UsIGdl
bmVyaWNQcm9maWxlKSkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHNldCBj
b2xvciBwcm9maWxlIHRvIFwiJXNcIiEgTWFueSBwaXhlbCB0ZXN0cyB3aWxsIGZhaWwgYXMgYSBy
ZXN1bHQuICAoRXJyb3I6ICVpKSIsCisgICAgICAgICAgICBnZW5lcmljUHJvZmlsZU5hbWVTdHJp
bmcsIGVycm9yKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY3VycmVudENvbG9yUHJvZmlsZSA9IHBy
ZXZpb3VzUHJvZmlsZTsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgcmVzdG9yZUNvbG9yU3BhY2Up
OworICAgICAgICBzaWduYWwoU0lHSFVQLCByZXN0b3JlQ29sb3JTcGFjZSk7CisgICAgICAgIHNp
Z25hbChTSUdURVJNLCByZXN0b3JlQ29sb3JTcGFjZSk7CisgICAgfQorfQorCit2b2lkIGluaXRp
YWxpemVDb2xvclNwYWNlQW5kU2NyZWVCdWZmZXJGb3JQaXhlbFRlc3RzKCkKK3sKKyAgICBzZXRE
ZWZhdWx0Q29sb3JQcm9maWxlVG9SR0IoKTsKKyAgICBzY3JlZW5DYXB0dXJlQnVmZmVyID0gKHVu
c2lnbmVkIGNoYXIgKiltYWxsb2MobWF4Vmlld0hlaWdodCAqIG1heFZpZXdXaWR0aCAqIDQpOwor
ICAgIHNoYXJlZENvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKK30K
KworLyogSGFzaGVzIGEgYml0bWFwIGFuZCByZXR1cm5zIGEgdGV4dCBzdHJpbmcgZm9yIGNvbXBh
cmlzb24gYW5kIHNhdmluZyB0byBhIGZpbGUgKi8KK3N0YXRpYyBOU1N0cmluZyAqbWQ1SGFzaFN0
cmluZ0ZvckJpdG1hcChDR0ltYWdlUmVmIGJpdG1hcCkKK3sKKyAgICBNRDVfQ1RYIG1kNUNvbnRl
eHQ7CisgICAgdW5zaWduZWQgY2hhciBoYXNoWzE2XTsKKyAgICAKKyAgICB1bnNpZ25lZCBiaXRz
UGVyUGl4ZWwgPSBDR0ltYWdlR2V0Qml0c1BlclBpeGVsKGJpdG1hcCk7CisgICAgYXNzZXJ0KGJp
dHNQZXJQaXhlbCA9PSAzMik7IC8vIEltYWdlRGlmZiBhc3N1bWVzIDMyIGJpdCBSR0JBLCB3ZSBt
dXN0IGFzIHdlbGwuCisgICAgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IGJpdHNQZXJQaXhlbCAv
IDg7CisgICAgdW5zaWduZWQgcGl4ZWxzSGlnaCA9IENHSW1hZ2VHZXRIZWlnaHQoYml0bWFwKTsK
KyAgICB1bnNpZ25lZCBwaXhlbHNXaWRlID0gQ0dJbWFnZUdldFdpZHRoKGJpdG1hcCk7CisgICAg
dW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coYml0bWFwKTsKKyAg
ICBhc3NlcnQoYnl0ZXNQZXJSb3cgPj0gKHBpeGVsc1dpZGUgKiBieXRlc1BlclBpeGVsKSk7Cisg
ICAgCisgICAgTUQ1X0luaXQoJm1kNUNvbnRleHQpOworICAgIHVuc2lnbmVkIGNoYXIgKmJpdG1h
cERhdGEgPSBzY3JlZW5DYXB0dXJlQnVmZmVyOworICAgIGZvciAodW5zaWduZWQgcm93ID0gMDsg
cm93IDwgcGl4ZWxzSGlnaDsgcm93KyspIHsKKyAgICAgICAgTUQ1X1VwZGF0ZSgmbWQ1Q29udGV4
dCwgYml0bWFwRGF0YSwgcGl4ZWxzV2lkZSAqIGJ5dGVzUGVyUGl4ZWwpOworICAgICAgICBiaXRt
YXBEYXRhICs9IGJ5dGVzUGVyUm93OworICAgIH0KKyAgICBNRDVfRmluYWwoaGFzaCwgJm1kNUNv
bnRleHQpOworICAgIAorICAgIGNoYXIgaGV4WzMzXSA9ICIiOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTY7IGkrKykgeworICAgICAgICBzbnByaW50ZihoZXgsIDMzLCAiJXMlMDJ4IiwgaGV4
LCBoYXNoW2ldKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpoZXhdOworfQorCit2b2lkIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJl
V2l0aEV4cGVjdGVkKE5TU3RyaW5nKiBjdXJyZW50VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9E
dW1wUGl4ZWxzKQoreworICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBBc1RleHQo
KSAmJiAhbGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhbGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgeworICAgICAgICAv
LyBncmFiIGEgYml0bWFwIGZyb20gdGhlIHZpZXcKKyAgICAgICAgV2ViVmlldyogdmlldyA9IFtt
YWluRnJhbWUgd2ViVmlld107CisgICAgICAgIE5TU2l6ZSB3ZWJWaWV3U2l6ZSA9IFt2aWV3IGZy
YW1lXS5zaXplOworICAgICAgICAKKyAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IENH
Qml0bWFwQ29udGV4dENyZWF0ZShzY3JlZW5DYXB0dXJlQnVmZmVyLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHdlYlZpZXdTaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pih3ZWJWaWV3U2l6ZS5o
ZWlnaHQpLCA4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdlYlZpZXdTaXplLndpZHRoKSAqIDQsIHNo
YXJlZENvbG9yU3BhY2UsIGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCB8IGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCk7CisgICAgICAgIAorICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCog
c2F2ZWRDb250ZXh0ID0gW1tbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIHJldGFp
bl0gYXV0b3JlbGVhc2VdOworICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCogbnNDb250ZXh0ID0g
W05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y2dDb250
ZXh0IGZsaXBwZWQ6Tk9dOworICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENv
bnRleHQ6bnNDb250ZXh0XTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGF5b3V0VGVzdENvbnRy
b2xsZXItPnRlc3RSZXBhaW50KCkpIHsKKyAgICAgICAgICAgIE5TQml0bWFwSW1hZ2VSZXAgKmlt
YWdlUmVwOworICAgICAgICAgICAgW3ZpZXcgZGlzcGxheUlmTmVlZGVkXTsKKyAgICAgICAgICAg
IFt2aWV3IGxvY2tGb2N1c107CisgICAgICAgICAgICBpbWFnZVJlcCA9IFtbTlNCaXRtYXBJbWFn
ZVJlcCBhbGxvY10gaW5pdFdpdGhGb2N1c2VkVmlld1JlY3Q6W3ZpZXcgZnJhbWVdXTsKKyAgICAg
ICAgICAgIFt2aWV3IHVubG9ja0ZvY3VzXTsKKyAgICAgICAgICAgIFtpbWFnZVJlcCBkcmF3XTsK
KyAgICAgICAgICAgIFtpbWFnZVJlcCByZWxlYXNlXTsKKyAgICAgICAgfSBlbHNlIGlmICghbGF5
b3V0VGVzdENvbnRyb2xsZXItPnRlc3RSZXBhaW50U3dlZXBIb3Jpem9udGFsbHkoKSkgeworICAg
ICAgICAgICAgTlNSZWN0IGxpbmUgPSBOU01ha2VSZWN0KDAsIDAsIHdlYlZpZXdTaXplLndpZHRo
LCAxKTsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lLm9yaWdpbi55IDwgd2ViVmlld1NpemUuaGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6
bGluZSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKKyAgICAgICAgICAgICAgICBsaW5lLm9yaWdpbi55
Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOU1JlY3Qg
Y29sdW1uID0gTlNNYWtlUmVjdCgwLCAwLCAxLCB3ZWJWaWV3U2l6ZS5oZWlnaHQpOworICAgICAg
ICAgICAgd2hpbGUgKGNvbHVtbi5vcmlnaW4ueCA8IHdlYlZpZXdTaXplLndpZHRoKSB7CisgICAg
ICAgICAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6Y29sdW1uIGluQ29u
dGV4dDpuc0NvbnRleHRdOworICAgICAgICAgICAgICAgIGNvbHVtbi5vcmlnaW4ueCsrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcFNlbGVjdGlvblJlY3QoKSkgeworICAgICAgICAgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcg
PSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgICAgICBpZiAo
W2RvY3VtZW50VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkRvY3VtZW50U2Vs
ZWN0aW9uKV0pIHsKKyAgICAgICAgICAgICAgICBbW05TQ29sb3IgcmVkQ29sb3JdIHNldF07Cisg
ICAgICAgICAgICAgICAgW05TQmV6aWVyUGF0aCBzdHJva2VSZWN0Oltkb2N1bWVudFZpZXcgY29u
dmVydFJlY3Q6WyhpZCA8V2ViRG9jdW1lbnRTZWxlY3Rpb24+KWRvY3VtZW50VmlldyBzZWxlY3Rp
b25SZWN0XSBmcm9tVmlldzpuaWxdXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnNhdmVkQ29u
dGV4dF07CisgICAgICAgIAorICAgICAgICBDR0ltYWdlUmVmIGJpdG1hcEltYWdlID0gQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY2dDb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFz
ZShjZ0NvbnRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgYWN0dWFsIGhh
c2ggdG8gY29tcGFyZSB0byB0aGUgZXhwZWN0ZWQgaW1hZ2UncyBoYXNoCisgICAgICAgIE5TU3Ry
aW5nICphY3R1YWxIYXNoID0gbWQ1SGFzaFN0cmluZ0ZvckJpdG1hcChiaXRtYXBJbWFnZSk7Cisg
ICAgICAgIHByaW50ZigiXG5BY3R1YWxIYXNoOiAlc1xuIiwgW2FjdHVhbEhhc2ggVVRGOFN0cmlu
Z10pOworICAgICAgICAKKyAgICAgICAgQk9PTCBkdW1wSW1hZ2U7CisgICAgICAgIGlmIChmb3Jj
ZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKQorICAgICAgICAgICAgZHVtcEltYWdlID0gWUVTOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQg
d2UgaGFyZGNvZGUgdGhlIGZpbGUgbmFtaW5nIHNjaGVtZSBoZXJlLgorICAgICAgICAgICAgLy8g
QXQgb25lIHRpbWUsIHRoZSBwZXJsIHNjcmlwdCBoYWQgYWxsIHRoZSBrbm93bGVkZ2UgYWJvdXQg
ZmlsZSBsYXlvdXQuCisgICAgICAgICAgICAvLyBTb21lIGRheSB3ZSBzaG91bGQgcmVzdG9yZSB0
aGF0IHNldHVwIGJ5IHBhc3NpbmcgaW4gbW9yZSBwYXJhbWV0ZXJzIHRvIHRoaXMgdG9vbAorICAg
ICAgICAgICAgLy8gb3IgcmV0dXJuaW5nIG1vcmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgdG9vbCB0
byB0aGUgcGVybCBzY3JpcHQKKyAgICAgICAgICAgIE5TU3RyaW5nICpiYXNlVGVzdFBhdGggPSBb
Y3VycmVudFRlc3Qgc3RyaW5nQnlEZWxldGluZ1BhdGhFeHRlbnNpb25dOworICAgICAgICAgICAg
TlNTdHJpbmcgKmJhc2VsaW5lSGFzaFBhdGggPSBbYmFzZVRlc3RQYXRoIHN0cmluZ0J5QXBwZW5k
aW5nU3RyaW5nOkAiLWV4cGVjdGVkLmNoZWNrc3VtIl07CisgICAgICAgICAgICBOU1N0cmluZyAq
YmFzZWxpbmVIYXNoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTpiYXNlbGlu
ZUhhc2hQYXRoIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CisgICAg
ICAgICAgICBOU1N0cmluZyAqYmFzZWxpbmVJbWFnZVBhdGggPSBbYmFzZVRlc3RQYXRoIHN0cmlu
Z0J5QXBwZW5kaW5nU3RyaW5nOkAiLWV4cGVjdGVkLnBuZyJdOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBwcmludGYoIkJhc2VsaW5lSGFzaDogJXNcbiIsIFtiYXNlbGluZUhhc2ggVVRGOFN0
cmluZ10pOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLy8gc2VuZCB0aGUgaW1hZ2UgdG8g
c3Rkb3V0IGlmIHRoZSBoYXNoIG1pc21hdGNoZXMgb3IgaWYgdGhlcmUncyBubyBmaWxlIGluIHRo
ZSBmaWxlIHN5c3RlbQorICAgICAgICAgICAgZHVtcEltYWdlID0gIVtiYXNlbGluZUhhc2ggaXNF
cXVhbFRvU3RyaW5nOmFjdHVhbEhhc2hdIHx8IGFjY2VzcyhbYmFzZWxpbmVJbWFnZVBhdGggZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uXSwgRl9PSykgIT0gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGR1bXBJbWFnZSkgeworICAgICAgICAgICAgQ0ZNdXRhYmxlRGF0YVJlZiBp
bWFnZURhdGEgPSBDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApOworICAgICAgICAgICAgQ0dJbWFn
ZURlc3RpbmF0aW9uUmVmIGltYWdlRGVzdCA9IENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhE
YXRhKGltYWdlRGF0YSwgQ0ZTVFIoInB1YmxpYy5wbmciKSwgMSwgMCk7CisgICAgICAgICAgICBD
R0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3QsIGJpdG1hcEltYWdlLCAwKTsKKyAg
ICAgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGltYWdlRGVzdCk7CisgICAgICAg
ICAgICBDRlJlbGVhc2UoaW1hZ2VEZXN0KTsKKyAgICAgICAgICAgIHByaW50ZigiQ29udGVudC1s
ZW5ndGg6ICVsdVxuIiwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YSkpOworICAgICAgICAgICAg
ZndyaXRlKENGRGF0YUdldEJ5dGVQdHIoaW1hZ2VEYXRhKSwgMSwgQ0ZEYXRhR2V0TGVuZ3RoKGlt
YWdlRGF0YSksIHN0ZG91dCk7CisgICAgICAgICAgICBDRlJlbGVhc2UoaW1hZ2VEYXRhKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UoYml0bWFwSW1hZ2UpOwor
ICAgIH0KKyAgICAKKyAgICBwcmludGYoIiNFT0ZcbiIpOworfQpJbmRleDogRHVtcFJlbmRlclRy
ZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRHVtcFJlbmRlclRy
ZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnRNYWMubW0JKHJldmlzaW9uIDI4MDI4KQorKysgRHVtcFJl
bmRlclRyZWUvbWFjL1BpeGVsRHVtcFN1cHBvcnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAw
NyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKICAqICAgICAgICAgICAo
QykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKQEAgLTI3LDIxICsyNywx
OCBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCi0gCi0jaW1wb3J0ICJQ
aXhlbER1bXBTdXBwb3J0LmgiCiAKLSNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW1wb3J0
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiIAor
I2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKKyNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0
Q0cuaCIKKworI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+
Ci0jaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4gLy8g
Zm9yIENNU2V0RGVmYXVsdFByb2ZpbGVCeVNwYWNlCi0jaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViRG9jdW1lbnRQcml2YXRlLmg+Ci0KLSNpbXBvcnQgPHVuaXN0
ZC5oPiAvLyBUaWdlciBzZWVtcyB0byBuZWVkIHRoaXMgZm9yIEZfT0sKLQotI2RlZmluZSBDT01N
T05fRElHRVNUX0ZPUl9PUEVOU1NMCi0jaW1wb3J0IDxDb21tb25DcnlwdG8vQ29tbW9uRGlnZXN0
Lmg+ICAgICAgICAgICAgICAgLy8gZm9yIE1ENSBmdW5jdGlvbnMKKyNpbXBvcnQgPFdlYktpdC9X
ZWJLaXQuaD4KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIqIHNjcmVlbkNhcHR1cmVCdWZmZXI7CiAK
QEAgLTgwLDE3ICs3NywxNyBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Q29sb3JQcm9maWxlVG9S
R0IoCiAgICAgQ01Db3B5UHJvZmlsZURlc2NyaXB0aW9uU3RyaW5nKGdlbmVyaWNQcm9maWxlLCAm
Z2VuZXJpY1Byb2ZpbGVOYW1lKTsKICAgICBDRlN0cmluZ0dldENTdHJpbmcocHJldmlvdXNQcm9m
aWxlTmFtZSwgcHJldmlvdXNQcm9maWxlTmFtZVN0cmluZywgc2l6ZW9mKHByZXZpb3VzUHJvZmls
ZU5hbWVTdHJpbmcpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwogICAgIENGU3RyaW5nR2V0Q1N0
cmluZyhnZW5lcmljUHJvZmlsZU5hbWUsIGdlbmVyaWNQcm9maWxlTmFtZVN0cmluZywgc2l6ZW9m
KHByZXZpb3VzUHJvZmlsZU5hbWVTdHJpbmcpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpOwotICAg
IENGUmVsZWFzZShnZW5lcmljUHJvZmlsZU5hbWUpOwogICAgIENGUmVsZWFzZShwcmV2aW91c1By
b2ZpbGVOYW1lKTsKLSAgICAKKyAgICBDRlJlbGVhc2UoZ2VuZXJpY1Byb2ZpbGVOYW1lKTsKKwog
ICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbldBUk5JTkc6IFRlbXBvcmFyaWx5IGNoYW5naW5nIHlv
dXIgc3lzdGVtIGNvbG9yIHByb2ZpbGUgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgcHJldmlv
dXNQcm9maWxlTmFtZVN0cmluZywgZ2VuZXJpY1Byb2ZpbGVOYW1lU3RyaW5nKTsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIlRoaXMgYWxsb3dzIHRoZSBXZWJLaXQgcGl4ZWwtYmFzZWQgcmVncmVzc2lv
biB0ZXN0cyB0byBoYXZlIGNvbnNpc3RlbnQgY29sb3IgdmFsdWVzIGFjcm9zcyBhbGwgbWFjaGlu
ZXMuXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBjb2xvcnMgb24geW91ciBzY3JlZW4g
d2lsbCBjaGFuZ2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdGluZy5cblxuIik7CiAgICAg
Ci0gICAgaWYgKChlcnJvciA9IENNU2V0RGVmYXVsdFByb2ZpbGVCeVVzZShjbURpc3BsYXlVc2Us
IGdlbmVyaWNQcm9maWxlKSkpCisgICAgaWYgKChlcnJvciA9IENNU2V0RGVmYXVsdFByb2ZpbGVC
eVVzZShjbURpc3BsYXlVc2UsIGdlbmVyaWNQcm9maWxlKSkpIHsKICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJGYWlsZWQgdG8gc2V0IGNvbG9yIHByb2ZpbGUgdG8gXCIlc1wiISBNYW55IHBpeGVs
IHRlc3RzIHdpbGwgZmFpbCBhcyBhIHJlc3VsdC4gIChFcnJvcjogJWkpIiwKICAgICAgICAgICAg
IGdlbmVyaWNQcm9maWxlTmFtZVN0cmluZywgZXJyb3IpOwotICAgIGVsc2UgeworICAgIH0gZWxz
ZSB7CiAgICAgICAgIGN1cnJlbnRDb2xvclByb2ZpbGUgPSBwcmV2aW91c1Byb2ZpbGU7CiAgICAg
ICAgIHNpZ25hbChTSUdJTlQsIHJlc3RvcmVDb2xvclNwYWNlKTsKICAgICAgICAgc2lnbmFsKFNJ
R0hVUCwgcmVzdG9yZUNvbG9yU3BhY2UpOwpAQCAtMTA1LDExOSArMTAyLDcwIEBAIHZvaWQgaW5p
dGlhbGl6ZUNvbG9yU3BhY2VBbmRTY3JlZUJ1ZmZlckYKICAgICBzaGFyZWRDb2xvclNwYWNlID0g
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CiB9CiAKLS8qIEhhc2hlcyBhIGJpdG1hcCBh
bmQgcmV0dXJucyBhIHRleHQgc3RyaW5nIGZvciBjb21wYXJpc29uIGFuZCBzYXZpbmcgdG8gYSBm
aWxlICovCi1zdGF0aWMgTlNTdHJpbmcgKm1kNUhhc2hTdHJpbmdGb3JCaXRtYXAoQ0dJbWFnZVJl
ZiBiaXRtYXApCisvLyBEZWNsYXJlZCBpbiBQaXhlbER1bXBTdXBwb3J0Q0cuaAorCitSZXRhaW5Q
dHI8Q0dDb250ZXh0UmVmPiBnZXRCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoKQogewotICAgIE1E
NV9DVFggbWQ1Q29udGV4dDsKLSAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMTZdOwotICAgIAotICAg
IHVuc2lnbmVkIGJpdHNQZXJQaXhlbCA9IENHSW1hZ2VHZXRCaXRzUGVyUGl4ZWwoYml0bWFwKTsK
LSAgICBhc3NlcnQoYml0c1BlclBpeGVsID09IDMyKTsgLy8gSW1hZ2VEaWZmIGFzc3VtZXMgMzIg
Yml0IFJHQkEsIHdlIG11c3QgYXMgd2VsbC4KLSAgICB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0g
Yml0c1BlclBpeGVsIC8gODsKLSAgICB1bnNpZ25lZCBwaXhlbHNIaWdoID0gQ0dJbWFnZUdldEhl
aWdodChiaXRtYXApOwotICAgIHVuc2lnbmVkIHBpeGVsc1dpZGUgPSBDR0ltYWdlR2V0V2lkdGgo
Yml0bWFwKTsKLSAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJv
dyhiaXRtYXApOwotICAgIGFzc2VydChieXRlc1BlclJvdyA+PSAocGl4ZWxzV2lkZSAqIGJ5dGVz
UGVyUGl4ZWwpKTsKLSAgICAKLSAgICBNRDVfSW5pdCgmbWQ1Q29udGV4dCk7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqYml0bWFwRGF0YSA9IHNjcmVlbkNhcHR1cmVCdWZmZXI7Ci0gICAgZm9yICh1bnNp
Z25lZCByb3cgPSAwOyByb3cgPCBwaXhlbHNIaWdoOyByb3crKykgewotICAgICAgICBNRDVfVXBk
YXRlKCZtZDVDb250ZXh0LCBiaXRtYXBEYXRhLCBwaXhlbHNXaWRlICogYnl0ZXNQZXJQaXhlbCk7
Ci0gICAgICAgIGJpdG1hcERhdGEgKz0gYnl0ZXNQZXJSb3c7Ci0gICAgfQotICAgIE1ENV9GaW5h
bChoYXNoLCAmbWQ1Q29udGV4dCk7Ci0gICAgCi0gICAgY2hhciBoZXhbMzNdID0gIiI7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgIHNucHJpbnRmKGhleCwgMzMs
ICIlcyUwMngiLCBoZXgsIGhhc2hbaV0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmhleF07CisgICAgTlNTaXplIHdlYlZpZXdTaXplID0g
W1ttYWluRnJhbWUgd2ViVmlld10gZnJhbWVdLnNpemU7CisgICAgcmV0dXJuIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShzY3JlZW5DYXB0dXJl
QnVmZmVyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdlYlZpZXdTaXplLndpZHRoKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pih3ZWJWaWV3U2l6ZS5oZWlnaHQpLCA4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdl
YlZpZXdTaXplLndpZHRoKSAqIDQsIHNoYXJlZENvbG9yU3BhY2UsIGtDR0JpdG1hcEJ5dGVPcmRl
cjMySG9zdCB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwogfQogCi12b2lkIGR1
bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKE5TU3RyaW5nKiBjdXJyZW50
VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKQordm9pZCBkcmF3V2ViVmlld0lu
dG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGlmICghbGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBBc1RleHQoKSAmJiAhbGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01B
c1dlYkFyY2hpdmUoKSAmJiAhbGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFy
Y2hpdmUoKSkgewotICAgICAgICAvLyBncmFiIGEgYml0bWFwIGZyb20gdGhlIHZpZXcKLSAgICAg
ICAgV2ViVmlldyogdmlldyA9IFttYWluRnJhbWUgd2ViVmlld107Ci0gICAgICAgIE5TU2l6ZSB3
ZWJWaWV3U2l6ZSA9IFt2aWV3IGZyYW1lXS5zaXplOwotICAgICAgICAKLSAgICAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShzY3JlZW5DYXB0dXJlQnVm
ZmVyLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdlYlZpZXdTaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8
c2l6ZV90Pih3ZWJWaWV3U2l6ZS5oZWlnaHQpLCA4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdlYlZp
ZXdTaXplLndpZHRoKSAqIDQsIHNoYXJlZENvbG9yU3BhY2UsIGtDR0JpdG1hcEJ5dGVPcmRlcjMy
SG9zdCB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7Ci0gICAgICAgIAotICAgICAg
ICBOU0dyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0ID0gW1tbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIHJldGFpbl0gYXV0b3JlbGVhc2VdOwotICAgICAgICBOU0dyYXBoaWNz
Q29udGV4dCogbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdp
dGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBwZWQ6Tk9dOwotICAgICAgICBbTlNHcmFwaGlj
c0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bnNDb250ZXh0XTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RSZXBhaW50KCkpIHsKLSAgICAgICAgICAg
IE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwOwotICAgICAgICAgICAgW3ZpZXcgZGlzcGxheUlm
TmVlZGVkXTsKLSAgICAgICAgICAgIFt2aWV3IGxvY2tGb2N1c107Ci0gICAgICAgICAgICBpbWFn
ZVJlcCA9IFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhGb2N1c2VkVmlld1JlY3Q6
W3ZpZXcgZnJhbWVdXTsKLSAgICAgICAgICAgIFt2aWV3IHVubG9ja0ZvY3VzXTsKLSAgICAgICAg
ICAgIFtpbWFnZVJlcCBkcmF3XTsKLSAgICAgICAgICAgIFtpbWFnZVJlcCByZWxlYXNlXTsKLSAg
ICAgICAgfSBlbHNlIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXItPnRlc3RSZXBhaW50U3dlZXBI
b3Jpem9udGFsbHkoKSkgewotICAgICAgICAgICAgTlNSZWN0IGxpbmUgPSBOU01ha2VSZWN0KDAs
IDAsIHdlYlZpZXdTaXplLndpZHRoLCAxKTsKLSAgICAgICAgICAgIHdoaWxlIChsaW5lLm9yaWdp
bi55IDwgd2ViVmlld1NpemUuaGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgW3ZpZXcgZGlzcGxh
eVJlY3RJZ25vcmluZ09wYWNpdHk6bGluZSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKLSAgICAgICAg
ICAgICAgICBsaW5lLm9yaWdpbi55Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBOU1JlY3QgY29sdW1uID0gTlNNYWtlUmVjdCgwLCAwLCAxLCB3ZWJWaWV3
U2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgd2hpbGUgKGNvbHVtbi5vcmlnaW4ueCA8IHdlYlZp
ZXdTaXplLndpZHRoKSB7Ci0gICAgICAgICAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6Y29sdW1uIGluQ29udGV4dDpuc0NvbnRleHRdOwotICAgICAgICAgICAgICAgIGNv
bHVtbi5vcmlnaW4ueCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChs
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNlbGVjdGlvblJlY3QoKSkgewotICAgICAgICAgICAg
TlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbW21haW5GcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmll
d107Ci0gICAgICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHBy
b3RvY29sKFdlYkRvY3VtZW50U2VsZWN0aW9uKV0pIHsKLSAgICAgICAgICAgICAgICBbW05TQ29s
b3IgcmVkQ29sb3JdIHNldF07Ci0gICAgICAgICAgICAgICAgW05TQmV6aWVyUGF0aCBzdHJva2VS
ZWN0Oltkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6WyhpZCA8V2ViRG9jdW1lbnRTZWxlY3Rpb24+
KWRvY3VtZW50VmlldyBzZWxlY3Rpb25SZWN0XSBmcm9tVmlldzpuaWxdXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1
cnJlbnRDb250ZXh0OnNhdmVkQ29udGV4dF07Ci0gICAgICAgIAotICAgICAgICBDR0ltYWdlUmVm
IGJpdG1hcEltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY2dDb250ZXh0KTsKLSAg
ICAgICAgQ0dDb250ZXh0UmVsZWFzZShjZ0NvbnRleHQpOwotICAgICAgICAKLSAgICAgICAgLy8g
Y29tcHV0ZSB0aGUgYWN0dWFsIGhhc2ggdG8gY29tcGFyZSB0byB0aGUgZXhwZWN0ZWQgaW1hZ2Un
cyBoYXNoCi0gICAgICAgIE5TU3RyaW5nICphY3R1YWxIYXNoID0gbWQ1SGFzaFN0cmluZ0ZvckJp
dG1hcChiaXRtYXBJbWFnZSk7Ci0gICAgICAgIHByaW50ZigiXG5BY3R1YWxIYXNoOiAlc1xuIiwg
W2FjdHVhbEhhc2ggVVRGOFN0cmluZ10pOwotICAgICAgICAKLSAgICAgICAgQk9PTCBkdW1wSW1h
Z2U7Ci0gICAgICAgIGlmIChmb3JjZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKQotICAgICAgICAgICAg
ZHVtcEltYWdlID0gWUVTOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCdzIHVuZm9ydHVuYXRlIHRoYXQgd2UgaGFyZGNvZGUgdGhlIGZpbGUgbmFtaW5nIHNjaGVtZSBo
ZXJlLgotICAgICAgICAgICAgLy8gQXQgb25lIHRpbWUsIHRoZSBwZXJsIHNjcmlwdCBoYWQgYWxs
IHRoZSBrbm93bGVkZ2UgYWJvdXQgZmlsZSBsYXlvdXQuCi0gICAgICAgICAgICAvLyBTb21lIGRh
eSB3ZSBzaG91bGQgcmVzdG9yZSB0aGF0IHNldHVwIGJ5IHBhc3NpbmcgaW4gbW9yZSBwYXJhbWV0
ZXJzIHRvIHRoaXMgdG9vbAotICAgICAgICAgICAgLy8gb3IgcmV0dXJuaW5nIG1vcmUgaW5mb3Jt
YXRpb24gZnJvbSB0aGUgdG9vbCB0byB0aGUgcGVybCBzY3JpcHQKLSAgICAgICAgICAgIE5TU3Ry
aW5nICpiYXNlVGVzdFBhdGggPSBbY3VycmVudFRlc3Qgc3RyaW5nQnlEZWxldGluZ1BhdGhFeHRl
bnNpb25dOwotICAgICAgICAgICAgTlNTdHJpbmcgKmJhc2VsaW5lSGFzaFBhdGggPSBbYmFzZVRl
c3RQYXRoIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLWV4cGVjdGVkLmNoZWNrc3VtIl07Ci0g
ICAgICAgICAgICBOU1N0cmluZyAqYmFzZWxpbmVIYXNoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhD
b250ZW50c09mRmlsZTpiYXNlbGluZUhhc2hQYXRoIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOm5pbF07Ci0gICAgICAgICAgICBOU1N0cmluZyAqYmFzZWxpbmVJbWFnZVBhdGgg
PSBbYmFzZVRlc3RQYXRoIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLWV4cGVjdGVkLnBuZyJd
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwcmludGYoIkJhc2VsaW5lSGFzaDogJXNcbiIs
IFtiYXNlbGluZUhhc2ggVVRGOFN0cmluZ10pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
Ly8gc2VuZCB0aGUgaW1hZ2UgdG8gc3Rkb3V0IGlmIHRoZSBoYXNoIG1pc21hdGNoZXMgb3IgaWYg
dGhlcmUncyBubyBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbQotICAgICAgICAgICAgZHVtcEltYWdl
ID0gIVtiYXNlbGluZUhhc2ggaXNFcXVhbFRvU3RyaW5nOmFjdHVhbEhhc2hdIHx8IGFjY2Vzcyhb
YmFzZWxpbmVJbWFnZVBhdGggZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSwgRl9PSykgIT0gMDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGR1bXBJbWFnZSkgewotICAgICAgICAg
ICAgQ0ZNdXRhYmxlRGF0YVJlZiBpbWFnZURhdGEgPSBDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDAp
OwotICAgICAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uUmVmIGltYWdlRGVzdCA9IENHSW1hZ2VE
ZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGltYWdlRGF0YSwgQ0ZTVFIoInB1YmxpYy5wbmciKSwg
MSwgMCk7Ci0gICAgICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShpbWFnZURlc3Qs
IGJpdG1hcEltYWdlLCAwKTsKLSAgICAgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXpl
KGltYWdlRGVzdCk7Ci0gICAgICAgICAgICBDRlJlbGVhc2UoaW1hZ2VEZXN0KTsKLSAgICAgICAg
ICAgIHByaW50ZigiQ29udGVudC1sZW5ndGg6ICVsdVxuIiwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdl
RGF0YSkpOwotICAgICAgICAgICAgZndyaXRlKENGRGF0YUdldEJ5dGVQdHIoaW1hZ2VEYXRhKSwg
MSwgQ0ZEYXRhR2V0TGVuZ3RoKGltYWdlRGF0YSksIHN0ZG91dCk7Ci0gICAgICAgICAgICBDRlJl
bGVhc2UoaW1hZ2VEYXRhKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ0dJbWFnZVJl
bGVhc2UoYml0bWFwSW1hZ2UpOworICAgIFJldGFpblB0cjxOU0dyYXBoaWNzQ29udGV4dD4gc2F2
ZWRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKworICAgIE5T
R3JhcGhpY3NDb250ZXh0KiBuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBwZWQ6Tk9dOworICAgIFtOU0dyYXBo
aWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuc0NvbnRleHRdOworCisgICAgV2ViVmlldyog
dmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CisgICAgW3ZpZXcgZGlzcGxheUlmTmVlZGVkXTsK
KyAgICBbdmlldyBsb2NrRm9jdXNdOworICAgIE5TQml0bWFwSW1hZ2VSZXAgKmltYWdlUmVwID0g
W1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEZvY3VzZWRWaWV3UmVjdDpbdmlldyBm
cmFtZV1dOworICAgIFt2aWV3IHVubG9ja0ZvY3VzXTsKKyAgICBbaW1hZ2VSZXAgZHJhd107Cisg
ICAgW2ltYWdlUmVwIHJlbGVhc2VdOworCisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJl
bnRDb250ZXh0OnNhdmVkQ29udGV4dC5nZXQoKV07Cit9CisKK3ZvaWQgcmVwYWludFdpdGhWZXJ0
aWNhbFN3ZWVwKENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIFJldGFpblB0cjxOU0dyYXBo
aWNzQ29udGV4dD4gc2F2ZWRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XTsKKworICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuc0NvbnRleHQgPSBbTlNHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBwZWQ6Tk9d
OworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuc0NvbnRleHRdOwor
CisgICAgV2ViVmlldyAqdmlldyA9IFttYWluRnJhbWUgd2ViVmlld107CisgICAgTlNTaXplIHdl
YlZpZXdTaXplID0gW3ZpZXcgZnJhbWVdLnNpemU7CisgICAgZm9yIChOU1JlY3QgbGluZSA9IE5T
TWFrZVJlY3QoMCwgMCwgd2ViVmlld1NpemUud2lkdGgsIDEpOyBsaW5lLm9yaWdpbi55IDwgd2Vi
Vmlld1NpemUuaGVpZ2h0OyBsaW5lLm9yaWdpbi55KyspCisgICAgICAgIFt2aWV3IGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5OmxpbmUgaW5Db250ZXh0Om5zQ29udGV4dF07CisKKyAgICBbTlNH
cmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6c2F2ZWRDb250ZXh0LmdldCgpXTsKK30K
Kwordm9pZCByZXBhaW50V2l0aEhvcml6b250YWxTd2VlcChDR0NvbnRleHRSZWYgY29udGV4dCkK
K3sKKyAgICBSZXRhaW5QdHI8TlNHcmFwaGljc0NvbnRleHQ+IHNhdmVkQ29udGV4dCA9IFtOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisKKyAgICBOU0dyYXBoaWNzQ29udGV4dCog
bnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGlj
c1BvcnQ6Y29udGV4dCBmbGlwcGVkOk5PXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3Vy
cmVudENvbnRleHQ6bnNDb250ZXh0XTsKKworICAgIFdlYlZpZXcgKnZpZXcgPSBbbWFpbkZyYW1l
IHdlYlZpZXddOworICAgIE5TU2l6ZSB3ZWJWaWV3U2l6ZSA9IFt2aWV3IGZyYW1lXS5zaXplOwor
ICAgIGZvciAoTlNSZWN0IGNvbHVtbiA9IE5TTWFrZVJlY3QoMCwgMCwgMSwgd2ViVmlld1NpemUu
aGVpZ2h0KTsgY29sdW1uLm9yaWdpbi54IDwgd2ViVmlld1NpemUud2lkdGg7IGNvbHVtbi5vcmln
aW4ueCsrKQorICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpjb2x1bW4g
aW5Db250ZXh0Om5zQ29udGV4dF07CisKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVu
dENvbnRleHQ6c2F2ZWRDb250ZXh0LmdldCgpXTsKK30KKworQ0dSZWN0IGdldFNlbGVjdGlvblJl
Y3QoKQoreworICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW1ttYWluRnJhbWUgZnJhbWVWaWV3
XSBkb2N1bWVudFZpZXddOworICAgIGlmIChbZG9jdW1lbnRWaWV3IGNvbmZvcm1zVG9Qcm90b2Nv
bDpAcHJvdG9jb2woV2ViRG9jdW1lbnRTZWxlY3Rpb24pXSkgeworICAgICAgICBOU1JlY3QgcmVj
dCA9IFtkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6WyhpZCA8V2ViRG9jdW1lbnRTZWxlY3Rpb24+
KWRvY3VtZW50VmlldyBzZWxlY3Rpb25SZWN0XSBmcm9tVmlldzpuaWxdOworICAgICAgICByZXR1
cm4gQ0dSZWN0TWFrZShyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55LCByZWN0LnNpemUud2lk
dGgsIHJlY3Quc2l6ZS5oZWlnaHQpOwogICAgIH0KLSAgICAKLSAgICBwcmludGYoIiNFT0ZcbiIp
OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENHUmVjdFplcm87CiB9
CkluZGV4OiBEdW1wUmVuZGVyVHJlZS9tYWMvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBEdW1wUmVuZGVyVHJlZS9tYWMvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2Nv
bmZpZwkocmV2aXNpb24gMjgwMzgpCisrKyBEdW1wUmVuZGVyVHJlZS9tYWMvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIEhFQURFUl9T
RUFSQ0hfUEFUSFMgPSBGb3J3YXJkaW5nSGVhZGVycwotRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9
ICQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvRnJhbWV3
b3JrcworRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFt
ZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvRnJhbWV3b3JrcyAkKFNZU1RFTV9MSUJSQVJZX0RJUikv
RnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzCiBERUJV
R19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZgogUFJFQklORElORyA9IE5PCiBHQ0NfQ19MQU5H
VUFHRV9TVEFOREFSRCA9IGdudTk5CkluZGV4OiBEdW1wUmVuZGVyVHJlZS93aW4vUGl4ZWxEdW1w
U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIER1bXBSZW5kZXJUcmVlL3dpbi9QaXhlbER1bXBTdXBw
b3J0LmgJKHJldmlzaW9uIDI4MDM4KQorKysgRHVtcFJlbmRlclRyZWUvd2luL1BpeGVsRHVtcFN1
cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQaXhlbER1
bXBTdXBwb3J0X2gKLSNkZWZpbmUgUGl4ZWxEdW1wU3VwcG9ydF9oCi0KLS8vIEZJWE1FOiBUaGlz
IGZpbGUgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3aW4vIHN1YmRpcmVjdG9yeS4KLQotdm9pZCBk
dW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChjb25zdCBjaGFyKiBjdXJy
ZW50VGVzdCwgYm9vbCBmb3JjZUFsbFRlc3RzVG9EdW1wUGl4ZWxzKTsKLQotI2VuZGlmIC8vIFBp
eGVsRHVtcFN1cHBvcnRfaAo=
</data>
<flag name="review"
          id="7537"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>