<?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>45727</bug_id>
          
          <creation_ts>2010-09-13 19:17:37 -0700</creation_ts>
          <short_desc>Threaded mode should work in WebKit2 MiniBrowser</short_desc>
          <delta_ts>2010-09-13 19:49:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>278652</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:17:37 -0700</bug_when>
    <thetext>Threaded mode should for in WebKit2 MiniBrowser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278654</commentid>
    <comment_count>1</comment_count>
      <attachid>67509</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:19:46 -0700</bug_when>
    <thetext>Created attachment 67509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278656</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-13 19:21:50 -0700</bug_when>
    <thetext>Attachment 67509 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/ThreadLauncher.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278660</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-13 19:27:04 -0700</bug_when>
    <thetext>Attachment 67509 did not build on qt:
Build output: http://queues.webkit.org/results/4021003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278661</commentid>
    <comment_count>4</comment_count>
      <attachid>67511</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:29:00 -0700</bug_when>
    <thetext>Created attachment 67511
Updated to not break qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278662</commentid>
    <comment_count>5</comment_count>
      <attachid>67512</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:29:43 -0700</bug_when>
    <thetext>Created attachment 67512
Update to not break windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278663</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-13 19:31:27 -0700</bug_when>
    <thetext>Attachment 67512 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/win/ThreadLauncherWin.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/Launcher/ThreadLauncher.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 4 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278666</commentid>
    <comment_count>7</comment_count>
      <attachid>67512</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2010-09-13 19:47:35 -0700</bug_when>
    <thetext>Comment on attachment 67512
Update to not break windows.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278667</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:49:03 -0700</bug_when>
    <thetext>Landed in r67433.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67509</attachid>
            <date>2010-09-13 19:19:46 -0700</date>
            <delta_ts>2010-09-13 19:29:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>threadedMode.diff</filename>
            <type>text/plain</type>
            <size>34869</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQzMSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaHJlYWRl
ZCBtb2RlIHNob3VsZCBmb3IgaW4gV2ViS2l0MiBNaW5pQnJvd3NlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3MjcKKworICAgICAgICAtIE1ha2Ug
c3RhcnRpbmcgdGhlIHdlYiB0aHJlYWQgbW9yZSBsaWtlIHN0YXJ0aW5nIGEgbmV3CisgICAgICAg
ICAgcHJvY2VzcyAoZW5jYXBzdWxhdGUgaXQgaW4gYSB0aHJlYWQgbGF1bmNoZXIgY2xhc3MpLgor
ICAgICAgICAtIE1ha2UgdGhlIGNhbGwgdG8gZGlkRmluaXNoTGF1bmNoaW5nIGFzeW5jaHJvbm91
cyBzbyB0aGF0CisgICAgICAgICAgV2ViUHJvY2VzcyBpcyBmdWxseSBjb25zdHJ1Y3RlZCBiZWZv
cmUgaXQgaXMgY2FsbGVkLgorCisgICAgICAgICogUGxhdGZvcm0vV29ya0l0ZW0uaDoKKyAgICAg
ICAgKE1lbWJlckZ1bmN0aW9uV29ya0l0ZW0xOjpNZW1iZXJGdW5jdGlvbldvcmtJdGVtMSk6Cisg
ICAgICAgIChNZW1iZXJGdW5jdGlvbldvcmtJdGVtMTo6fk1lbWJlckZ1bmN0aW9uV29ya0l0ZW0x
KToKKyAgICAgICAgKE1lbWJlckZ1bmN0aW9uV29ya0l0ZW0xOjpleGVjdXRlKToKKyAgICAgICAg
KFdvcmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNz
TGF1bmNoZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OlRocmVhZExhdW5j
aGVyKToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmxhdW5jaFRocmVhZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdUaHJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6aW52YWxpZGF0ZSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Q2xpZW50Ojp+Q2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6VGhyZWFkTGF1bmNoZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5j
aGVyOjppc0xhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVy
bWluYXRlUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9UaHJlYWRM
YXVuY2hlck1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCk6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVy
L3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vVGhyZWFkTGF1bmNoZXJXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6d2Vi
VGhyZWFkQm9keSk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2Vi
VGhyZWFkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojp+V2ViUHJvY2Vzc1Byb3h5KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Byb3h5Ojppc0xhdW5jaGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
cm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5Lmg6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKwog
MjAxMC0wOS0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQy
L1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiArMjAxLDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0dl
bmVyaWNDYWxsYmFjay5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmggXAorICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIFwKICAgICBVSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaCBcCiAgICAgVUlQcm9jZXNzL1Byb2Nlc3NNb2RlbC5oIFwKQEAgLTMxNSw3ICszMTYsOSBA
QCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3Bw
IFwKICAgICBVSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5JbmZvU3RvcmVRdC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIFwKKyAgICBVSVByb2Nlc3Mv
TGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQv
UHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFk
TGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBc
CiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
V2ViQmFja0ZvcndhcmRMaXN0LmNwcCBcCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1dvcmtJdGVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrSXRlbS5oCShyZXZpc2lvbiA2
NzQyOSkKKysrIFdlYktpdDIvUGxhdGZvcm0vV29ya0l0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsOSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQz4gCiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8V29ya0l0ZW0+IGNyZWF0ZShDKiwgdm9pZCAoQzo6KikoKSk7CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUMD4KKyAgICBzdGF0aWMgUGFzc093blB0
cjxXb3JrSXRlbT4gY3JlYXRlKEMqLCB2b2lkIChDOjoqKShUMCksIFQwKTsKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4KICAgICBzdGF0aWMgUGFz
c093blB0cjxXb3JrSXRlbT4gY3JlYXRlKEMqLCB2b2lkIChDOjoqKShUMCwgVDEpLCBUMCwgVDEp
OwogCkBAIC03NSw2ICs3OCwzNiBAQCBjbGFzcyBNZW1iZXJGdW5jdGlvbldvcmtJdGVtMCA6IHBy
aXZhdGUgCiAgICAgRnVuY3Rpb25UeXBlIG1fZnVuY3Rpb247CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDLCB0eXBlbmFtZSBUMD4KK2NsYXNzIE1lbWJlckZ1bmN0aW9uV29ya0l0ZW0xIDogcHJp
dmF0ZSBXb3JrSXRlbSB7CisgICAgLy8gV2Ugb25seSBhbGxvdyBXb3JrSXRlbSB0byBjcmVhdGUg
dGhpcy4KKyAgICBmcmllbmQgY2xhc3MgV29ya0l0ZW07CisgICAgCisgICAgdHlwZWRlZiB2b2lk
IChDOjoqRnVuY3Rpb25UeXBlKShUMCk7CisgICAgCisgICAgTWVtYmVyRnVuY3Rpb25Xb3JrSXRl
bTEoQyogcHRyLCBGdW5jdGlvblR5cGUgZnVuY3Rpb24sIFQwIHQwKQorICAgICAgICA6IG1fcHRy
KHB0cikKKyAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fdDAodDAp
CisgICAgeworICAgICAgICBtX3B0ci0+cmVmKCk7CisgICAgfQorICAgIAorICAgIH5NZW1iZXJG
dW5jdGlvbldvcmtJdGVtMSgpCisgICAgeworICAgICAgICBtX3B0ci0+ZGVyZWYoKTsKKyAgICB9
CisKKyAgICB2b2lkIGV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgKG1fcHRyLT4qbV9mdW5jdGlv
bikobV90MCk7CisgICAgfQorICAgIAorICAgIEMqIG1fcHRyOworICAgIEZ1bmN0aW9uVHlwZSBt
X2Z1bmN0aW9uOworICAgIFQwIG1fdDA7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBl
bmFtZSBUMCwgdHlwZW5hbWUgVDE+CiBjbGFzcyBNZW1iZXJGdW5jdGlvbldvcmtJdGVtMiA6IHBy
aXZhdGUgV29ya0l0ZW0gewogICAgIC8vIFdlIG9ubHkgYWxsb3cgV29ya0l0ZW0gdG8gY3JlYXRl
IHRoaXMuCkBAIC0xMTMsNiArMTQ2LDEyIEBAIFBhc3NPd25QdHI8V29ya0l0ZW0+IFdvcmtJdGVt
OjpjcmVhdGUoQyoKICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8V29ya0l0ZW0qPihu
ZXcgTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTA8Qz4ocHRyLCBmdW5jdGlvbikpKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgVDA+CitQYXNzT3duUHRyPFdvcmtJdGVtPiBXb3Jr
SXRlbTo6Y3JlYXRlKEMqIHB0ciwgdm9pZCAoQzo6KmZ1bmN0aW9uKShUMCksIFQwIHQwKQorewor
ICAgIHJldHVybiBhZG9wdFB0cihzdGF0aWNfY2FzdDxXb3JrSXRlbSo+KG5ldyBNZW1iZXJGdW5j
dGlvbldvcmtJdGVtMTxDLCBUMD4ocHRyLCBmdW5jdGlvbiwgdDApKSk7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIEMsIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4KIFBhc3NPd25QdHI8V29ya0l0
ZW0+IFdvcmtJdGVtOjpjcmVhdGUoQyogcHRyLCB2b2lkIChDOjoqZnVuY3Rpb24pKFQwLCBUMSks
IFQwIHQwLCBUMSB0MSkKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgiCiAjaW5j
bHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIK
QEAgLTEwMiwxOCArMTAxLDIyIEBAIFdlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSgp
CiAgICAgICAgIG1fcHJvY2Vzc0xhdW5jaGVyLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIG1fcHJv
Y2Vzc0xhdW5jaGVyID0gMDsKICAgICB9CisKKyAgICBpZiAobV90aHJlYWRMYXVuY2hlcikgewor
ICAgICAgICBtX3RocmVhZExhdW5jaGVyLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fdGhyZWFk
TGF1bmNoZXIgPSAwOworICAgIH0KIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmNvbm5lY3Qo
KQogewogICAgIGlmIChtX2NvbnRleHQtPnByb2Nlc3NNb2RlbCgpID09IFByb2Nlc3NNb2RlbFNo
YXJlZFNlY29uZGFyeVRocmVhZCkgewotICAgICAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyID0gUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJU
aHJlYWQoKTsKLSAgICAgICAgZGlkRmluaXNoTGF1bmNoaW5nKDAsIGNvbm5lY3Rpb25JZGVudGlm
aWVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoIW1fdGhyZWFkTGF1bmNoZXIp
OworICAgICAgICBtX3RocmVhZExhdW5jaGVyID0gVGhyZWFkTGF1bmNoZXI6OmNyZWF0ZSh0aGlz
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fcHJvY2Vzc0xhdW5jaGVyKTsKKyAg
ICAgICAgbV9wcm9jZXNzTGF1bmNoZXIgPSBQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZSh0aGlzKTsK
ICAgICB9Ci0KLSAgICBBU1NFUlQoIW1fcHJvY2Vzc0xhdW5jaGVyKTsKLSAgICBtX3Byb2Nlc3NM
YXVuY2hlciA9IFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRlKHRoaXMpOwogfQogCiBib29sIFdlYlBy
b2Nlc3NQcm94eTo6c2VuZE1lc3NhZ2UoQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFz
c093blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKQEAgLTEyOCw2ICsx
MzEsMTYgQEAgYm9vbCBXZWJQcm9jZXNzUHJveHk6OnNlbmRNZXNzYWdlKENvcmVJUAogICAgIHJl
dHVybiBtX2Nvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKIH0K
IAorYm9vbCBXZWJQcm9jZXNzUHJveHk6OmlzTGF1bmNoaW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9wcm9jZXNzTGF1bmNoZXIpCisgICAgICAgIHJldHVybiBtX3Byb2Nlc3NMYXVuY2hlci0+aXNM
YXVuY2hpbmcoKTsKKyAgICBpZiAobV90aHJlYWRMYXVuY2hlcikKKyAgICAgICAgcmV0dXJuIG1f
dGhyZWFkTGF1bmNoZXItPmlzTGF1bmNoaW5nKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp0ZXJtaW5hdGUoKQogewogICAgIGlmIChtX3Byb2Nlc3NM
YXVuY2hlcikKQEAgLTQyNCw3ICs0MzcsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEJl
Y29tZVJlc3BvbnNpdgogICAgICAgICBwYWdlc1tpXS0+cHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNp
dmUoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9j
ZXNzTGF1bmNoZXIqLCBjb25zdCBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyJiBjb25u
ZWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hp
bmcoUHJvY2Vzc0xhdW5jaGVyKiwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25u
ZWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBkaWRGaW5pc2hMYXVuY2hpbmcoY29ubmVjdGlvbklk
ZW50aWZpZXIpOworfQorCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5n
KFRocmVhZExhdW5jaGVyKiwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0
aW9uSWRlbnRpZmllcikKK3sKKyAgICBkaWRGaW5pc2hMYXVuY2hpbmcoY29ubmVjdGlvbklkZW50
aWZpZXIpOworfQorCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNoaW5nKENv
cmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwogICAgIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmgJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDEwIEBACiAjaW5jbHVkZSAi
UHJvY2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc01vZGVsLmgiCiAjaW5jbHVkZSAi
UmVzcG9uc2l2ZW5lc3NUaW1lci5oIgorI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ5LDcgKzUwLDcgQEAgY2xhc3MgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbTsKIGNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOwogICAg
IAotY2xhc3MgV2ViUHJvY2Vzc1Byb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUHJvY2Vzc1By
b3h5PiwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Q2xpZW50LCBSZXNwb25zaXZlbmVzc1RpbWVyOjpD
bGllbnQsIFByb2Nlc3NMYXVuY2hlcjo6Q2xpZW50IHsKK2NsYXNzIFdlYlByb2Nlc3NQcm94eSA6
IHB1YmxpYyBSZWZDb3VudGVkPFdlYlByb2Nlc3NQcm94eT4sIENvcmVJUEM6OkNvbm5lY3Rpb246
OkNsaWVudCwgUmVzcG9uc2l2ZW5lc3NUaW1lcjo6Q2xpZW50LCBQcm9jZXNzTGF1bmNoZXI6OkNs
aWVudCwgVGhyZWFkTGF1bmNoZXI6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViUGFnZVByb3h5PiA+IFdlYlBhZ2VQcm94eU1hcDsKICAg
ICB0eXBlZGVmIFdlYlBhZ2VQcm94eU1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBwYWdlc19j
b25zdF9pdGVyYXRvcjsKQEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogICAgIFJlc3BvbnNpdmVu
ZXNzVGltZXIqIHJlc3BvbnNpdmVuZXNzVGltZXIoKSB7IHJldHVybiAmbV9yZXNwb25zaXZlbmVz
c1RpbWVyOyB9CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rp
b247IH0KLSAgICBib29sIGlzTGF1bmNoaW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzTGF1
bmNoZXIgJiYgbV9wcm9jZXNzTGF1bmNoZXItPmlzTGF1bmNoaW5nKCk7IH0KKyAgICBib29sIGlz
TGF1bmNoaW5nKCkgY29uc3Q7CiAKICAgICBXZWJGcmFtZVByb3h5KiB3ZWJGcmFtZSh1aW50NjRf
dCkgY29uc3Q7CiAgICAgdm9pZCBmcmFtZUNyZWF0ZWQodWludDY0X3QsIFdlYkZyYW1lUHJveHkq
KTsKQEAgLTEyMCwxMyArMTIxLDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRCZWNvbWVSZXNw
b25zaXZlKFJlc3BvbnNpdmVuZXNzVGltZXIqKTsKIAogICAgIC8vIFByb2Nlc3NMYXVuY2hlcjo6
Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNo
ZXIqLCBjb25zdCBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyJik7CisgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBDb3JlSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyKTsKKworICAgIC8vIFRocmVhZExhdW5jaGVyOjpDbGllbnQKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGF1bmNoaW5nKFRocmVhZExhdW5jaGVyKiwgQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CisKKyAgICB2b2lkIGRpZEZpbmlzaExhdW5jaGlu
ZyhDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKIAogICAgIFJlc3BvbnNpdmVuZXNz
VGltZXIgbV9yZXNwb25zaXZlbmVzc1RpbWVyOwogICAgIFJlZlB0cjxDb3JlSVBDOjpDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CiAKICAgICBWZWN0b3I8Q29yZUlQQzo6Q29ubmVjdGlvbjo6T3V0
Z29pbmdNZXNzYWdlPiBtX3BlbmRpbmdNZXNzYWdlczsKICAgICBSZWZQdHI8UHJvY2Vzc0xhdW5j
aGVyPiBtX3Byb2Nlc3NMYXVuY2hlcjsKKyAgICBSZWZQdHI8VGhyZWFkTGF1bmNoZXI+IG1fdGhy
ZWFkTGF1bmNoZXI7CiAKICAgICBXZWJDb250ZXh0KiBtX2NvbnRleHQ7CiAKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCShyZXZpc2lvbiA2NzQy
OSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkNsaWVudCgpIHsgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBjb25zdCBDb3JlSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGF1
bmNoaW5nKFByb2Nlc3NMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIp
ID0gMDsKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NMYXVuY2hl
cj4gY3JlYXRlKENsaWVudCogY2xpZW50KQpAQCAtNTcsOCArNTcsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCB0ZXJtaW5hdGVQcm9jZXNzKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKLSAgICBz
dGF0aWMgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjcmVhdGVXZWJUaHJlYWQoKTsK
LQogI2lmIFBMQVRGT1JNKFFUKQogICAgIGZyaWVuZCBjbGFzcyBQcm9jZXNzTGF1bmNoZXJIZWxw
ZXI7CiAgICAgc3RhdGljIFFMb2NhbFNvY2tldCogdGFrZVBlbmRpbmdDb25uZWN0aW9uKCk7Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitUaHJlYWRMYXVuY2hlcjo6VGhyZWFkTGF1bmNoZXIoQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgbGF1bmNoVGhyZWFkKCk7Cit9CisKK3Zv
aWQgVGhyZWFkTGF1bmNoZXI6OmxhdW5jaFRocmVhZCgpCit7CisgICAgbV9pc0xhdW5jaGluZyA9
IHRydWU7CisKKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25J
ZGVudGlmaWVyID0gY3JlYXRlV2ViVGhyZWFkKCk7CisKKyAgICAvLyBXZSd2ZSBmaW5pc2hlZCBs
YXVuY2hpbmcgdGhlIHRocmVhZCwgbWVzc2FnZSBiYWNrIHRvIHRoZSBtYWluIHJ1biBsb29wLgor
ICAgIFJ1bkxvb3A6Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywg
JlRocmVhZExhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdUaHJlYWQsIGNvbm5lY3Rpb25JZGVu
dGlmaWVyKSk7Cit9CisKK3ZvaWQgVGhyZWFkTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Ro
cmVhZChDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAg
bV9pc0xhdW5jaGluZyA9IGZhbHNlOworICAgIAorICAgIGlmICghbV9jbGllbnQpIHsKKyAgICAg
ICAgLy8gRklYTUU6IERpc3Bvc2Ugb2YgdGhlIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMYXVuY2hpbmcodGhp
cywgaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgVGhyZWFkTGF1bmNoZXI6OmludmFsaWRhdGUoKQor
eworICAgIG1fY2xpZW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRMYXVuY2hl
cl9oCisjZGVmaW5lIFRocmVhZExhdW5jaGVyX2gKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFBMQVRGT1JNKFFUKQor
Y2xhc3MgUUxvY2FsU29ja2V0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBUaHJlYWRMYXVuY2hlciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFRocmVhZExhdW5jaGVy
PiB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgfkNsaWVudCgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTGF1bmNo
aW5nKFRocmVhZExhdW5jaGVyKiwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcikgPSAw
OworICAgIH07CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkTGF1bmNoZXI+IGNy
ZWF0ZShDbGllbnQqIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGhyZWFkTGF1bmNoZXIoY2xpZW50KSk7CisgICAgfQorCisgICAgYm9vbCBpc0xhdW5jaGluZygp
IGNvbnN0IHsgcmV0dXJuIG1faXNMYXVuY2hpbmc7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZSgp
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFRocmVhZExhdW5jaGVyKENsaWVudCopOworCisg
ICAgdm9pZCBsYXVuY2hUaHJlYWQoKTsKKyAgICB2b2lkIGRpZEZpbmlzaExhdW5jaGluZ1RocmVh
ZChDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKKworICAgIHN0YXRpYyBDb3JlSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNyZWF0ZVdlYlRocmVhZCgpOworCisgICAgYm9vbCBt
X2lzTGF1bmNoaW5nOworICAgIENsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFRocmVhZExhdW5jaGVyX2gKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbQkocmV2
aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xh
dW5jaGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNDEgKzEyNSw1IEBAIHZvaWQgUHJv
Y2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKICAgICAKICAgICBraWxsKG1fcHJvY2Vz
c0lkZW50aWZpZXIsIFNJR0tJTEwpOwogfQotCi1zdGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2
b2lkKiBjb250ZXh0KQotewotICAgIG1hY2hfcG9ydF90IHNlcnZlclBvcnQgPSBzdGF0aWNfY2Fz
dDxtYWNoX3BvcnRfdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpKTsKLQot
ICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10g
aW5pdF07Ci0KLSAgICBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSgpOwotICAgIEpTQzo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLQot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoc2VydmVyUG9ydCwgUnVuTG9vcDo6
Y3VycmVudCgpKTsKLQotICAgIFtwb29sIGRyYWluXTsKLQotICAgIFJ1bkxvb3A6OmN1cnJlbnQo
KS0+cnVuKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCgpCi17Ci0gICAgLy8gQ3Jl
YXRlIHRoZSBzZXJ2aWNlIHBvcnQuCi0gICAgIG1hY2hfcG9ydF90IGxpc3RlbmluZ1BvcnQ7Ci0g
ICAgIG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRf
UkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpOwotICAgICAKLSAgICAgLy8gSW5zZXJ0IGEgc2VuZCBy
aWdodCBzbyB3ZSBjYW4gc2VuZCB0byBpdC4KLSAgICAgbWFjaF9wb3J0X2luc2VydF9yaWdodCht
YWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19U
WVBFX01BS0VfU0VORCk7Ci0KLSAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihsaXN0ZW5pbmdQb3J0KSwgIldlYktpdDI6IFdlYlRocmVh
ZCIpKSB7Ci0gICAgICAgIG1hY2hfcG9ydF9kZXN0cm95KG1hY2hfdGFza19zZWxmKCksIGxpc3Rl
bmluZ1BvcnQpOwotICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGxpc3RlbmluZ1BvcnQ7Ci19CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9UaHJlYWRMYXVuY2hlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvVGhyZWFkTGF1bmNo
ZXJNYWMubW0JKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMv
VGhyZWFkTGF1bmNoZXJNYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiVGhyZWFkTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIlJ1bkxvb3Au
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViU3lzdGVtSW50ZXJmYWNl
LmgiCisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQqIHdl
YlRocmVhZEJvZHkodm9pZCogY29udGV4dCkKK3sKKyAgICBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0
ID0gc3RhdGljX2Nhc3Q8bWFjaF9wb3J0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
b250ZXh0KSk7CisKKyAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFz
ZVBvb2wgYWxsb2NdIGluaXRdOworCisgICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsK
KyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWlu
VGhyZWFkKCk7CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNlcnZlclBv
cnQsIFJ1bkxvb3A6OmN1cnJlbnQoKSk7CisKKyAgICBbcG9vbCBkcmFpbl07CisKKyAgICBSdW5M
b29wOjpjdXJyZW50KCktPnJ1bigpOworCisgICAgcmV0dXJuIDA7Cit9CisKK0NvcmVJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIgVGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCgpCit7
CisgICAgLy8gQ3JlYXRlIHRoZSBzZXJ2aWNlIHBvcnQuCisgICAgIG1hY2hfcG9ydF90IGxpc3Rl
bmluZ1BvcnQ7CisgICAgIG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNI
X1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpOworICAgICAKKyAgICAgLy8gSW5z
ZXJ0IGEgc2VuZCByaWdodCBzbyB3ZSBjYW4gc2VuZCB0byBpdC4KKyAgICAgbWFjaF9wb3J0X2lu
c2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0
LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCk7CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJU
aHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihsaXN0ZW5pbmdQb3J0KSwgIldlYktp
dDI6IFdlYlRocmVhZCIpKSB7CisgICAgICAgIG1hY2hfcG9ydF9kZXN0cm95KG1hY2hfdGFza19z
ZWxmKCksIGxpc3RlbmluZ1BvcnQpOworICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxpc3RlbmluZ1BvcnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nl
c3NMYXVuY2hlclF0LmNwcAkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwz
NCArMTQxLDYgQEAgUUxvY2FsU29ja2V0KiBQcm9jZXNzTGF1bmNoZXI6OnRha2VQZW5kaQogICAg
IHJldHVybiBQcm9jZXNzTGF1bmNoZXJIZWxwZXI6Omluc3RhbmNlKCktPnRha2VQZW5kaW5nQ29u
bmVjdGlvbigpOwogfQogCi1zdGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lkKiAvKiBjb250
ZXh0ICovKQotewotICAgIC8vIEluaXRpYWxpemF0aW9uCi0gICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7Ci0gICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwotCi0gICAgLy8gRklY
TUU6IFdlIGRvIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KLQotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoImZvbyIsIFJ1bkxvb3A6OmN1cnJlbnQoKSk7Ci0g
ICAgUnVuTG9vcDo6cnVuKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCgpCi17Ci0g
ICAgc3JhbmRvbSh0aW1lKDApKTsKLSAgICBpbnQgY29ubmVjdGlvbklkZW50aWZpZXIgPSByYW5k
b20oKTsKLQotICAgIGlmICghY3JlYXRlVGhyZWFkKHdlYlRocmVhZEJvZHksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNvbm5lY3Rpb25JZGVudGlmaWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIp
KSB7Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwgImZhaWxlZCBzdGFydGluZyB0aHJlYWQiOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIHNlcnZlcklkZW50aWZpZXIgPSBR
U3RyaW5nOjpudW1iZXIoY29ubmVjdGlvbklkZW50aWZpZXIpOwotICAgIHJldHVybiBzZXJ2ZXJJ
ZGVudGlmaWVyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2luY2x1ZGUgIlByb2Nl
c3NMYXVuY2hlclF0Lm1vYyIKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Ro
cmVhZExhdW5jaGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVGhyZWFkTGF1
bmNoZXIuaCIKKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEZWJ1
Zz4KKyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRTG9jYWxTZXJ2ZXI+CisjaW5jbHVkZSA8
UVByb2Nlc3M+CisKKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorCisjaW5jbHVkZSA8c3lz
L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHko
dm9pZCogLyogY29udGV4dCAqLykKK3sKKyAgICAvLyBJbml0aWFsaXphdGlvbgorICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsK
KworICAgIC8vIEZJWE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cu
CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28iLCBSdW5Mb29wOjpj
dXJyZW50KCkpOworICAgIFJ1bkxvb3A6OnJ1bigpOworCisgICAgcmV0dXJuIDA7Cit9CisKK0Nv
cmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJU
aHJlYWQoKQoreworICAgIHNyYW5kb20odGltZSgwKSk7CisgICAgaW50IGNvbm5lY3Rpb25JZGVu
dGlmaWVyID0gcmFuZG9tKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRpZmllciksICJXZWJLaXQy
OiBXZWJUaHJlYWQiKSkgeworICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcg
dGhyZWFkIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUVN0cmluZyBzZXJ2ZXJJ
ZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gc2VydmVySWRlbnRpZmllcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5j
aGVyV2luLmNwcAkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcs
NiBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTk0LDM2ICs5MSw0IEBA
IHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKICAgICA6OlRlcm1pbmF0
ZVByb2Nlc3MobV9wcm9jZXNzSWRlbnRpZmllciwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkKiB3ZWJU
aHJlYWRCb2R5KHZvaWQqIGNvbnRleHQpCi17Ci0gICAgSEFORExFIGNsaWVudElkZW50aWZpZXIg
PSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oY29udGV4dCk7Ci0KLSAgICAvLyBJbml0aWFsaXph
dGlvbgotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xp
ZW50SWRlbnRpZmllciwgUnVuTG9vcDo6Y3VycmVudCgpKTsKLSAgICBSdW5Mb29wOjpydW4oKTsK
LQotICAgIHJldHVybiAwOwotfQotCi1Db3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFBy
b2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKLXsKLSAgICAvLyBGaXJzdCwgY3JlYXRl
IHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCBpZGVudGlmaWVycy4KLSAgICBIQU5ETEUgc2VydmVySWRl
bnRpZmllciwgY2xpZW50SWRlbnRpZmllcjsKLSAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246
OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVu
dElkZW50aWZpZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJl
PwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNyZWF0
ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjbGllbnRJZGVu
dGlmaWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUo
c2VydmVySWRlbnRpZmllcik7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmll
cik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzZXJ2ZXJJZGVudGlm
aWVyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvd2luL1RocmVhZExhdW5jaGVyV2luLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
VGhyZWFkTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5KHZvaWQqIGNvbnRl
eHQpCit7CisgICAgSEFORExFIGNsaWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PEhB
TkRMRT4oY29udGV4dCk7CisKKyAgICAvLyBJbml0aWFsaXphdGlvbgorICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xpZW50SWRlbnRpZmllciwgUnVuTG9v
cDo6Y3VycmVudCgpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQor
CitDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRl
V2ViVGhyZWFkKCkKK3sKKyAgICAvLyBGaXJzdCwgY3JlYXRlIHRoZSBzZXJ2ZXIgYW5kIGNsaWVu
dCBpZGVudGlmaWVycy4KKyAgICBIQU5ETEUgc2VydmVySWRlbnRpZmllciwgY2xpZW50SWRlbnRp
ZmllcjsKKyAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckFuZENsaWVu
dElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVudElkZW50aWZpZXIpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlPworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjbGllbnRJZGVudGlmaWVyKSwgIldlYktpdDI6IFdl
YlRocmVhZCIpKSB7CisgICAgICAgIDo6Q2xvc2VIYW5kbGUoc2VydmVySWRlbnRpZmllcik7Cisg
ICAgICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIHJldHVybiBzZXJ2ZXJJZGVudGlmaWVyOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA2NzQyOSkKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDkgQEAKIAkJQkNFRTk4Q0Qx
MTMzMTc0QzAwNkJDQzI0IC8qIFdLUGFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRTk4Q0IxMTMzMTc0QzAwNkJDQzI0IC8qIFdL
UGFnZU5hbWVzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsg
fTsgfTsKIAkJQkNGMDQ5RTYxMUZFMjBGNjAwRjg2QTU4IC8qIFdLQnVuZGxlRnJhbWVQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YwNDlF
NDExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVGcmFtZVByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0YwNDlFNzExRkUyMEY2MDBG
ODZBNTggLyogV0tCdW5kbGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YwNDlFNTExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QkNGNTAxMjExMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y1MDExRjEyM0VEM0IzMDA1OTU1
QUUgLyogVGhyZWFkTGF1bmNoZXIuaCAqLzsgfTsKKwkJQkNGNTAxMjIxMjNFRDNCMzAwNTk1NUFF
IC8qIFRocmVhZExhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5j
cHAgKi87IH07CisJCUJDRjUwMUI0MTIzRUY2MDIwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjUw
MUIzMTIzRUY2MDIwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlck1hYy5tbSAqLzsgfTsKIAkJQkNG
NjlGODYxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGODQxMTc2Q0Q2RjAwNDcx
QTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuY3BwICovOyB9OwogCQlCQ0Y2OUY4NzExNzZDRDZGMDA0
NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGODUxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlD
bGllbnQuaCAqLzsgfTsKIAkJQkNGNjlGOUExMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRp
b25EYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRjY5Rjk4MTE3NkNFRDYwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgg
Ki87IH07CkBAIC03MTYsNiArNzE5LDkgQEAKIAkJQkNGMDQ5RTUxMUZFMjBGNjAwRjg2QTU4IC8q
IFdLQnVuZGxlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1
bmRsZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDRDOEMxMUZG
OUI3RDAwRjg2QTU4IC8qIEFQSU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBUElPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDRDOEUx
MUZGOUY2RTAwRjg2QTU4IC8qIFdlYlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGNTAx
MUYxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExhdW5jaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMYXVuY2hlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjUwMUIzMTIzRUY2MDIwMDU5NTVBRSAvKiBU
aHJlYWRMYXVuY2hlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFRocmVhZExhdW5jaGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0Y2OUY4NDExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJIaXN0b3J5Q2xpZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNjlGODUxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhp
c3RvcnlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9y
eUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2OUY5ODExNzZDRUQ2
MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjMwLDYgKzEyMzYsOCBAQAogCQkJCUJDMTExQjE5MTEyRjVGQzUwMDMz
N0JBQiAvKiBtYWMgKi8sCiAJCQkJMUFFMTE3RjUxMURCQjMwOTAwOTgxNjE1IC8qIFByb2Nlc3NM
YXVuY2hlci5jcHAgKi8sCiAJCQkJQkMxQTdDNTcxMTM2RTE5QzAwRkI3MTY3IC8qIFByb2Nlc3NM
YXVuY2hlci5oICovLAorCQkJCUJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVu
Y2hlci5jcHAgKi8sCisJCQkJQkNGNTAxMUYxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5j
aGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IExhdW5jaGVyOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTEyMzgsNiArMTI0Niw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUJDMTExQjFCMTEyRjVGRTYwMDMzN0JBQiAvKiBQcm9jZXNzTGF1bmNo
ZXJNYWMubW0gKi8sCisJCQkJQkNGNTAxQjMxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5j
aGVyTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTYzMCw2ICsxNjM5LDcgQEAKIAkJCQlCQzMzREQ2ODEyMzg0NjQ2MDAzNjBG
M0YgLyogV2ViTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzREU4RTEyMzg1QzMzMDAz
NjBGM0YgLyogV0tOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNERjA2MTIzODY3N0Yw
MDM2MEYzRiAvKiBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkNGNTAxMjExMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE4NzYsNiArMTg4Niw4IEBACiAJCQkJQkNBMEVGQTAxMjMzMjY0MjAwN0QzQ0ZCIC8q
IFdlYkVkaXRDb21tYW5kUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyRDYxMEIxMjM3
MTQ0RjAwQTg4QjE1IC8qIFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMzNERThGMTIzODVDMzMwMDM2MEYzRiAvKiBXS051bWJlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlCQ0Y1MDEyMjEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQkNGNTAxQjQxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExh
dW5jaGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24g
Njc0MjkpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTU5OSw2ICsxNTk5LDE0IEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXExhdW5j
aGVyXFByb2Nlc3NMYXVuY2hlci5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQorCQkJCTxGaWxl
DQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xMYXVuY2hlclxUaHJlYWRMYXVuY2hl
ci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cVUlQcm9jZXNzXExhdW5jaGVyXFRocmVhZExhdW5jaGVyLmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCiAJCQkJPEZpbHRlcg0KIAkJCQkJTmFtZT0id2luIg0KIAkJCQkJPg0KQEAg
LTE2MDYsNiArMTYxNCwxMCBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcTGF1
bmNoZXJcd2luXFByb2Nlc3NMYXVuY2hlcldpbi5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xMYXVuY2hl
clx3aW5cVGhyZWFkTGF1bmNoZXJXaW4uY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCiAJ
CQkJPC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQogCQkJPEZpbHRlcg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67511</attachid>
            <date>2010-09-13 19:29:00 -0700</date>
            <delta_ts>2010-09-13 19:29:43 -0700</delta_ts>
            <desc>Updated to not break qt.</desc>
            <filename>threadedMode.diff</filename>
            <type>text/plain</type>
            <size>34869</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQzMSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaHJlYWRl
ZCBtb2RlIHNob3VsZCB3b3JrIGluIFdlYktpdDIgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzI3CisKKyAgICAgICAgLSBNYWtl
IHN0YXJ0aW5nIHRoZSB3ZWIgdGhyZWFkIG1vcmUgbGlrZSBzdGFydGluZyBhIG5ldworICAgICAg
ICAgIHByb2Nlc3MgKGVuY2Fwc3VsYXRlIGl0IGluIGEgdGhyZWFkIGxhdW5jaGVyIGNsYXNzKS4K
KyAgICAgICAgLSBNYWtlIHRoZSBjYWxsIHRvIGRpZEZpbmlzaExhdW5jaGluZyBhc3luY2hyb25v
dXMgc28gdGhhdAorICAgICAgICAgIFdlYlByb2Nlc3MgaXMgZnVsbHkgY29uc3RydWN0ZWQgYmVm
b3JlIGl0IGlzIGNhbGxlZC4KKworICAgICAgICAqIFBsYXRmb3JtL1dvcmtJdGVtLmg6CisgICAg
ICAgIChNZW1iZXJGdW5jdGlvbldvcmtJdGVtMTo6TWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTEpOgor
ICAgICAgICAoTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTE6On5NZW1iZXJGdW5jdGlvbldvcmtJdGVt
MSk6CisgICAgICAgIChNZW1iZXJGdW5jdGlvbldvcmtJdGVtMTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpUaHJlYWRMYXVu
Y2hlcik6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpsYXVuY2hUaHJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nVGhyZWFk
KToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OkNsaWVudDo6fkNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlRocmVhZExhdW5jaGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVu
Y2hlcjo6aXNMYXVuY2hpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJv
Y2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRl
cm1pbmF0ZVByb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvVGhyZWFk
TGF1bmNoZXJNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojp3ZWJUaHJlYWRCb2R5KToK
KyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0Ojp3ZWJUaHJlYWRCb2R5KToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNo
ZXIvd2luL1RocmVhZExhdW5jaGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ondl
YlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZVdl
YlRocmVhZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6aXNMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisK
IDIwMTAtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0
Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9H
ZW5lcmljQ2FsbGJhY2suaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hl
ci5oIFwKKyAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaCBcCiAgICAgVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggXAogICAgIFVJUHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCkBAIC0zMTUsNyArMzE2LDkg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvcXQvUGx1Z2luSW5mb1N0b3JlUXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcCBcCisgICAgVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0
L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVh
ZExhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAg
XAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgXApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrSXRl
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vV29ya0l0ZW0uaAkocmV2aXNpb24g
Njc0MjkpCisrKyBXZWJLaXQyL1BsYXRmb3JtL1dvcmtJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+IAogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFdvcmtJdGVtPiBjcmVhdGUoQyosIHZvaWQgKEM6OiopKCkpOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgVDA+CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8V29ya0l0ZW0+IGNyZWF0ZShDKiwgdm9pZCAoQzo6KikoVDApLCBUMCk7CisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8V29ya0l0ZW0+IGNyZWF0ZShDKiwgdm9pZCAoQzo6KikoVDAsIFQxKSwgVDAsIFQx
KTsKIApAQCAtNzUsNiArNzgsMzYgQEAgY2xhc3MgTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTAgOiBw
cml2YXRlIAogICAgIEZ1bmN0aW9uVHlwZSBtX2Z1bmN0aW9uOwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQywgdHlwZW5hbWUgVDA+CitjbGFzcyBNZW1iZXJGdW5jdGlvbldvcmtJdGVtMSA6IHBy
aXZhdGUgV29ya0l0ZW0geworICAgIC8vIFdlIG9ubHkgYWxsb3cgV29ya0l0ZW0gdG8gY3JlYXRl
IHRoaXMuCisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtOworICAgIAorICAgIHR5cGVkZWYgdm9p
ZCAoQzo6KkZ1bmN0aW9uVHlwZSkoVDApOworICAgIAorICAgIE1lbWJlckZ1bmN0aW9uV29ya0l0
ZW0xKEMqIHB0ciwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBUMCB0MCkKKyAgICAgICAgOiBtX3B0
cihwdHIpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3QwKHQw
KQorICAgIHsKKyAgICAgICAgbV9wdHItPnJlZigpOworICAgIH0KKyAgICAKKyAgICB+TWVtYmVy
RnVuY3Rpb25Xb3JrSXRlbTEoKQorICAgIHsKKyAgICAgICAgbV9wdHItPmRlcmVmKCk7CisgICAg
fQorCisgICAgdm9pZCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIChtX3B0ci0+Km1fZnVuY3Rp
b24pKG1fdDApOworICAgIH0KKyAgICAKKyAgICBDKiBtX3B0cjsKKyAgICBGdW5jdGlvblR5cGUg
bV9mdW5jdGlvbjsKKyAgICBUMCBtX3QwOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlw
ZW5hbWUgVDAsIHR5cGVuYW1lIFQxPgogY2xhc3MgTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTIgOiBw
cml2YXRlIFdvcmtJdGVtIHsKICAgICAvLyBXZSBvbmx5IGFsbG93IFdvcmtJdGVtIHRvIGNyZWF0
ZSB0aGlzLgpAQCAtMTEzLDYgKzE0NiwxMiBAQCBQYXNzT3duUHRyPFdvcmtJdGVtPiBXb3JrSXRl
bTo6Y3JlYXRlKEMqCiAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PFdvcmtJdGVtKj4o
bmV3IE1lbWJlckZ1bmN0aW9uV29ya0l0ZW0wPEM+KHB0ciwgZnVuY3Rpb24pKSk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIFQwPgorUGFzc093blB0cjxXb3JrSXRlbT4gV29y
a0l0ZW06OmNyZWF0ZShDKiBwdHIsIHZvaWQgKEM6OipmdW5jdGlvbikoVDApLCBUMCB0MCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8V29ya0l0ZW0qPihuZXcgTWVtYmVyRnVu
Y3Rpb25Xb3JrSXRlbTE8QywgVDA+KHB0ciwgZnVuY3Rpb24sIHQwKSkpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CiBQYXNzT3duUHRyPFdvcmtJ
dGVtPiBXb3JrSXRlbTo6Y3JlYXRlKEMqIHB0ciwgdm9pZCAoQzo6KmZ1bmN0aW9uKShUMCwgVDEp
LCBUMCB0MCwgVDEgdDEpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgogCiAjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgi
CkBAIC0xMDIsMTggKzEwMSwyMiBAQCBXZWJQcm9jZXNzUHJveHk6On5XZWJQcm9jZXNzUHJveHko
KQogICAgICAgICBtX3Byb2Nlc3NMYXVuY2hlci0+aW52YWxpZGF0ZSgpOwogICAgICAgICBtX3By
b2Nlc3NMYXVuY2hlciA9IDA7CiAgICAgfQorCisgICAgaWYgKG1fdGhyZWFkTGF1bmNoZXIpIHsK
KyAgICAgICAgbV90aHJlYWRMYXVuY2hlci0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX3RocmVh
ZExhdW5jaGVyID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpjb25uZWN0
KCkKIHsKICAgICBpZiAobV9jb250ZXh0LT5wcm9jZXNzTW9kZWwoKSA9PSBQcm9jZXNzTW9kZWxT
aGFyZWRTZWNvbmRhcnlUaHJlYWQpIHsKLSAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciA9IFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2Vi
VGhyZWFkKCk7Ci0gICAgICAgIGRpZEZpbmlzaExhdW5jaGluZygwLCBjb25uZWN0aW9uSWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCFtX3RocmVhZExhdW5jaGVy
KTsKKyAgICAgICAgbV90aHJlYWRMYXVuY2hlciA9IFRocmVhZExhdW5jaGVyOjpjcmVhdGUodGhp
cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX3Byb2Nlc3NMYXVuY2hlcik7Cisg
ICAgICAgIG1fcHJvY2Vzc0xhdW5jaGVyID0gUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGUodGhpcyk7
CiAgICAgfQotCi0gICAgQVNTRVJUKCFtX3Byb2Nlc3NMYXVuY2hlcik7Ci0gICAgbV9wcm9jZXNz
TGF1bmNoZXIgPSBQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZSh0aGlzKTsKIH0KIAogYm9vbCBXZWJQ
cm9jZXNzUHJveHk6OnNlbmRNZXNzYWdlKENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBh
c3NPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCkBAIC0xMjgsNiAr
MTMxLDE2IEBAIGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kTWVzc2FnZShDb3JlSVAKICAgICBy
ZXR1cm4gbV9jb25uZWN0aW9uLT5zZW5kTWVzc2FnZShtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiB9
CiAKK2Jvb2wgV2ViUHJvY2Vzc1Byb3h5Ojppc0xhdW5jaGluZygpIGNvbnN0Cit7CisgICAgaWYg
KG1fcHJvY2Vzc0xhdW5jaGVyKQorICAgICAgICByZXR1cm4gbV9wcm9jZXNzTGF1bmNoZXItPmlz
TGF1bmNoaW5nKCk7CisgICAgaWYgKG1fdGhyZWFkTGF1bmNoZXIpCisgICAgICAgIHJldHVybiBt
X3RocmVhZExhdW5jaGVyLT5pc0xhdW5jaGluZygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9wcm9jZXNz
TGF1bmNoZXIpCkBAIC00MjQsNyArNDM3LDE3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRC
ZWNvbWVSZXNwb25zaXYKICAgICAgICAgcGFnZXNbaV0tPnByb2Nlc3NEaWRCZWNvbWVSZXNwb25z
aXZlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJv
Y2Vzc0xhdW5jaGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYgY29u
bmVjdGlvbklkZW50aWZpZXIpCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNo
aW5nKFByb2Nlc3NMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29u
bmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgZGlkRmluaXNoTGF1bmNoaW5nKGNvbm5lY3Rpb25J
ZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
ZyhUaHJlYWRMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVj
dGlvbklkZW50aWZpZXIpCit7CisgICAgZGlkRmluaXNoTGF1bmNoaW5nKGNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhD
b3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKQogewog
ICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCShyZXZpc2lvbiA2NzQyOSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAogI2luY2x1ZGUg
IlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NNb2RlbC5oIgogI2luY2x1ZGUg
IlJlc3BvbnNpdmVuZXNzVGltZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMYXVuY2hlci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00OSw3ICs1MCw3IEBAIGNsYXNzIFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW07CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsKICAg
ICAKLWNsYXNzIFdlYlByb2Nlc3NQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlByb2Nlc3NQ
cm94eT4sIENvcmVJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgUmVzcG9uc2l2ZW5lc3NUaW1lcjo6
Q2xpZW50LCBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudCB7CitjbGFzcyBXZWJQcm9jZXNzUHJveHkg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQcm9jZXNzUHJveHk+LCBDb3JlSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQsIFJlc3BvbnNpdmVuZXNzVGltZXI6OkNsaWVudCwgUHJvY2Vzc0xhdW5jaGVyOjpD
bGllbnQsIFRocmVhZExhdW5jaGVyOjpDbGllbnQgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VQcm94eT4gPiBXZWJQYWdlUHJveHlNYXA7CiAg
ICAgdHlwZWRlZiBXZWJQYWdlUHJveHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpWYWx1ZXMgcGFnZXNf
Y29uc3RfaXRlcmF0b3I7CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBSZXNwb25zaXZl
bmVzc1RpbWVyKiByZXNwb25zaXZlbmVzc1RpbWVyKCkgeyByZXR1cm4gJm1fcmVzcG9uc2l2ZW5l
c3NUaW1lcjsgfQogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0
aW9uOyB9Ci0gICAgYm9vbCBpc0xhdW5jaGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0xh
dW5jaGVyICYmIG1fcHJvY2Vzc0xhdW5jaGVyLT5pc0xhdW5jaGluZygpOyB9CisgICAgYm9vbCBp
c0xhdW5jaGluZygpIGNvbnN0OwogCiAgICAgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUodWludDY0
X3QpIGNvbnN0OwogICAgIHZvaWQgZnJhbWVDcmVhdGVkKHVpbnQ2NF90LCBXZWJGcmFtZVByb3h5
Kik7CkBAIC0xMjAsMTMgKzEyMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQmVjb21lUmVz
cG9uc2l2ZShSZXNwb25zaXZlbmVzc1RpbWVyKik7CiAKICAgICAvLyBQcm9jZXNzTGF1bmNoZXI6
OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5j
aGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgQ29yZUlQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllcik7CisKKyAgICAvLyBUaHJlYWRMYXVuY2hlcjo6Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhdW5jaGluZyhUaHJlYWRMYXVuY2hlciosIENvcmVJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOworCisgICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hp
bmcoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CiAKICAgICBSZXNwb25zaXZlbmVz
c1RpbWVyIG1fcmVzcG9uc2l2ZW5lc3NUaW1lcjsKICAgICBSZWZQdHI8Q29yZUlQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwogCiAgICAgVmVjdG9yPENvcmVJUEM6OkNvbm5lY3Rpb246Ok91
dGdvaW5nTWVzc2FnZT4gbV9wZW5kaW5nTWVzc2FnZXM7CiAgICAgUmVmUHRyPFByb2Nlc3NMYXVu
Y2hlcj4gbV9wcm9jZXNzTGF1bmNoZXI7CisgICAgUmVmUHRyPFRocmVhZExhdW5jaGVyPiBtX3Ro
cmVhZExhdW5jaGVyOwogCiAgICAgV2ViQ29udGV4dCogbV9jb250ZXh0OwogCkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAkocmV2aXNpb24gNjc0
MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExh
dW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
KSA9IDA7CiAgICAgfTsKICAgICAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9jZXNzTGF1bmNo
ZXI+IGNyZWF0ZShDbGllbnQqIGNsaWVudCkKQEAgLTU3LDggKzU3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgdGVybWluYXRlUHJvY2VzcygpOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCi0gICAg
c3RhdGljIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY3JlYXRlV2ViVGhyZWFkKCk7
Ci0KICNpZiBQTEFURk9STShRVCkKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vzc0xhdW5jaGVySGVs
cGVyOwogICAgIHN0YXRpYyBRTG9jYWxTb2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwpJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJUaHJlYWRMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworVGhyZWFkTGF1bmNoZXI6OlRocmVhZExhdW5jaGVyKENsaWVudCogY2xpZW50
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIGxhdW5jaFRocmVhZCgpOworfQorCit2
b2lkIFRocmVhZExhdW5jaGVyOjpsYXVuY2hUaHJlYWQoKQoreworICAgIG1faXNMYXVuY2hpbmcg
PSB0cnVlOworCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9u
SWRlbnRpZmllciA9IGNyZWF0ZVdlYlRocmVhZCgpOworCisgICAgLy8gV2UndmUgZmluaXNoZWQg
bGF1bmNoaW5nIHRoZSB0aHJlYWQsIG1lc3NhZ2UgYmFjayB0byB0aGUgbWFpbiBydW4gbG9vcC4K
KyAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMs
ICZUaHJlYWRMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nVGhyZWFkLCBjb25uZWN0aW9uSWRl
bnRpZmllcikpOworfQorCit2b2lkIFRocmVhZExhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdU
aHJlYWQoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IG1faXNMYXVuY2hpbmcgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAg
ICAgIC8vIEZJWE1FOiBEaXNwb3NlIG9mIHRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTGF1bmNoaW5nKHRo
aXMsIGlkZW50aWZpZXIpOworfQorCit2b2lkIFRocmVhZExhdW5jaGVyOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX2NsaWVudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkTGF1bmNo
ZXJfaAorI2RlZmluZSBUaHJlYWRMYXVuY2hlcl9oCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBQTEFURk9STShRVCkK
K2NsYXNzIFFMb2NhbFNvY2tldDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgVGhyZWFkTGF1bmNoZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRMYXVuY2hl
cj4geworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhdW5j
aGluZyhUaHJlYWRMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpID0g
MDsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZExhdW5jaGVyPiBj
cmVhdGUoQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRocmVhZExhdW5jaGVyKGNsaWVudCkpOworICAgIH0KKworICAgIGJvb2wgaXNMYXVuY2hpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzTGF1bmNoaW5nOyB9CisKKyAgICB2b2lkIGludmFsaWRhdGUo
KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBUaHJlYWRMYXVuY2hlcihDbGllbnQqKTsKKwor
ICAgIHZvaWQgbGF1bmNoVGhyZWFkKCk7CisgICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmdUaHJl
YWQoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CisKKyAgICBzdGF0aWMgQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjcmVhdGVXZWJUaHJlYWQoKTsKKworICAgIGJvb2wg
bV9pc0xhdW5jaGluZzsKKyAgICBDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBUaHJlYWRMYXVuY2hlcl9oCkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0JKHJl
dmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NM
YXVuY2hlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1LDQxICsxMjUsNSBAQCB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCiAgICAgCiAgICAga2lsbChtX3Byb2Nl
c3NJZGVudGlmaWVyLCBTSUdLSUxMKTsKIH0KLQotc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHko
dm9pZCogY29udGV4dCkKLXsKLSAgICBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0ID0gc3RhdGljX2Nh
c3Q8bWFjaF9wb3J0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSk7Ci0K
LSAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2Nd
IGluaXRdOwotCi0gICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsKLSAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0K
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNlcnZlclBvcnQsIFJ1bkxvb3A6
OmN1cnJlbnQoKSk7Ci0KLSAgICBbcG9vbCBkcmFpbl07Ci0KLSAgICBSdW5Mb29wOjpjdXJyZW50
KCktPnJ1bigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNvcmVJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIgUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQotewotICAgIC8vIENy
ZWF0ZSB0aGUgc2VydmljZSBwb3J0LgotICAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0Owot
ICAgICBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hU
X1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KTsKLSAgICAgCi0gICAgIC8vIEluc2VydCBhIHNlbmQg
cmlnaHQgc28gd2UgY2FuIHNlbmQgdG8gaXQuCi0gICAgIG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQo
bWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0df
VFlQRV9NQUtFX1NFTkQpOwotCi0gICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9keSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obGlzdGVuaW5nUG9ydCksICJXZWJLaXQyOiBXZWJUaHJl
YWQiKSkgewotICAgICAgICBtYWNoX3BvcnRfZGVzdHJveShtYWNoX3Rhc2tfc2VsZigpLCBsaXN0
ZW5pbmdQb3J0KTsKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIH0KLQotICAg
IHJldHVybiBsaXN0ZW5pbmdQb3J0OwotfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvVGhyZWFkTGF1bmNoZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1RocmVhZExhdW5j
aGVyTWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFj
L1RocmVhZExhdW5jaGVyTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJSdW5Mb29w
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFj
ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3
ZWJUaHJlYWRCb2R5KHZvaWQqIGNvbnRleHQpCit7CisgICAgbWFjaF9wb3J0X3Qgc2VydmVyUG9y
dCA9IHN0YXRpY19jYXN0PG1hY2hfcG9ydF90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
Y29udGV4dCkpOworCisgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVh
c2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKCk7
CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgV1RGOjppbml0aWFsaXplTWFp
blRocmVhZCgpOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShzZXJ2ZXJQ
b3J0LCBSdW5Mb29wOjpjdXJyZW50KCkpOworCisgICAgW3Bvb2wgZHJhaW5dOworCisgICAgUnVu
TG9vcDo6Y3VycmVudCgpLT5ydW4oKTsKKworICAgIHJldHVybiAwOworfQorCitDb3JlSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQor
eworICAgIC8vIENyZWF0ZSB0aGUgc2VydmljZSBwb3J0LgorICAgICBtYWNoX3BvcnRfdCBsaXN0
ZW5pbmdQb3J0OworICAgICBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KTsKKyAgICAgCisgICAgIC8vIElu
c2VydCBhIHNlbmQgcmlnaHQgc28gd2UgY2FuIHNlbmQgdG8gaXQuCisgICAgIG1hY2hfcG9ydF9p
bnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9y
dCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOworCisgICAgaWYgKCFjcmVhdGVUaHJlYWQod2Vi
VGhyZWFkQm9keSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obGlzdGVuaW5nUG9ydCksICJXZWJL
aXQyOiBXZWJUaHJlYWQiKSkgeworICAgICAgICBtYWNoX3BvcnRfZGVzdHJveShtYWNoX3Rhc2tf
c2VsZigpLCBsaXN0ZW5pbmdQb3J0KTsKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwor
ICAgIH0KKworICAgIHJldHVybiBsaXN0ZW5pbmdQb3J0OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
MzQgKzE0MSw2IEBAIFFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtlUGVuZGkKICAg
ICByZXR1cm4gUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT50YWtlUGVuZGluZ0Nv
bm5lY3Rpb24oKTsKIH0KIAotc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyogY29u
dGV4dCAqLykKLXsKLSAgICAvLyBJbml0aWFsaXphdGlvbgotICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCi0KLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28iLCBSdW5Mb29wOjpjdXJyZW50KCkpOwot
ICAgIFJ1bkxvb3A6OnJ1bigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNvcmVJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIgUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQotewot
ICAgIHNyYW5kb20odGltZSgwKSk7Ci0gICAgaW50IGNvbm5lY3Rpb25JZGVudGlmaWVyID0gcmFu
ZG9tKCk7Ci0KLSAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRpZmllciksICJXZWJLaXQyOiBXZWJUaHJlYWQi
KSkgewotICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcgdGhyZWFkIjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUVN0cmluZyBzZXJ2ZXJJZGVudGlmaWVyID0g
UVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICByZXR1cm4gc2VydmVy
SWRlbnRpZmllcjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXJRdC5tb2MiCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9U
aHJlYWRMYXVuY2hlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRocmVhZExh
dW5jaGVyLmgiCisKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRRGVi
dWc+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUxvY2FsU2VydmVyPgorI2luY2x1ZGUg
PFFQcm9jZXNzPgorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworI2luY2x1ZGUgPHN5
cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5
KHZvaWQqIC8qIGNvbnRleHQgKi8pCit7CisgICAgLy8gSW5pdGlhbGl6YXRpb24KKyAgICBKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7
CisKKyAgICAvLyBGSVhNRTogV2UgZG8gbm90IHN1cHBvcnQgdGhyZWFkZWQgbW9kZSBmb3Igbm93
LgorCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgiZm9vIiwgUnVuTG9vcDo6
Y3VycmVudCgpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQorCitD
b3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJU
aHJlYWQoKQoreworICAgIHNyYW5kb20odGltZSgwKSk7CisgICAgaW50IGNvbm5lY3Rpb25JZGVu
dGlmaWVyID0gcmFuZG9tKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRpZmllciksICJXZWJLaXQy
OiBXZWJUaHJlYWQiKSkgeworICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcg
dGhyZWFkIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUVN0cmluZyBzZXJ2ZXJJ
ZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gc2VydmVySWRlbnRpZmllcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5j
aGVyV2luLmNwcAkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcs
NiBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTk0LDM2ICs5MSw0IEBA
IHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKICAgICA6OlRlcm1pbmF0
ZVByb2Nlc3MobV9wcm9jZXNzSWRlbnRpZmllciwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkKiB3ZWJU
aHJlYWRCb2R5KHZvaWQqIGNvbnRleHQpCi17Ci0gICAgSEFORExFIGNsaWVudElkZW50aWZpZXIg
PSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oY29udGV4dCk7Ci0KLSAgICAvLyBJbml0aWFsaXph
dGlvbgotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xp
ZW50SWRlbnRpZmllciwgUnVuTG9vcDo6Y3VycmVudCgpKTsKLSAgICBSdW5Mb29wOjpydW4oKTsK
LQotICAgIHJldHVybiAwOwotfQotCi1Db3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFBy
b2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKLXsKLSAgICAvLyBGaXJzdCwgY3JlYXRl
IHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCBpZGVudGlmaWVycy4KLSAgICBIQU5ETEUgc2VydmVySWRl
bnRpZmllciwgY2xpZW50SWRlbnRpZmllcjsKLSAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246
OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVu
dElkZW50aWZpZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJl
PwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNyZWF0
ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjbGllbnRJZGVu
dGlmaWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUo
c2VydmVySWRlbnRpZmllcik7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmll
cik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzZXJ2ZXJJZGVudGlm
aWVyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvd2luL1RocmVhZExhdW5jaGVyV2luLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
VGhyZWFkTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5KHZvaWQqIGNvbnRl
eHQpCit7CisgICAgSEFORExFIGNsaWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PEhB
TkRMRT4oY29udGV4dCk7CisKKyAgICAvLyBJbml0aWFsaXphdGlvbgorICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xpZW50SWRlbnRpZmllciwgUnVuTG9v
cDo6Y3VycmVudCgpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQor
CitDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRl
V2ViVGhyZWFkKCkKK3sKKyAgICAvLyBGaXJzdCwgY3JlYXRlIHRoZSBzZXJ2ZXIgYW5kIGNsaWVu
dCBpZGVudGlmaWVycy4KKyAgICBIQU5ETEUgc2VydmVySWRlbnRpZmllciwgY2xpZW50SWRlbnRp
ZmllcjsKKyAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckFuZENsaWVu
dElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVudElkZW50aWZpZXIpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlPworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjbGllbnRJZGVudGlmaWVyKSwgIldlYktpdDI6IFdl
YlRocmVhZCIpKSB7CisgICAgICAgIDo6Q2xvc2VIYW5kbGUoc2VydmVySWRlbnRpZmllcik7Cisg
ICAgICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIHJldHVybiBzZXJ2ZXJJZGVudGlmaWVyOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA2NzQyOSkKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNiArMzMzLDkgQEAKIAkJQkNFRTk4Q0Qx
MTMzMTc0QzAwNkJDQzI0IC8qIFdLUGFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRTk4Q0IxMTMzMTc0QzAwNkJDQzI0IC8qIFdL
UGFnZU5hbWVzcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsg
fTsgfTsKIAkJQkNGMDQ5RTYxMUZFMjBGNjAwRjg2QTU4IC8qIFdLQnVuZGxlRnJhbWVQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YwNDlF
NDExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVGcmFtZVByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0YwNDlFNzExRkUyMEY2MDBG
ODZBNTggLyogV0tCdW5kbGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YwNDlFNTExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QkNGNTAxMjExMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y1MDExRjEyM0VEM0IzMDA1OTU1
QUUgLyogVGhyZWFkTGF1bmNoZXIuaCAqLzsgfTsKKwkJQkNGNTAxMjIxMjNFRDNCMzAwNTk1NUFF
IC8qIFRocmVhZExhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5j
cHAgKi87IH07CisJCUJDRjUwMUI0MTIzRUY2MDIwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjUw
MUIzMTIzRUY2MDIwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlck1hYy5tbSAqLzsgfTsKIAkJQkNG
NjlGODYxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGODQxMTc2Q0Q2RjAwNDcx
QTUyIC8qIFdlYkhpc3RvcnlDbGllbnQuY3BwICovOyB9OwogCQlCQ0Y2OUY4NzExNzZDRDZGMDA0
NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGNjlGODUxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhpc3RvcnlD
bGllbnQuaCAqLzsgfTsKIAkJQkNGNjlGOUExMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRp
b25EYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRjY5Rjk4MTE3NkNFRDYwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgg
Ki87IH07CkBAIC03MTYsNiArNzE5LDkgQEAKIAkJQkNGMDQ5RTUxMUZFMjBGNjAwRjg2QTU4IC8q
IFdLQnVuZGxlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1
bmRsZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDRDOEMxMUZG
OUI3RDAwRjg2QTU4IC8qIEFQSU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBUElPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMDRDOEUx
MUZGOUY2RTAwRjg2QTU4IC8qIFdlYlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGNTAx
MUYxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZExhdW5jaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRMYXVuY2hlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjUwMUIzMTIzRUY2MDIwMDU5NTVBRSAvKiBU
aHJlYWRMYXVuY2hlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFRocmVhZExhdW5jaGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0Y2OUY4NDExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJIaXN0b3J5Q2xpZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNjlGODUxMTc2Q0Q2RjAwNDcxQTUyIC8qIFdlYkhp
c3RvcnlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSGlzdG9y
eUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2OUY5ODExNzZDRUQ2
MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlvbkRhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjMwLDYgKzEyMzYsOCBAQAogCQkJCUJDMTExQjE5MTEyRjVGQzUwMDMz
N0JBQiAvKiBtYWMgKi8sCiAJCQkJMUFFMTE3RjUxMURCQjMwOTAwOTgxNjE1IC8qIFByb2Nlc3NM
YXVuY2hlci5jcHAgKi8sCiAJCQkJQkMxQTdDNTcxMTM2RTE5QzAwRkI3MTY3IC8qIFByb2Nlc3NM
YXVuY2hlci5oICovLAorCQkJCUJDRjUwMTIwMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVu
Y2hlci5jcHAgKi8sCisJCQkJQkNGNTAxMUYxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5j
aGVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IExhdW5jaGVyOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTEyMzgsNiArMTI0Niw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUJDMTExQjFCMTEyRjVGRTYwMDMzN0JBQiAvKiBQcm9jZXNzTGF1bmNo
ZXJNYWMubW0gKi8sCisJCQkJQkNGNTAxQjMxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5j
aGVyTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTYzMCw2ICsxNjM5LDcgQEAKIAkJCQlCQzMzREQ2ODEyMzg0NjQ2MDAzNjBG
M0YgLyogV2ViTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzREU4RTEyMzg1QzMzMDAz
NjBGM0YgLyogV0tOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNERjA2MTIzODY3N0Yw
MDM2MEYzRiAvKiBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkNGNTAxMjExMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE4NzYsNiArMTg4Niw4IEBACiAJCQkJQkNBMEVGQTAxMjMzMjY0MjAwN0QzQ0ZCIC8q
IFdlYkVkaXRDb21tYW5kUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyRDYxMEIxMjM3
MTQ0RjAwQTg4QjE1IC8qIFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMzNERThGMTIzODVDMzMwMDM2MEYzRiAvKiBXS051bWJlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlCQ0Y1MDEyMjEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQkNGNTAxQjQxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExh
dW5jaGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24g
Njc0MjkpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTU5OSw2ICsxNTk5LDE0IEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXExhdW5j
aGVyXFByb2Nlc3NMYXVuY2hlci5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQorCQkJCTxGaWxl
DQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xMYXVuY2hlclxUaHJlYWRMYXVuY2hl
ci5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cVUlQcm9jZXNzXExhdW5jaGVyXFRocmVhZExhdW5jaGVyLmgiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCiAJCQkJPEZpbHRlcg0KIAkJCQkJTmFtZT0id2luIg0KIAkJCQkJPg0KQEAg
LTE2MDYsNiArMTYxNCwxMCBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcTGF1
bmNoZXJcd2luXFByb2Nlc3NMYXVuY2hlcldpbi5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxl
Pg0KKwkJCQkJPEZpbGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xMYXVuY2hl
clx3aW5cVGhyZWFkTGF1bmNoZXJXaW4uY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCiAJ
CQkJPC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQogCQkJPEZpbHRlcg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67512</attachid>
            <date>2010-09-13 19:29:43 -0700</date>
            <delta_ts>2010-09-13 19:47:35 -0700</delta_ts>
            <desc>Update to not break windows.</desc>
            <filename>threadedMode.diff</filename>
            <type>text/plain</type>
            <size>34868</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQzMSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaHJlYWRl
ZCBtb2RlIHNob3VsZCB3b3JrIGluIFdlYktpdDIgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzI3CisKKyAgICAgICAgLSBNYWtl
IHN0YXJ0aW5nIHRoZSB3ZWIgdGhyZWFkIG1vcmUgbGlrZSBzdGFydGluZyBhIG5ldworICAgICAg
ICAgIHByb2Nlc3MgKGVuY2Fwc3VsYXRlIGl0IGluIGEgdGhyZWFkIGxhdW5jaGVyIGNsYXNzKS4K
KyAgICAgICAgLSBNYWtlIHRoZSBjYWxsIHRvIGRpZEZpbmlzaExhdW5jaGluZyBhc3luY2hyb25v
dXMgc28gdGhhdAorICAgICAgICAgIFdlYlByb2Nlc3MgaXMgZnVsbHkgY29uc3RydWN0ZWQgYmVm
b3JlIGl0IGlzIGNhbGxlZC4KKworICAgICAgICAqIFBsYXRmb3JtL1dvcmtJdGVtLmg6CisgICAg
ICAgIChNZW1iZXJGdW5jdGlvbldvcmtJdGVtMTo6TWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTEpOgor
ICAgICAgICAoTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTE6On5NZW1iZXJGdW5jdGlvbldvcmtJdGVt
MSk6CisgICAgICAgIChNZW1iZXJGdW5jdGlvbldvcmtJdGVtMTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXb3JrSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpUaHJlYWRMYXVu
Y2hlcik6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZExhdW5jaGVyOjpsYXVuY2hUaHJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nVGhyZWFk
KToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OkNsaWVudDo6fkNsaWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlRocmVhZExhdW5jaGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVu
Y2hlcjo6aXNMYXVuY2hpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJv
Y2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRl
cm1pbmF0ZVByb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvVGhyZWFk
TGF1bmNoZXJNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojp3ZWJUaHJlYWRCb2R5KToK
KyAgICAgICAgKFdlYktpdDo6VGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0Ojp3ZWJUaHJlYWRCb2R5KToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNo
ZXIvd2luL1RocmVhZExhdW5jaGVyV2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ondl
YlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZVdl
YlRocmVhZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6aXNMYXVuY2hpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisK
IDIwMTAtMDktMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0
Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9H
ZW5lcmljQ2FsbGJhY2suaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hl
ci5oIFwKKyAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaCBcCiAgICAgVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggXAogICAgIFVJUHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCkBAIC0zMTUsNyArMzE2LDkg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvcXQvUGx1Z2luSW5mb1N0b3JlUXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcCBcCisgICAgVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0
L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVh
ZExhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAg
XAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgXApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrSXRl
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vV29ya0l0ZW0uaAkocmV2aXNpb24g
Njc0MjkpCisrKyBXZWJLaXQyL1BsYXRmb3JtL1dvcmtJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEM+IAogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFdvcmtJdGVtPiBjcmVhdGUoQyosIHZvaWQgKEM6OiopKCkpOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgVDA+CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8V29ya0l0ZW0+IGNyZWF0ZShDKiwgdm9pZCAoQzo6KikoVDApLCBUMCk7CisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8V29ya0l0ZW0+IGNyZWF0ZShDKiwgdm9pZCAoQzo6KikoVDAsIFQxKSwgVDAsIFQx
KTsKIApAQCAtNzUsNiArNzgsMzYgQEAgY2xhc3MgTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTAgOiBw
cml2YXRlIAogICAgIEZ1bmN0aW9uVHlwZSBtX2Z1bmN0aW9uOwogfTsKIAordGVtcGxhdGU8dHlw
ZW5hbWUgQywgdHlwZW5hbWUgVDA+CitjbGFzcyBNZW1iZXJGdW5jdGlvbldvcmtJdGVtMSA6IHBy
aXZhdGUgV29ya0l0ZW0geworICAgIC8vIFdlIG9ubHkgYWxsb3cgV29ya0l0ZW0gdG8gY3JlYXRl
IHRoaXMuCisgICAgZnJpZW5kIGNsYXNzIFdvcmtJdGVtOworICAgIAorICAgIHR5cGVkZWYgdm9p
ZCAoQzo6KkZ1bmN0aW9uVHlwZSkoVDApOworICAgIAorICAgIE1lbWJlckZ1bmN0aW9uV29ya0l0
ZW0xKEMqIHB0ciwgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBUMCB0MCkKKyAgICAgICAgOiBtX3B0
cihwdHIpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3QwKHQw
KQorICAgIHsKKyAgICAgICAgbV9wdHItPnJlZigpOworICAgIH0KKyAgICAKKyAgICB+TWVtYmVy
RnVuY3Rpb25Xb3JrSXRlbTEoKQorICAgIHsKKyAgICAgICAgbV9wdHItPmRlcmVmKCk7CisgICAg
fQorCisgICAgdm9pZCBleGVjdXRlKCkKKyAgICB7CisgICAgICAgIChtX3B0ci0+Km1fZnVuY3Rp
b24pKG1fdDApOworICAgIH0KKyAgICAKKyAgICBDKiBtX3B0cjsKKyAgICBGdW5jdGlvblR5cGUg
bV9mdW5jdGlvbjsKKyAgICBUMCBtX3QwOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlw
ZW5hbWUgVDAsIHR5cGVuYW1lIFQxPgogY2xhc3MgTWVtYmVyRnVuY3Rpb25Xb3JrSXRlbTIgOiBw
cml2YXRlIFdvcmtJdGVtIHsKICAgICAvLyBXZSBvbmx5IGFsbG93IFdvcmtJdGVtIHRvIGNyZWF0
ZSB0aGlzLgpAQCAtMTEzLDYgKzE0NiwxMiBAQCBQYXNzT3duUHRyPFdvcmtJdGVtPiBXb3JrSXRl
bTo6Y3JlYXRlKEMqCiAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PFdvcmtJdGVtKj4o
bmV3IE1lbWJlckZ1bmN0aW9uV29ya0l0ZW0wPEM+KHB0ciwgZnVuY3Rpb24pKSk7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIEMsIHR5cGVuYW1lIFQwPgorUGFzc093blB0cjxXb3JrSXRlbT4gV29y
a0l0ZW06OmNyZWF0ZShDKiBwdHIsIHZvaWQgKEM6OipmdW5jdGlvbikoVDApLCBUMCB0MCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8V29ya0l0ZW0qPihuZXcgTWVtYmVyRnVu
Y3Rpb25Xb3JrSXRlbTE8QywgVDA+KHB0ciwgZnVuY3Rpb24sIHQwKSkpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CiBQYXNzT3duUHRyPFdvcmtJ
dGVtPiBXb3JrSXRlbTo6Y3JlYXRlKEMqIHB0ciwgdm9pZCAoQzo6KmZ1bmN0aW9uKShUMCwgVDEp
LCBUMCB0MCwgVDEgdDEpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgogCiAjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgi
CkBAIC0xMDIsMTggKzEwMSwyMiBAQCBXZWJQcm9jZXNzUHJveHk6On5XZWJQcm9jZXNzUHJveHko
KQogICAgICAgICBtX3Byb2Nlc3NMYXVuY2hlci0+aW52YWxpZGF0ZSgpOwogICAgICAgICBtX3By
b2Nlc3NMYXVuY2hlciA9IDA7CiAgICAgfQorCisgICAgaWYgKG1fdGhyZWFkTGF1bmNoZXIpIHsK
KyAgICAgICAgbV90aHJlYWRMYXVuY2hlci0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX3RocmVh
ZExhdW5jaGVyID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpjb25uZWN0
KCkKIHsKICAgICBpZiAobV9jb250ZXh0LT5wcm9jZXNzTW9kZWwoKSA9PSBQcm9jZXNzTW9kZWxT
aGFyZWRTZWNvbmRhcnlUaHJlYWQpIHsKLSAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciA9IFByb2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2Vi
VGhyZWFkKCk7Ci0gICAgICAgIGRpZEZpbmlzaExhdW5jaGluZygwLCBjb25uZWN0aW9uSWRlbnRp
Zmllcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKCFtX3RocmVhZExhdW5jaGVy
KTsKKyAgICAgICAgbV90aHJlYWRMYXVuY2hlciA9IFRocmVhZExhdW5jaGVyOjpjcmVhdGUodGhp
cyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKCFtX3Byb2Nlc3NMYXVuY2hlcik7Cisg
ICAgICAgIG1fcHJvY2Vzc0xhdW5jaGVyID0gUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGUodGhpcyk7
CiAgICAgfQotCi0gICAgQVNTRVJUKCFtX3Byb2Nlc3NMYXVuY2hlcik7Ci0gICAgbV9wcm9jZXNz
TGF1bmNoZXIgPSBQcm9jZXNzTGF1bmNoZXI6OmNyZWF0ZSh0aGlzKTsKIH0KIAogYm9vbCBXZWJQ
cm9jZXNzUHJveHk6OnNlbmRNZXNzYWdlKENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBh
c3NPd25QdHI8Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCkBAIC0xMjgsNiAr
MTMxLDE2IEBAIGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kTWVzc2FnZShDb3JlSVAKICAgICBy
ZXR1cm4gbV9jb25uZWN0aW9uLT5zZW5kTWVzc2FnZShtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiB9
CiAKK2Jvb2wgV2ViUHJvY2Vzc1Byb3h5Ojppc0xhdW5jaGluZygpIGNvbnN0Cit7CisgICAgaWYg
KG1fcHJvY2Vzc0xhdW5jaGVyKQorICAgICAgICByZXR1cm4gbV9wcm9jZXNzTGF1bmNoZXItPmlz
TGF1bmNoaW5nKCk7CisgICAgaWYgKG1fdGhyZWFkTGF1bmNoZXIpCisgICAgICAgIHJldHVybiBt
X3RocmVhZExhdW5jaGVyLT5pc0xhdW5jaGluZygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9wcm9jZXNz
TGF1bmNoZXIpCkBAIC00MjQsNyArNDM3LDE3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRC
ZWNvbWVSZXNwb25zaXYKICAgICAgICAgcGFnZXNbaV0tPnByb2Nlc3NEaWRCZWNvbWVSZXNwb25z
aXZlKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJv
Y2Vzc0xhdW5jaGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYgY29u
bmVjdGlvbklkZW50aWZpZXIpCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmNo
aW5nKFByb2Nlc3NMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29u
bmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgZGlkRmluaXNoTGF1bmNoaW5nKGNvbm5lY3Rpb25J
ZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
ZyhUaHJlYWRMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVj
dGlvbklkZW50aWZpZXIpCit7CisgICAgZGlkRmluaXNoTGF1bmNoaW5nKGNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhD
b3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKQogewog
ICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCShyZXZpc2lvbiA2NzQyOSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAogI2luY2x1ZGUg
IlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NNb2RlbC5oIgogI2luY2x1ZGUg
IlJlc3BvbnNpdmVuZXNzVGltZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMYXVuY2hlci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00OSw3ICs1MCw3IEBAIGNsYXNzIFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW07CiBjbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsKICAg
ICAKLWNsYXNzIFdlYlByb2Nlc3NQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlByb2Nlc3NQ
cm94eT4sIENvcmVJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgUmVzcG9uc2l2ZW5lc3NUaW1lcjo6
Q2xpZW50LCBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudCB7CitjbGFzcyBXZWJQcm9jZXNzUHJveHkg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQcm9jZXNzUHJveHk+LCBDb3JlSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQsIFJlc3BvbnNpdmVuZXNzVGltZXI6OkNsaWVudCwgUHJvY2Vzc0xhdW5jaGVyOjpD
bGllbnQsIFRocmVhZExhdW5jaGVyOjpDbGllbnQgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlBhZ2VQcm94eT4gPiBXZWJQYWdlUHJveHlNYXA7CiAg
ICAgdHlwZWRlZiBXZWJQYWdlUHJveHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpWYWx1ZXMgcGFnZXNf
Y29uc3RfaXRlcmF0b3I7CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBSZXNwb25zaXZl
bmVzc1RpbWVyKiByZXNwb25zaXZlbmVzc1RpbWVyKCkgeyByZXR1cm4gJm1fcmVzcG9uc2l2ZW5l
c3NUaW1lcjsgfQogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0
aW9uOyB9Ci0gICAgYm9vbCBpc0xhdW5jaGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc0xh
dW5jaGVyICYmIG1fcHJvY2Vzc0xhdW5jaGVyLT5pc0xhdW5jaGluZygpOyB9CisgICAgYm9vbCBp
c0xhdW5jaGluZygpIGNvbnN0OwogCiAgICAgV2ViRnJhbWVQcm94eSogd2ViRnJhbWUodWludDY0
X3QpIGNvbnN0OwogICAgIHZvaWQgZnJhbWVDcmVhdGVkKHVpbnQ2NF90LCBXZWJGcmFtZVByb3h5
Kik7CkBAIC0xMjAsMTMgKzEyMSwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQmVjb21lUmVz
cG9uc2l2ZShSZXNwb25zaXZlbmVzc1RpbWVyKik7CiAKICAgICAvLyBQcm9jZXNzTGF1bmNoZXI6
OkNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5j
aGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgQ29yZUlQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllcik7CisKKyAgICAvLyBUaHJlYWRMYXVuY2hlcjo6Q2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhdW5jaGluZyhUaHJlYWRMYXVuY2hlciosIENvcmVJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOworCisgICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hp
bmcoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CiAKICAgICBSZXNwb25zaXZlbmVz
c1RpbWVyIG1fcmVzcG9uc2l2ZW5lc3NUaW1lcjsKICAgICBSZWZQdHI8Q29yZUlQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwogCiAgICAgVmVjdG9yPENvcmVJUEM6OkNvbm5lY3Rpb246Ok91
dGdvaW5nTWVzc2FnZT4gbV9wZW5kaW5nTWVzc2FnZXM7CiAgICAgUmVmUHRyPFByb2Nlc3NMYXVu
Y2hlcj4gbV9wcm9jZXNzTGF1bmNoZXI7CisgICAgUmVmUHRyPFRocmVhZExhdW5jaGVyPiBtX3Ro
cmVhZExhdW5jaGVyOwogCiAgICAgV2ViQ29udGV4dCogbV9jb250ZXh0OwogCkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAkocmV2aXNpb24gNjc0
MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgY29uc3QgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExh
dW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
KSA9IDA7CiAgICAgfTsKICAgICAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9jZXNzTGF1bmNo
ZXI+IGNyZWF0ZShDbGllbnQqIGNsaWVudCkKQEAgLTU3LDggKzU3LDYgQEAgcHVibGljOgogICAg
IHZvaWQgdGVybWluYXRlUHJvY2VzcygpOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCi0gICAg
c3RhdGljIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY3JlYXRlV2ViVGhyZWFkKCk7
Ci0KICNpZiBQTEFURk9STShRVCkKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vzc0xhdW5jaGVySGVs
cGVyOwogICAgIHN0YXRpYyBRTG9jYWxTb2NrZXQqIHRha2VQZW5kaW5nQ29ubmVjdGlvbigpOwpJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJUaHJlYWRMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworVGhyZWFkTGF1bmNoZXI6OlRocmVhZExhdW5jaGVyKENsaWVudCogY2xpZW50
KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIGxhdW5jaFRocmVhZCgpOworfQorCit2
b2lkIFRocmVhZExhdW5jaGVyOjpsYXVuY2hUaHJlYWQoKQoreworICAgIG1faXNMYXVuY2hpbmcg
PSB0cnVlOworCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9u
SWRlbnRpZmllciA9IGNyZWF0ZVdlYlRocmVhZCgpOworCisgICAgLy8gV2UndmUgZmluaXNoZWQg
bGF1bmNoaW5nIHRoZSB0aHJlYWQsIG1lc3NhZ2UgYmFjayB0byB0aGUgbWFpbiBydW4gbG9vcC4K
KyAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMs
ICZUaHJlYWRMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nVGhyZWFkLCBjb25uZWN0aW9uSWRl
bnRpZmllcikpOworfQorCit2b2lkIFRocmVhZExhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdU
aHJlYWQoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IG1faXNMYXVuY2hpbmcgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAg
ICAgIC8vIEZJWE1FOiBEaXNwb3NlIG9mIHRoZSBjb25uZWN0aW9uIGlkZW50aWZpZXIuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTGF1bmNoaW5nKHRo
aXMsIGlkZW50aWZpZXIpOworfQorCit2b2lkIFRocmVhZExhdW5jaGVyOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX2NsaWVudCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkTGF1bmNo
ZXJfaAorI2RlZmluZSBUaHJlYWRMYXVuY2hlcl9oCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBQTEFURk9STShRVCkK
K2NsYXNzIFFMb2NhbFNvY2tldDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgVGhyZWFkTGF1bmNoZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRMYXVuY2hl
cj4geworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExhdW5j
aGluZyhUaHJlYWRMYXVuY2hlciosIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpID0g
MDsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZExhdW5jaGVyPiBj
cmVhdGUoQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRocmVhZExhdW5jaGVyKGNsaWVudCkpOworICAgIH0KKworICAgIGJvb2wgaXNMYXVuY2hpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzTGF1bmNoaW5nOyB9CisKKyAgICB2b2lkIGludmFsaWRhdGUo
KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBUaHJlYWRMYXVuY2hlcihDbGllbnQqKTsKKwor
ICAgIHZvaWQgbGF1bmNoVGhyZWFkKCk7CisgICAgdm9pZCBkaWRGaW5pc2hMYXVuY2hpbmdUaHJl
YWQoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CisKKyAgICBzdGF0aWMgQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjcmVhdGVXZWJUaHJlYWQoKTsKKworICAgIGJvb2wg
bV9pc0xhdW5jaGluZzsKKyAgICBDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBUaHJlYWRMYXVuY2hlcl9oCkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0JKHJl
dmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NM
YXVuY2hlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI1LDQxICsxMjUsNSBAQCB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCiAgICAgCiAgICAga2lsbChtX3Byb2Nl
c3NJZGVudGlmaWVyLCBTSUdLSUxMKTsKIH0KLQotc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHko
dm9pZCogY29udGV4dCkKLXsKLSAgICBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0ID0gc3RhdGljX2Nh
c3Q8bWFjaF9wb3J0X3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSk7Ci0K
LSAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2Nd
IGluaXRdOwotCi0gICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UoKTsKLSAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0K
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNlcnZlclBvcnQsIFJ1bkxvb3A6
OmN1cnJlbnQoKSk7Ci0KLSAgICBbcG9vbCBkcmFpbl07Ci0KLSAgICBSdW5Mb29wOjpjdXJyZW50
KCktPnJ1bigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNvcmVJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIgUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQotewotICAgIC8vIENy
ZWF0ZSB0aGUgc2VydmljZSBwb3J0LgotICAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0Owot
ICAgICBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hU
X1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KTsKLSAgICAgCi0gICAgIC8vIEluc2VydCBhIHNlbmQg
cmlnaHQgc28gd2UgY2FuIHNlbmQgdG8gaXQuCi0gICAgIG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQo
bWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0df
VFlQRV9NQUtFX1NFTkQpOwotCi0gICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9keSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obGlzdGVuaW5nUG9ydCksICJXZWJLaXQyOiBXZWJUaHJl
YWQiKSkgewotICAgICAgICBtYWNoX3BvcnRfZGVzdHJveShtYWNoX3Rhc2tfc2VsZigpLCBsaXN0
ZW5pbmdQb3J0KTsKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIH0KLQotICAg
IHJldHVybiBsaXN0ZW5pbmdQb3J0OwotfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvVGhyZWFkTGF1bmNoZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1RocmVhZExhdW5j
aGVyTWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFj
L1RocmVhZExhdW5jaGVyTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIlRocmVhZExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJSdW5Mb29w
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFj
ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3
ZWJUaHJlYWRCb2R5KHZvaWQqIGNvbnRleHQpCit7CisgICAgbWFjaF9wb3J0X3Qgc2VydmVyUG9y
dCA9IHN0YXRpY19jYXN0PG1hY2hfcG9ydF90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
Y29udGV4dCkpOworCisgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVh
c2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKCk7
CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgV1RGOjppbml0aWFsaXplTWFp
blRocmVhZCgpOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShzZXJ2ZXJQ
b3J0LCBSdW5Mb29wOjpjdXJyZW50KCkpOworCisgICAgW3Bvb2wgZHJhaW5dOworCisgICAgUnVu
TG9vcDo6Y3VycmVudCgpLT5ydW4oKTsKKworICAgIHJldHVybiAwOworfQorCitDb3JlSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQor
eworICAgIC8vIENyZWF0ZSB0aGUgc2VydmljZSBwb3J0LgorICAgICBtYWNoX3BvcnRfdCBsaXN0
ZW5pbmdQb3J0OworICAgICBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KTsKKyAgICAgCisgICAgIC8vIElu
c2VydCBhIHNlbmQgcmlnaHQgc28gd2UgY2FuIHNlbmQgdG8gaXQuCisgICAgIG1hY2hfcG9ydF9p
bnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9y
dCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOworCisgICAgaWYgKCFjcmVhdGVUaHJlYWQod2Vi
VGhyZWFkQm9keSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obGlzdGVuaW5nUG9ydCksICJXZWJL
aXQyOiBXZWJUaHJlYWQiKSkgeworICAgICAgICBtYWNoX3BvcnRfZGVzdHJveShtYWNoX3Rhc2tf
c2VsZigpLCBsaXN0ZW5pbmdQb3J0KTsKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwor
ICAgIH0KKworICAgIHJldHVybiBsaXN0ZW5pbmdQb3J0OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
MzQgKzE0MSw2IEBAIFFMb2NhbFNvY2tldCogUHJvY2Vzc0xhdW5jaGVyOjp0YWtlUGVuZGkKICAg
ICByZXR1cm4gUHJvY2Vzc0xhdW5jaGVySGVscGVyOjppbnN0YW5jZSgpLT50YWtlUGVuZGluZ0Nv
bm5lY3Rpb24oKTsKIH0KIAotc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyogY29u
dGV4dCAqLykKLXsKLSAgICAvLyBJbml0aWFsaXphdGlvbgotICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCi0KLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKCJmb28iLCBSdW5Mb29wOjpjdXJyZW50KCkpOwot
ICAgIFJ1bkxvb3A6OnJ1bigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNvcmVJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIgUHJvY2Vzc0xhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQotewot
ICAgIHNyYW5kb20odGltZSgwKSk7Ci0gICAgaW50IGNvbm5lY3Rpb25JZGVudGlmaWVyID0gcmFu
ZG9tKCk7Ci0KLSAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRpZmllciksICJXZWJLaXQyOiBXZWJUaHJlYWQi
KSkgewotICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcgdGhyZWFkIjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUVN0cmluZyBzZXJ2ZXJJZGVudGlmaWVyID0g
UVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICByZXR1cm4gc2VydmVy
SWRlbnRpZmllcjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXJRdC5tb2MiCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9U
aHJlYWRMYXVuY2hlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlRocmVhZExh
dW5jaGVyLmgiCisKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRRGVi
dWc+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUxvY2FsU2VydmVyPgorI2luY2x1ZGUg
PFFQcm9jZXNzPgorCisjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKworI2luY2x1ZGUgPHN5
cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5
KHZvaWQqIC8qIGNvbnRleHQgKi8pCit7CisgICAgLy8gSW5pdGlhbGl6YXRpb24KKyAgICBKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7
CisKKyAgICAvLyBGSVhNRTogV2UgZG8gbm90IHN1cHBvcnQgdGhyZWFkZWQgbW9kZSBmb3Igbm93
LgorCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgiZm9vIiwgUnVuTG9vcDo6
Y3VycmVudCgpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQorCitD
b3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVXZWJU
aHJlYWQoKQoreworICAgIHNyYW5kb20odGltZSgwKSk7CisgICAgaW50IGNvbm5lY3Rpb25JZGVu
dGlmaWVyID0gcmFuZG9tKCk7CisKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRpZmllciksICJXZWJLaXQy
OiBXZWJUaHJlYWQiKSkgeworICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcg
dGhyZWFkIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUVN0cmluZyBzZXJ2ZXJJ
ZGVudGlmaWVyID0gUVN0cmluZzo6bnVtYmVyKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gc2VydmVySWRlbnRpZmllcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5j
aGVyV2luLmNwcAkocmV2aXNpb24gNjc0MjkpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcs
NiBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTk0LDM2ICs5MSw0IEBA
IHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKICAgICA6OlRlcm1pbmF0
ZVByb2Nlc3MobV9wcm9jZXNzSWRlbnRpZmllciwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkKiB3ZWJU
aHJlYWRCb2R5KHZvaWQqIGNvbnRleHQpCi17Ci0gICAgSEFORExFIGNsaWVudElkZW50aWZpZXIg
PSByZWludGVycHJldF9jYXN0PEhBTkRMRT4oY29udGV4dCk7Ci0KLSAgICAvLyBJbml0aWFsaXph
dGlvbgotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKLQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xp
ZW50SWRlbnRpZmllciwgUnVuTG9vcDo6Y3VycmVudCgpKTsKLSAgICBSdW5Mb29wOjpydW4oKTsK
LQotICAgIHJldHVybiAwOwotfQotCi1Db3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFBy
b2Nlc3NMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKLXsKLSAgICAvLyBGaXJzdCwgY3JlYXRl
IHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCBpZGVudGlmaWVycy4KLSAgICBIQU5ETEUgc2VydmVySWRl
bnRpZmllciwgY2xpZW50SWRlbnRpZmllcjsKLSAgICBpZiAoIUNvcmVJUEM6OkNvbm5lY3Rpb246
OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKHNlcnZlcklkZW50aWZpZXIsIGNsaWVu
dElkZW50aWZpZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJl
PwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNyZWF0
ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjbGllbnRJZGVu
dGlmaWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUo
c2VydmVySWRlbnRpZmllcik7Ci0gICAgICAgIDo6Q2xvc2VIYW5kbGUoY2xpZW50SWRlbnRpZmll
cik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzZXJ2ZXJJZGVudGlm
aWVyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvd2luL1RocmVhZExhdW5jaGVyV2luLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9UaHJlYWRMYXVuY2hlcldpbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
VGhyZWFkTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5KHZvaWQqIGNvbnRl
eHQpCit7CisgICAgSEFORExFIGNsaWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PEhB
TkRMRT4oY29udGV4dCk7CisKKyAgICAvLyBJbml0aWFsaXphdGlvbgorICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoY2xpZW50SWRlbnRpZmllciwgUnVuTG9v
cDo6Y3VycmVudCgpKTsKKyAgICBSdW5Mb29wOjpydW4oKTsKKworICAgIHJldHVybiAwOworfQor
CitDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5jaGVyOjpjcmVhdGVX
ZWJUaHJlYWQoKQoreworICAgIC8vIEZpcnN0LCBjcmVhdGUgdGhlIHNlcnZlciBhbmQgY2xpZW50
IGlkZW50aWZpZXJzLgorICAgIEhBTkRMRSBzZXJ2ZXJJZGVudGlmaWVyLCBjbGllbnRJZGVudGlm
aWVyOworICAgIGlmICghQ29yZUlQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQW5kQ2xpZW50
SWRlbnRpZmllcnMoc2VydmVySWRlbnRpZmllciwgY2xpZW50SWRlbnRpZmllcikpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmU/CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghY3JlYXRlVGhyZWFkKHdlYlRocmVhZEJvZHks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNsaWVudElkZW50aWZpZXIpLCAiV2ViS2l0MjogV2Vi
VGhyZWFkIikpIHsKKyAgICAgICAgOjpDbG9zZUhhbmRsZShzZXJ2ZXJJZGVudGlmaWVyKTsKKyAg
ICAgICAgOjpDbG9zZUhhbmRsZShjbGllbnRJZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgcmV0dXJuIHNlcnZlcklkZW50aWZpZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDY3NDI5KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw2ICszMzMsOSBAQAogCQlCQ0VFOThDRDEx
MzMxNzRDMDA2QkNDMjQgLyogV0tQYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VFOThDQjExMzMxNzRDMDA2QkNDMjQgLyogV0tQ
YWdlTmFtZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9
OyB9OwogCQlCQ0YwNDlFNjExRkUyMEY2MDBGODZBNTggLyogV0tCdW5kbGVGcmFtZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjA0OUU0
MTFGRTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRsZUZyYW1lUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRjA0OUU3MTFGRTIwRjYwMEY4
NkE1OCAvKiBXS0J1bmRsZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRjA0OUU1MTFGRTIwRjYwMEY4NkE1OCAvKiBXS0J1bmRsZVByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlC
Q0Y1MDEyMTEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjUwMTFGMTIzRUQzQjMwMDU5NTVB
RSAvKiBUaHJlYWRMYXVuY2hlci5oICovOyB9OworCQlCQ0Y1MDEyMjEyM0VEM0IzMDA1OTU1QUUg
LyogVGhyZWFkTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNGNTAxMjAxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmNw
cCAqLzsgfTsKKwkJQkNGNTAxQjQxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNTAx
QjMxMjNFRjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyTWFjLm1tICovOyB9OwogCQlCQ0Y2
OUY4NjExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUY4NDExNzZDRDZGMDA0NzFB
NTIgLyogV2ViSGlzdG9yeUNsaWVudC5jcHAgKi87IH07CiAJCUJDRjY5Rjg3MTE3NkNENkYwMDQ3
MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUY4NTExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlzdG9yeUNs
aWVudC5oICovOyB9OwogCQlCQ0Y2OUY5QTExNzZDRUQ2MDA0NzFBNTIgLyogV2ViTmF2aWdhdGlv
bkRhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGNjlGOTgxMTc2Q0VENjAwNDcxQTUyIC8qIFdlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCAq
LzsgfTsKQEAgLTcxNiw2ICs3MTksOSBAQAogCQlCQ0YwNDlFNTExRkUyMEY2MDBGODZBNTggLyog
V0tCdW5kbGVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVu
ZGxlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0YwNEM4QzExRkY5
QjdEMDBGODZBNTggLyogQVBJT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0YwNEM4RTEx
RkY5RjZFMDBGODZBNTggLyogV2ViU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Y1MDEx
RjEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGhyZWFkTGF1bmNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkNGNTAxMjAxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZExhdW5jaGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGNTAxQjMxMjNFRjYwMjAwNTk1NUFFIC8qIFRo
cmVhZExhdW5jaGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVGhyZWFkTGF1bmNoZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
RjY5Rjg0MTE3NkNENkYwMDQ3MUE1MiAvKiBXZWJIaXN0b3J5Q2xpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkhpc3RvcnlDbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2OUY4NTExNzZDRDZGMDA0NzFBNTIgLyogV2ViSGlz
dG9yeUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJIaXN0b3J5
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjY5Rjk4MTE3NkNFRDYw
MDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYk5hdmlnYXRpb25EYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyMzAsNiArMTIzNiw4IEBACiAJCQkJQkMxMTFCMTkxMTJGNUZDNTAwMzM3
QkFCIC8qIG1hYyAqLywKIAkJCQkxQUUxMTdGNTExREJCMzA5MDA5ODE2MTUgLyogUHJvY2Vzc0xh
dW5jaGVyLmNwcCAqLywKIAkJCQlCQzFBN0M1NzExMzZFMTlDMDBGQjcxNjcgLyogUHJvY2Vzc0xh
dW5jaGVyLmggKi8sCisJCQkJQkNGNTAxMjAxMjNFRDNCMzAwNTk1NUFFIC8qIFRocmVhZExhdW5j
aGVyLmNwcCAqLywKKwkJCQlCQ0Y1MDExRjEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNo
ZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gTGF1bmNoZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTIzOCw2ICsxMjQ2LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJQkMxMTFCMUIxMTJGNUZFNjAwMzM3QkFCIC8qIFByb2Nlc3NMYXVuY2hl
ck1hYy5tbSAqLywKKwkJCQlCQ0Y1MDFCMzEyM0VGNjAyMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNo
ZXJNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0xNjMwLDYgKzE2MzksNyBAQAogCQkJCUJDMzNERDY4MTIzODQ2NDYwMDM2MEYz
RiAvKiBXZWJOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzNERThFMTIzODVDMzMwMDM2
MEYzRiAvKiBXS051bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzM0RGMDYxMjM4Njc3RjAw
MzYwRjNGIC8qIFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
Q0Y1MDEyMTEyM0VEM0IzMDA1OTU1QUUgLyogVGhyZWFkTGF1bmNoZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMTg3Niw2ICsxODg2LDggQEAKIAkJCQlCQ0EwRUZBMDEyMzMyNjQyMDA3RDNDRkIgLyog
V2ViRWRpdENvbW1hbmRQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzJENjEwQjEyMzcx
NDRGMDBBODhCMTUgLyogV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMzM0RFOEYxMjM4NUMzMzAwMzYwRjNGIC8qIFdLTnVtYmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUJDRjUwMTIyMTIzRUQzQjMwMDU5NTVBRSAvKiBUaHJlYWRMYXVuY2hlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCQ0Y1MDFCNDEyM0VGNjAyMDA1OTU1QUUgLyogVGhyZWFkTGF1
bmNoZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2
NzQyOSkKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTk5LDYgKzE1OTksMTQgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcTGF1bmNo
ZXJcUHJvY2Vzc0xhdW5jaGVyLmgiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXExhdW5jaGVyXFRocmVhZExhdW5jaGVy
LmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxVSVByb2Nlc3NcTGF1bmNoZXJcVGhyZWFkTGF1bmNoZXIuaCINCisJCQkJCT4NCisJ
CQkJPC9GaWxlPg0KIAkJCQk8RmlsdGVyDQogCQkJCQlOYW1lPSJ3aW4iDQogCQkJCQk+DQpAQCAt
MTYwNiw2ICsxNjE0LDEwIEBACiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xMYXVu
Y2hlclx3aW5cUHJvY2Vzc0xhdW5jaGVyV2luLmNwcCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+
DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXExhdW5jaGVy
XHdpblxUaHJlYWRMYXVuY2hlcldpbi5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KIAkJ
CQk8L0ZpbHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8RmlsdGVyDQo=
</data>
<flag name="review"
          id="56831"
          type_id="1"
          status="+"
          setter="jhoneycutt"
    />
          </attachment>
      

    </bug>

</bugzilla>