<?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>139156</bug_id>
          
          <creation_ts>2014-12-01 14:58:05 -0800</creation_ts>
          <short_desc>Add action menu tests</short_desc>
          <delta_ts>2014-12-08 11:41:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>conrad_shultz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1051623</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-12-01 14:58:05 -0800</bug_when>
    <thetext>Add action menu tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051624</commentid>
    <comment_count>1</comment_count>
      <attachid>242350</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-12-01 14:59:24 -0800</bug_when>
    <thetext>Created attachment 242350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051625</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-01 15:00:30 -0800</bug_when>
    <thetext>Attachment 242350 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:69:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:214:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:221:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:295:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:319:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:481:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:489:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:497:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:505:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:513:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:527:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:535:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:547:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:600:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:608:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:616:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:628:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:640:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:652:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:663:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:670:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:680:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:692:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:701:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:707:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:713:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:723:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:732:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:737:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 32 in 7 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>1052440</commentid>
    <comment_count>3</comment_count>
      <attachid>242561</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-12-04 02:28:49 -0800</bug_when>
    <thetext>Created attachment 242561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052442</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-04 02:31:59 -0800</bug_when>
    <thetext>Attachment 242561 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:53:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:476:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:484:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:492:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:500:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:508:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:514:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:522:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:530:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:542:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:554:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:562:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:570:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:582:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:594:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:602:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:610:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:622:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:634:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:646:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:657:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:664:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:674:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:686:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:695:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:703:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:709:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:719:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:728:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:733:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 31 in 7 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>1052791</commentid>
    <comment_count>5</comment_count>
      <attachid>242561</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-12-05 11:43:47 -0800</bug_when>
    <thetext>Comment on attachment 242561
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=242561&amp;action=review

mostly-rubber-stamped = me

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:196
&gt; +        NSArray *pasteboardItems = [[NSPasteboard generalPasteboard] readObjectsForClasses:@[ [NSImage class] ] options:nil];

Why whitespace around [NSImage class]?

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenus.mm:368
&gt; +static NSPoint windowPointForTarget(TargetType target)
&gt; +{
&gt; +    NSPoint contentPoint;
&gt; +    switch (target) {

This method seems so dodgy/fragile :)

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:44
&gt; +#define SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL(framework) \

Maybe all these should be in a separate header file?

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:126
&gt; +
&gt; +

Extra space! :)

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:141
&gt; +    RetainPtr&lt;CFArrayRef&gt; results = adoptCF(DDScannerCopyResultsWithOptions(scanner.get(), DDScannerCopyResultsOptionsNoOverlap));
&gt; +
&gt; +
&gt; +    CFIndex resultCount = CFArrayGetCount(results.get());

Ditto.

&gt; Tools/TestWebKitAPI/Tests/WebKit2ObjC/ActionMenusBundle.mm:175
&gt; +        // How does ownership work here?

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053461</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-12-08 11:40:09 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/176959</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053464</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-12-08 11:41:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/19179009&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242350</attachid>
            <date>2014-12-01 14:59:24 -0800</date>
            <delta_ts>2014-12-04 02:28:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139156-20141201145952.patch</filename>
            <type>text/plain</type>
            <size>59671</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NTk1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTE3YTYzZTlhYTkzMWI0ZTFjMTUzNzNjNTdiN2VjZjU2
MGZiYmRlMC4uYmIwY2VhZWMzNDkxMjgwYWYxYzYzMWQwODBmNWE2ZjUyOWJjOWJkNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2
IEBACisyMDE0LTEyLTAxICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhY3Rpb24gbWVudSB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5o
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToK
KyAgICAgICAgQWRkIGEgbWVjaGFuaXNtIGFsbG93aW5nIHRlc3RzIHRvIHByb3ZpZGUgdGhlaXIg
b3duIFBsYXRmb3JtV0tWaWV3LCBzbyB0aGF0CisgICAgICAgIGl0J3MgZWFzeSBmb3IgYSB0ZXN0
IHRvIHN1YmNsYXNzIFdLVmlldy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9hY3Rpb24tbWVudS10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICBB
ZGQgYSBmaWxlIHdpdGggbG90cyBvZiBtZW51IHRhcmdldHMuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVzLm1tOiBBZGRlZC4KKyAgICAgICAg
KC1bQWN0aW9uTWVudXNUZXN0V0tWaWV3IF9hY3Rpb25NZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0
OndpdGhUeXBlOmRlZmF1bHRBY3Rpb25NZW51SXRlbXM6dXNlckRhdGE6XSk6CisgICAgICAgICgt
W0FjdGlvbk1lbnVzVGVzdFdLVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50OnByZU1lbnVOZWVk
c1VwZGF0ZUhhbmRsZXI6cHJlV2lsbE9wZW5NZW51SGFuZGxlcjpwcmVEaWRDbG9zZU1lbnVIYW5k
bGVyOl0pOgorICAgICAgICAoLVtBY3Rpb25NZW51c1Rlc3RXS1ZpZXcgcnVuTWVudVNlcXVlbmNl
QXRQb2ludDpwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl0pOgorICAgICAgICBSdW4gdGhyb3VnaCB0
aGUgbm9ybWFsIHNlcXVlbmNlIG9mIGNhbGxiYWNrcywgcmVjb3JkaW5nIHdoYXQgaXRlbXMgYW5k
IHR5cGUgd2VyZSByZXR1cm5lZCwgYW5kIGdpdmUgY2xpZW50cyBhIGNoYW5jZSB0byBkbyB3b3Jr
IGF0IHZhcmlvdXMgcG9pbnRzIGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICgtW0FjdGlvbk1l
bnVzVGVzdFdLVmlldyBfc2V0T3ZlcnJpZGVBY3Rpb25NZW51SXRlbXM6XSk6CisKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZUNhbGxiYWNrKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRpZEZpbmlzaERvd25sb2FkQ2FsbGJhY2spOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6ZGlkQ3JlYXRlRG93bmxvYWREZXN0aW5hdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgV2F0Y2ggZG93bmxvYWRzIGFuZCBlbnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBjb250ZW50
IHdlIGV4cGVjdC4KKworICAgICAgICAoVGVzdFdlYktpdEFQSTo6d2F0Y2hQYXN0ZWJvYXJkRm9y
U3RyaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OndhdGNoUGFzdGVib2FyZEZvckltYWdl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRl
eHQ6OkphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRleHQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SmF2YVNjcmlwdEJvb2xDYWxsYmFja0NvbnRleHQ6OkphdmFTY3JpcHRCb29sQ2FsbGJh
Y2tDb250ZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmphdmFTY3JpcHRTdHJpbmdDYWxs
YmFjayk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpqYXZhU2NyaXB0Qm9vbENhbGxiYWNrKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nU3RyaW5nKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nQm9vbCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjp3YXRjaEVkaXRhYmxlQXJlYUZvclN0cmluZyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp3YWl0Rm9yVmlkZW9SZWFkeSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpyZXRyaWV2ZVNlbGVjdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpyZXRy
aWV2ZVNlbGVjdGlvbkluRWxlbWVudCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwZXJmb3Jt
TWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZW5z
dXJlTWVudUl0ZW1BdEluZGV4T2ZUeXBlSXNEaXNhYmxlZCk6CisgICAgICAgIEFkZCBtYW55IGhl
bHBlcnMgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgdG8gbWFrZSBhc3luY2hyb25vdXMgdGhpbmdz
IHN5bmNocm9ub3VzLgorCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp3aW5kb3dQb2ludEZvclRh
cmdldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjppbnNldDgpOgorICAgICAgICBIYXJkLWNv
ZGUgcG9pbnRzIGluIGFjdGlvbi1tZW51LXRhcmdldHMuaHRtbCBmb3IgaGl0IHRlc3RpbmcuCisK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBBZGQgYSBzdWl0ZSBvZiB0
ZXN0cyBmb3IgV2ViS2l0MiBhY3Rpb24gbWVudXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVzQnVuZGxlLm1tOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmNyZWF0ZUFjdGlvbkNvbnRleHRGb3JQaG9uZU51bWJlcik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpBY3Rpb25NZW51VGVzdDo6QWN0aW9uTWVudVRlc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6QWN0aW9uTWVudVRlc3Q6OnByZXBhcmVGb3JBY3Rpb25NZW51
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkFjdGlvbk1lbnVUZXN0OjphY3Rpb25Db250ZXh0
Rm9yUmVzdWx0QXRQb2ludCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpBY3Rpb25NZW51VGVz
dDo6ZHJhd1JlY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6QWN0aW9uTWVudVRlc3Q6OmRp
ZENyZWF0ZVBhZ2UpOgorICAgICAgICBBZGQgYSBidW5kbGUgd2l0aCBhIFBhZ2VPdmVybGF5IGFu
ZCBhIGFjdGlvbkNvbnRleHRGb3JSZXN1dGxBdFBvaW50IG92ZXJyaWRlLAorICAgICAgICBzbyB0
aGF0IHdlIGNhbiB0ZXN0IHRoYXQgaW5mcmFzdHJ1Y3R1cmUuCisKIDIwMTQtMTItMDEgIENvbW1p
dCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxNzY1NjYuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaApp
bmRleCAwZTJlMDA2OGNkYTU2YjU2ZDQ2YTA2NDVlZDY2MDAyOTgxZDk5NjZhLi43Yzg1YWQxNjg2
NThjMGY4NjI3NDY0ZjVkY2I1ODViYzllZTIzYjQyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XZWJWaWV3LmgKQEAgLTU0LDYgKzU0LDcgQEAgY2xhc3MgUGxhdGZvcm1XZWJWaWV3IHsKIHB1
YmxpYzoKICAgICBleHBsaWNpdCBQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiA9IDApOwogICAgIGV4cGxpY2l0IFBsYXRmb3JtV2ViVmlldyhXS1BhZ2VSZWYgcmVs
YXRlZFBhZ2UpOworICAgIGV4cGxpY2l0IFBsYXRmb3JtV2ViVmlldyhQbGF0Zm9ybVdLVmlldyk7
CiAgICAgflBsYXRmb3JtV2ViVmlldygpOwogCiAgICAgV0tQYWdlUmVmIHBhZ2UoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjNkZDE2NTI3NzRiMjViYTA0ZTZkZTJmMjhhMzJi
NTg5YTI0Njg2NS4uZTFlOGE2MGYyMjU4ZjJiMzljYjllMmU4MGEzZWQwNDA0OWM4YzBiZiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYyLDYgKzYyLDkgQEAKIAkJMjlBQjhBQTExNjRDNzM1
ODAwRDQ5QkVDIC8qIEN1c3RvbVByb3RvY29sc1Rlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFCOEE5RjE2NEM3MzU4MDBENDlCRUMgLyogQ3Vz
dG9tUHJvdG9jb2xzVGVzdC5tbSAqLzsgfTsKIAkJMjlBQjhBQTQxNjRDN0E5MzAwRDQ5QkVDIC8q
IFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFCOEFBMjE2NEM3QTkzMDBENDlCRUMgLyogVGVz
dEJyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5tbSAqLzsgfTsKIAkJMkQ2NDBCNTUxNzg3NURG
RjAwQkZBRjk5IC8qIFNjcm9sbFBpbm5pbmdCZWhhdmlvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2NDBCNTQxNzg3NURGRjAwQkZBRjk5IC8q
IFNjcm9sbFBpbm5pbmdCZWhhdmlvcnMuY3BwICovOyB9OworCQkyRDk1MEZCQzFBMjIxN0QwMDAw
MTI0MzQgLyogQWN0aW9uTWVudXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDk1MEZCQTFBMjIxN0QwMDAwMTI0MzQgLyogQWN0aW9uTWVudXMubW0g
Ki87IH07CisJCTJEOTUwRkJFMUEyMjE3RDMwMDAxMjQzNCAvKiBBY3Rpb25NZW51c0J1bmRsZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTUwRkJC
MUEyMjE3RDAwMDAxMjQzNCAvKiBBY3Rpb25NZW51c0J1bmRsZS5tbSAqLzsgfTsKKwkJMkQ5NTBG
QzAxQTIzMEMzQTAwMDEyNDM0IC8qIGFjdGlvbi1tZW51LXRhcmdldHMuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDk1MEZCRjFBMjMw
QzFFMDAwMTI0MzQgLyogYWN0aW9uLW1lbnUtdGFyZ2V0cy5odG1sICovOyB9OwogCQkyREQ3RDNB
QTE3ODIwNUQwMDAyNkUxRTMgLyogUmVzaXplUmV2ZXJzZVBhZ2luYXRlZFdlYlZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkREN0QzQTkxNzgy
MDVEMDAwMjZFMUUzIC8qIFJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3LmNwcCAqLzsgfTsK
IAkJMkREN0QzQUYxNzgyMjdCMzAwMjZFMUUzIC8qIGxvdHMtb2YtdGV4dC12ZXJ0aWNhbC1sci5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJERDdEM0FFMTc4MjI3QUMwMDI2RTFFMyAvKiBsb3RzLW9mLXRleHQtdmVydGljYWwtbHIuaHRt
bCAqLzsgfTsKIAkJMkU3NzY1Q0QxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc3NjVDQzE2QzREODBB
MDBCQTJCQjEgLyogbWFpbklPUy5tbSAqLzsgfTsKQEAgLTMzOSw2ICszNDIsNyBAQAogCQkJCUJD
QkQzNzM3MTI1QUJCRUIwMEQyQzI5RiAvKiBpY29uLnBuZyBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQkzNzhFNjQ3OTE2MzI3MDc0MDBCNkM2NzYgLyogbGluay13aXRoLXRpdGxlLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJOTM2MTAwMjkxNERDOTVBNzAwNjEzNzlEIC8qIGxvdHMt
b2YtaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTJEOTUwRkMwMUEyMzBD
M0EwMDAxMjQzNCAvKiBhY3Rpb24tbWVudS10YXJnZXRzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJOTMwQUQ0MDIxNTA2OThEMDAwNjc5NzBGIC8qIGxv
dHMtb2YtdGV4dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTJERDdEM0FGMTc4MjI3
QjMwMDI2RTFFMyAvKiBsb3RzLW9mLXRleHQtdmVydGljYWwtbHIuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLywKQEAgLTQyMSw2ICs0MjUsOSBAQAogCQkyOUFCOEFBMjE2NEM3QTkzMDBENDlCRUMg
LyogVGVzdEJyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QUI4QUEzMTY0QzdBOTMwMEQ0OUJFQyAv
KiBUZXN0QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ2NDBCNTQxNzg3NURGRjAwQkZBRjk5IC8qIFNjcm9sbFBp
bm5pbmdCZWhhdmlvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsUGlubmluZ0JlaGF2aW9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJEOTUwRkJBMUEyMjE3RDAwMDAxMjQzNCAvKiBBY3Rpb25NZW51cy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjdGlvbk1lbnVzLm1tOyBwYXRoID0gV2ViS2l0
Mk9iakMvQWN0aW9uTWVudXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEOTUw
RkJCMUEyMjE3RDAwMDAxMjQzNCAvKiBBY3Rpb25NZW51c0J1bmRsZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjdGlvbk1lbnVzQnVuZGxlLm1tOyBwYXRoID0g
V2ViS2l0Mk9iakMvQWN0aW9uTWVudXNCdW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTJEOTUwRkJGMUEyMzBDMUUwMDAxMjQzNCAvKiBhY3Rpb24tbWVudS10YXJnZXRzLmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYWN0aW9uLW1lbnUtdGFyZ2V0cy5odG1s
Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkREN0QzQTkxNzgyMDVEMDAwMjZFMUUz
IC8qIFJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkREN0QzQUUxNzgyMjdBQzAwMjZFMUUzIC8qIGxv
dHMtb2YtdGV4dC12ZXJ0aWNhbC1sci5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2YtdGV4dC12ZXJ0
aWNhbC1sci5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU3NzY1Q0MxNkM0
RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBtYWluSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA1
LDYgKzgxMiw4IEBACiAJCUJDM0M0QzZGMTQ1NzVCMUQwMDI1RkI2MiAvKiBXZWJLaXQyIE9iamVj
dGl2ZS1DICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQky
RDk1MEZCQTFBMjIxN0QwMDAwMTI0MzQgLyogQWN0aW9uTWVudXMubW0gKi8sCisJCQkJMkQ5NTBG
QkIxQTIyMTdEMDAwMDEyNDM0IC8qIEFjdGlvbk1lbnVzQnVuZGxlLm1tICovLAogCQkJCTI5NzIz
NEIyMTczQUQwNDgwMDk4MzYwMSAvKiBDdXN0b21Qcm90b2NvbHNJbnZhbGlkU2NoZW1lLm1tICov
LAogCQkJCTI5NzIzNEI1MTczQUZBQzcwMDk4MzYwMSAvKiBDdXN0b21Qcm90b2NvbHNJbnZhbGlk
U2NoZW1lX0J1bmRsZS5jcHAgKi8sCiAJCQkJMjkwRjQyNzYxNzJBMjMyQzAwOTM5RkYwIC8qIEN1
c3RvbVByb3RvY29sc1N5bmNYSFJUZXN0Lm1tICovLApAQCAtOTgyLDYgKzk5MSw3IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQk0QTQxMEY0RDE5QUY3QkVGMDAyRUJBQjUgLyogZ2V0VXNlck1lZGlh
Lmh0bWwgKi8sCiAJCQkJQzA0NUY5NDYxMzg1QzJGODAwQzBGM0NEIC8qIDE4LWNoYXJhY3RlcnMu
aHRtbCAqLywKKwkJCQkyRDk1MEZCRjFBMjMwQzFFMDAwMTI0MzQgLyogYWN0aW9uLW1lbnUtdGFy
Z2V0cy5odG1sICovLAogCQkJCUY2QjdCRTk2MTc0NjlCN0UwMDhBMzQ0NSAvKiBhc3NvY2lhdGUt
Zm9ybS1jb250cm9scy5odG1sICovLAogCQkJCTc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAvKiBh
dXRvLXN1Ym1pdHRpbmctZm9ybS5odG1sICovLAogCQkJCTFBNTBBQTFGMUEyQTRFQTUwMEY0QzM0
NSAvKiBjbG9zZS1mcm9tLXdpdGhpbi1jcmVhdGUtcGFnZS5odG1sICovLApAQCAtMTMzMSw2ICsx
MzQxLDcgQEAKIAkJCQkxNDQ2NDAxMzE2N0E4MzA1MDAwQkQyMTggLyogTGF5b3V0VW5pdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRDY0MEI1NTE3ODc1REZGMDBCRkFGOTkgLyogU2Nyb2xsUGlu
bmluZ0JlaGF2aW9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjMwMEIxODE2NzU1Q0Q5MDA2
Njg4NkQgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ5NTBGQkMxQTIy
MTdEMDAwMDEyNDM0IC8qIEFjdGlvbk1lbnVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFBNEZF
NUYxOEREM0RCNzAwQjVFQThBIC8qIERvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzk1
NTAxQkYxOUFEMkZBRjAwNDlCRTNFIC8qIFByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTJDQjQ3NDExNDQ4RkI5MzAwODczOTk1IC8qIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0
aE5vbkRpcmVjdG9yeVVSTC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE0NzIsNiArMTQ4Myw3IEBA
CiAJCQkJRjZCN0JFOTUxNzQ2OTIxMjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250cm9s
c19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzBCRDY2OUYxMzFEM0NGRjAwRTE4RjJB
IC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxRkNGN0ExMTUzNEIyQTAwMDEwNDQ5MSAvKiBTaG91bGRHb1RvQmFja0Zv
cndhcmRMaXN0SXRlbV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ5NTBGQkUxQTIy
MTdEMzAwMDEyNDM0IC8qIEFjdGlvbk1lbnVzQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMyMkQzMTkxNERDNjhCOTAwRkZCMUREIC8qIFVzZXJNZXNzYWdlX0J1bmRsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MjBCQ0Y0QzE0MUVCMDlFMDA5MzdFQTggLyogV2ViQXJjaGl2ZV9CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZFMTgyREQxNTQ3NTY5MTAwRjFGQUREIC8qIFdp
bGxTZW5kU3VibWl0RXZlbnRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2FjdGlvbi1tZW51LXRhcmdldHMuaHRt
bCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9hY3Rpb24tbWVudS10YXJnZXRz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGMyM2NjNDY5NTBjY2ZjNmRjMzU5YzA2MTcwYjZjYmZiMGNhNDIz
OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9h
Y3Rpb24tbWVudS10YXJnZXRzLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxzdHlsZT4KK2RpdiB7
CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAxOTVweDsgaGVpZ2h0OiA0NXB4
OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Cit9
Cis8L3N0eWxlPgorCis8c2NyaXB0PgorZnVuY3Rpb24gZWRpdGFibGVBcmVhU3RyaW5nKG5hbWUp
IHsKKyAgICBpZiAobmFtZS5pbmRleE9mKCJ0ZXh0YXJlYSIpID09PSAwKQorICAgICAgICByZXR1
cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSkudmFsdWU7CisgICAgcmV0dXJuIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpLmlubmVyVGV4dDsKK30KKworZnVuY3Rpb24gc3RyaW5n
aWZ5U2VsZWN0aW9uKCkgeworICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Cisg
ICAgaWYgKHNlbC5yYW5nZUNvdW50ID09IDAgfHwgc2VsLmdldFJhbmdlQXQoMCkuY29sbGFwc2Vk
KQorICAgICAgICByZXR1cm4gIjxubyBzZWxlY3Rpb24+IjsKKyAgICByZXR1cm4gc2VsLnRvU3Ry
aW5nKCk7Cit9CisKK2Z1bmN0aW9uIHN0cmluZ2lmeVNlbGVjdGlvbkluRWxlbWVudChuYW1lKSB7
CisgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CisgICAgY29uc29s
ZS5sb2coZWwpOworICAgIGlmIChlbC5zZWxlY3Rpb25TdGFydCA9PSB1bmRlZmluZWQpCisgICAg
ICAgIHJldHVybiAiPG5vIHNlbGVjdGlvbj4iOworICAgIHJldHVybiBlbC52YWx1ZS5zdWJzdHJp
bmcoZWwuc2VsZWN0aW9uU3RhcnQsIGVsLnNlbGVjdGlvbkVuZCk7Cit9CisKK3ZhciBmYWlsV2Fz
Q2FsbGVkID0gZmFsc2U7CisKK2Z1bmN0aW9uIGZhaWwoKSB7CisgICAgZmFpbFdhc0NhbGxlZCA9
IHRydWU7Cit9CisKK2Z1bmN0aW9uIHdhc0ZhaWxDYWxsZWQoKSB7CisgICAgcmV0dXJuIGZhaWxX
YXNDYWxsZWQ7Cit9CisKKy8vIE1TRSB2aWRlbzoKK3ZhciBzb3VyY2U7Cit2YXIgcmVxdWVzdDsK
K3ZhciB2aWRlb0lzUmVhZHkgPSBmYWxzZTsKKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgp
IHsKKyAgICBwbGF5VmlkZW8oKTsKK30KKworZnVuY3Rpb24gcGxheVZpZGVvKCkKK3sKKyAgICBy
ZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUg
PSAnYXJyYXlidWZmZXInOworICAgIHJlcXVlc3Qub3BlbignR0VUJywgJ3Rlc3QtbXNlLm1wNCcs
IHRydWUpOworICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGxvYWQpOworICAg
IHJlcXVlc3Quc2VuZCgpOworfQorCitmdW5jdGlvbiBsb2FkKGV2ZW50KQoreworICAgIHNvdXJj
ZSA9IG5ldyBNZWRpYVNvdXJjZSgpOworICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdzb3Vy
Y2VvcGVuJywgc291cmNlT3Blbik7CisgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ21zZS12aWRlbycpOworICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwo
c291cmNlKTsKK30KKworZnVuY3Rpb24gc291cmNlT3BlbihldmVudCkKK3sKKyAgICB2YXIgc291
cmNlQnVmZmVyID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZlcigndmlkZW8vbXA0O2NvZGVjcz0iYXZj
MS40RDQwMDEsbXA0YS40MC4yIicpOworICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIocmVx
dWVzdC5yZXNwb25zZSk7CisgICAgc291cmNlQnVmZmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0
ZWVuZCcsIHVwZGF0ZUVuZCk7Cit9CisKK2Z1bmN0aW9uIHVwZGF0ZUVuZChldmVudCkKK3sKKyAg
ICB2aWRlb0lzUmVhZHkgPSB0cnVlOworfQorCitmdW5jdGlvbiBpc1ZpZGVvUmVhZHkoKQorewor
ICAgIHJldHVybiB2aWRlb0lzUmVhZHk7Cit9CisKKzwvc2NyaXB0PgorCis8ZGl2IHN0eWxlPSJ0
b3A6IDBweDsgbGVmdDogMHB4OyI+d29yZDwvZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDBw
eDsgbGVmdDogMjAwcHg7Ij5OZXcgWW9yazwvZGl2Pjxici8+CisKKzxkaXYgc3R5bGU9InRvcDog
NTBweDsgbGVmdDogMHB4OyI+MSBJbmZpbml0ZSBMb29wLCBDdXBlcnRpbm8sIENBIDk1MDE0PC9k
aXY+PGJyLz4KKzxkaXYgc3R5bGU9InRvcDogNTBweDsgbGVmdDogMjAwcHg7Ij5NYXkgMTd0aCwg
MjAxMjwvZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDUwcHg7IGxlZnQ6IDQwMHB4OyI+KDQw
OCkgOTk2LTEwMTA8L2Rpdj48YnIvPgorCis8ZGl2IGlkPSJlZGl0YWJsZTEiIHN0eWxlPSJ0b3A6
IDE1MHB4OyBsZWZ0OiAwcHg7IiBjb250ZW50ZWRpdGFibGU+ZWRpdGFibGUgZWRpdGFibGUgZWRp
dGFibGUgZWRpdGFibGU8L2Rpdj48YnIvPgorPGRpdiBpZD0iaW5wdXQxIiBzdHlsZT0idG9wOiAx
NTBweDsgbGVmdDogMjAwcHg7Ij48aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9ImVkaXRhYmxlIGVk
aXRhYmxlIGVkaXRhYmxlIGVkaXRhYmxlIj48L2lucHV0PjwvZGl2Pjxici8+Cis8ZGl2IHN0eWxl
PSJ0b3A6IDE1MHB4OyBsZWZ0OiA0MDBweDsiPjx0ZXh0YXJlYSBpZD0idGV4dGFyZWExIj5lZGl0
YWJsZSBlZGl0YWJsZSBlZGl0YWJsZSBlZGl0YWJsZTwvdGV4dGFyZWE+PC9kaXY+PGJyLz4KKwor
PGRpdiBpZD0iZWRpdGFibGUyIiBzdHlsZT0idG9wOiAyMDBweDsgbGVmdDogMHB4OyIgY29udGVu
dGVkaXRhYmxlPk5ldyBZb3JrIHNvbWUgd29yZHM8L2Rpdj48YnIvPgorPGRpdiBpZD0iaW5wdXQy
IiBzdHlsZT0idG9wOiAyMDBweDsgbGVmdDogMjAwcHg7Ij48aW5wdXQgdHlwZT0idGV4dCIgdmFs
dWU9Ik5ldyBZb3JrIHNvbWUgd29yZHMiPjwvaW5wdXQ+PC9kaXY+PGJyLz4KKzxkaXYgc3R5bGU9
InRvcDogMjAwcHg7IGxlZnQ6IDQwMHB4OyI+PHRleHRhcmVhIGlkPSJ0ZXh0YXJlYTIiPk5ldyBZ
b3JrIHNvbWUgd29yZHM8L3RleHRhcmVhPjwvZGl2Pjxici8+CisKKzxkaXYgc3R5bGU9InRvcDog
MjUwcHg7IGxlZnQ6IDBweDsiPjxpbWcgc3JjPSJpY29uLnBuZyIgaGVpZ2h0PSIxMDAlIj48L2Rp
dj48YnIvPgorPGRpdiBzdHlsZT0idG9wOiAyNTBweDsgbGVmdDogMjAwcHg7Ij48YSBocmVmPSJo
dHRwOi8vZXhhbXBsZS5vcmcvIj48aW1nIHNyYz0iaWNvbi5wbmciIGhlaWdodD0iMTAwJSI+PC9h
PjwvZGl2Pjxici8+CisKKzxkaXYgc3R5bGU9InRvcDogMzAwcHg7IGxlZnQ6IDBweDsgd2lkdGg6
IDk1cHg7Ij48YSBocmVmPSJodHRwOi8vZXhhbXBsZS5vcmcvIj5odHRwPC9hPjwvZGl2Pjxici8+
Cis8ZGl2IHN0eWxlPSJ0b3A6IDMwMHB4OyBsZWZ0OiAxMDBweDsgd2lkdGg6IDk1cHg7Ij48YSBo
cmVmPSJmdHA6Ly9leGFtcGxlLm9yZy8iPmZ0cDwvYT48L2Rpdj48YnIvPgorPGRpdiBzdHlsZT0i
dG9wOiAzMDBweDsgbGVmdDogMjAwcHg7IHdpZHRoOiA5NXB4OyI+PGEgaHJlZj0ibWFpbHRvOmV4
YW1wbGVAZXhhbXBsZS5vcmciPm1haWx0byBsaW5rPC9hPjwvZGl2Pjxici8+Cis8ZGl2IHN0eWxl
PSJ0b3A6IDMwMHB4OyBsZWZ0OiAzMDBweDsgd2lkdGg6IDk1cHg7Ij48YSBocmVmPSJqYXZhc2Ny
aXB0OmZhaWwoKSI+amF2YXNjcmlwdCBsaW5rPC9hPjwvZGl2Pjxici8+CisKKzxkaXYgc3R5bGU9
InRvcDogMzUwcHg7IGxlZnQ6IDBweDsiPjx2aWRlbyBzcmM9InRlc3QubXA0Ij48L3ZpZGVvPjwv
ZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDM1MHB4OyBsZWZ0OiAyMDBweDsiPjx2aWRlbyBp
ZD0ibXNlLXZpZGVvIj48L3ZpZGVvPjwvZGl2Pjxici8+CisKKworPGRpdiBzdHlsZT0idG9wOiAw
cHg7IGxlZnQ6IDc1MHB4OyBoZWlnaHQ6IDYwMHB4OyI+dGhpcyBzaG91bGQgbm90IGJlIG5lY2Vz
c2FyeSBidXQgY3VycmVudGx5IGlzIHRvIG1ha2UgYSBkYXRhIGRldGVjdG9ycyBtZW51IHRoaXMg
c2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IGN1cnJlbnRseSBpcyB0byBtYWtlIGEgZGF0YSBk
ZXRlY3RvcnMgbWVudSB0aGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJ1dCBjdXJyZW50bHkg
aXMgdG8gbWFrZSBhIGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGhpcyBzaG91bGQgbm90IGJlIG5lY2Vz
c2FyeSBidXQgY3VycmVudGx5IGlzIHRvIG1ha2UgYSBkYXRhIGRldGVjdG9ycyBtZW51IHRoaXMg
c2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IGN1cnJlbnRseSBpcyB0byBtYWtlIGEgZGF0YSBk
ZXRlY3RvcnMgbWVudSB0aGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJ1dCBjdXJyZW50bHkg
aXMgdG8gbWFrZSBhIGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGhpcyBzaG91bGQgbm90IGJlIG5lY2Vz
c2FyeSBidXQgY3VycmVudGx5IGlzIHRvIG1ha2UgYSBkYXRhIGRldGVjdG9ycyBtZW51PC9kaXY+
PGJyLz4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mk9iakMv
QWN0aW9uTWVudXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJPYmpDL0Fj
dGlvbk1lbnVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmYTdhY2QxMTcyMTgyMDhjZjFmOThiZWI1Y2U5YjNi
ODA1MTZhODMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJPYmpDL0FjdGlvbk1lbnVzLm1tCkBAIC0wLDAgKzEsNzQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0LmgiCisKKyNpbXBvcnQgIlBsYXRmb3Jt
VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlRlc3RC
cm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNp
bXBvcnQgPFdlYktpdC9XZWJLaXQyLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tBY3Rpb25NZW51SXRl
bVR5cGVzLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tBY3Rpb25NZW51VHlwZXMuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdGF0aWMgYm9vbCBkaWRGaW5pc2hMb2FkID0gZmFs
c2U7CitzdGF0aWMgYm9vbCBkaWRGaW5pc2hEb3dubG9hZCA9IGZhbHNlOworCitAaW50ZXJmYWNl
IFdLVmlldyAoRGV0YWlscykKKworLSAodm9pZClwcmVwYXJlRm9yTWVudTooTlNNZW51ICopbWVu
dSB3aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpd2lsbE9wZW5NZW51OihOU01l
bnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZClkaWRDbG9zZU1l
bnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TTWVu
dSAqKWFjdGlvbk1lbnU7CistICh2b2lkKWNvcHk6KGlkKXNlbmRlcjsKKworQGVuZAorCitzdHJ1
Y3QgQWN0aW9uTWVudVJlc3VsdCB7CisgICAgV0tSZXRhaW5QdHI8V0tIaXRUZXN0UmVzdWx0UmVm
PiBoaXRUZXN0UmVzdWx0OworICAgIF9XS0FjdGlvbk1lbnVUeXBlIHR5cGU7CisgICAgUmV0YWlu
UHRyPE5TQXJyYXk+IGRlZmF1bHRNZW51SXRlbXM7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiB1c2VyRGF0YTsKK307CisKK0BpbnRlcmZhY2UgQWN0aW9uTWVudXNUZXN0V0tWaWV3IDogV0tW
aWV3IHsKKyAgICBBY3Rpb25NZW51UmVzdWx0IF9hY3Rpb25NZW51UmVzdWx0OworICAgIFJldGFp
blB0cjxOU0FycmF5PiBfb3ZlcnJpZGVJdGVtczsKKyAgICBCT09MIF9zaG91bGRIYXZlVXNlckRh
dGE7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLGFzc2lnbixzZXR0ZXI9X3NldEFjdGlvbk1l
bnVSZXN1bHQ6KSBBY3Rpb25NZW51UmVzdWx0IF9hY3Rpb25NZW51UmVzdWx0OworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBBY3Rpb25NZW51c1Rlc3RXS1ZpZXcKKworQHN5bnRoZXNpemUgX2Fj
dGlvbk1lbnVSZXN1bHQ9X2FjdGlvbk1lbnVSZXN1bHQ7CisKKy0gKE5TQXJyYXkgKilfYWN0aW9u
TWVudUl0ZW1zRm9ySGl0VGVzdFJlc3VsdDooV0tIaXRUZXN0UmVzdWx0UmVmKWhpdFRlc3RSZXN1
bHQgd2l0aFR5cGU6KF9XS0FjdGlvbk1lbnVUeXBlKXR5cGUgZGVmYXVsdEFjdGlvbk1lbnVJdGVt
czooTlNBcnJheSAqKWRlZmF1bHRNZW51SXRlbXMgdXNlckRhdGE6KFdLVHlwZVJlZil1c2VyRGF0
YQoreworICAgIGlmICh0eXBlICE9IGtXS0FjdGlvbk1lbnVOb25lKQorICAgICAgICBFWFBFQ1Rf
R1QoZGVmYXVsdE1lbnVJdGVtcy5jb3VudCwgKE5TVUludGVnZXIpMCk7CisKKyAgICAvLyBDbGll
bnRzIHNob3VsZCBiZSBhYmxlIHRvIHBhc3MgdXNlckRhdGEgZnJvbSB0aGUgV2ViIHRvIFVJIHBy
b2Nlc3MsIGJldHdlZW4KKyAgICAvLyB0aGUgV0tCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQn
cyBwcmVwYXJlRm9yQWN0aW9uTWVudSwgYW5kIGhlcmUuCisgICAgLy8gaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMTc1NDQ0CisgICAgaWYgKF9zaG91bGRIYXZlVXNlckRhdGEpIHsK
KyAgICAgICAgRVhQRUNUX05PVF9OVUxMKHVzZXJEYXRhKTsKKyAgICAgICAgRVhQRUNUX0VRKFdL
RGljdGlvbmFyeUdldFR5cGVJRCgpLCBXS0dldFR5cGVJRCh1c2VyRGF0YSkpOworICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGFzTGlua0tleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImhhc0xpbmtVUkwiKSk7CisgICAgICAgIFdLVHlwZVJlZiBoYXNM
aW5rVmFsdWUgPSBXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KChXS0RpY3Rpb25hcnlSZWYpdXNl
ckRhdGEsIGhhc0xpbmtLZXkuZ2V0KCkpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoaGFzTGlu
a1ZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKFdLQm9vbGVhbkdldFR5cGVJRCgpLCBXS0dldFR5
cGVJRChoYXNMaW5rVmFsdWUpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGFic29s
dXRlTGlua1VSTCA9IGFkb3B0V0soV0tIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlTGlua1VSTCho
aXRUZXN0UmVzdWx0KSk7CisgICAgICAgIEVYUEVDVF9FUSghIWFic29sdXRlTGlua1VSTCwgV0tC
b29sZWFuR2V0VmFsdWUoKFdLQm9vbGVhblJlZiloYXNMaW5rVmFsdWUpKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgRVhQRUNUX05VTEwodXNlckRhdGEpOworCisgICAgX2FjdGlvbk1lbnVSZXN1bHQu
aGl0VGVzdFJlc3VsdCA9IGhpdFRlc3RSZXN1bHQ7CisgICAgX2FjdGlvbk1lbnVSZXN1bHQudHlw
ZSA9IHR5cGU7CisgICAgX2FjdGlvbk1lbnVSZXN1bHQuZGVmYXVsdE1lbnVJdGVtcyA9IGRlZmF1
bHRNZW51SXRlbXM7CisgICAgX2FjdGlvbk1lbnVSZXN1bHQudXNlckRhdGEgPSB1c2VyRGF0YTsK
KyAgICByZXR1cm4gX292ZXJyaWRlSXRlbXMgPyBfb3ZlcnJpZGVJdGVtcy5nZXQoKSA6IGRlZmF1
bHRNZW51SXRlbXM7Cit9CisKKy0gKHZvaWQpcnVuTWVudVNlcXVlbmNlQXRQb2ludDooTlNQb2lu
dClwb2ludCBwcmVNZW51TmVlZHNVcGRhdGVIYW5kbGVyOih2b2lkKF4pKHZvaWQpKXByZU1lbnVO
ZWVkc1VwZGF0ZUhhbmRsZXIgcHJlV2lsbE9wZW5NZW51SGFuZGxlcjoodm9pZCheKSh2b2lkKSlw
cmVXaWxsT3Blbk1lbnVIYW5kbGVyIHByZURpZENsb3NlTWVudUhhbmRsZXI6KHZvaWQoXikodm9p
ZCkpcHJlRGlkQ2xvc2VNZW51SGFuZGxlcgoreworICAgIF9fYmxvY2sgYm9vbCBkaWRGaW5pc2hT
ZXF1ZW5jZSA9IGZhbHNlOworCisgICAgTlNNZW51ICphY3Rpb25NZW51ID0gc2VsZi5hY3Rpb25N
ZW51OworICAgIFJldGFpblB0cjxOU0V2ZW50PiBldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRX
aXRoVHlwZTpOU0xlZnRNb3VzZURvd24gbG9jYXRpb246cG9pbnQgbW9kaWZpZXJGbGFnczowIHRp
bWVzdGFtcDowIHdpbmRvd051bWJlcjpzZWxmLndpbmRvdy53aW5kb3dOdW1iZXIgY29udGV4dDow
IGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworCisgICAgZGlzcGF0Y2hf
YXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3NlbGYgcHJlcGFy
ZUZvck1lbnU6YWN0aW9uTWVudSB3aXRoRXZlbnQ6ZXZlbnQuZ2V0KCldOworICAgIH0pOworCisg
ICAgdm9pZCAoXmNvcGllZFByZU1lbnVOZWVkc1VwZGF0ZUhhbmRsZXIpKCkgPSBCbG9ja19jb3B5
KHByZU1lbnVOZWVkc1VwZGF0ZUhhbmRsZXIpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGNvcGllZFByZU1lbnVOZWVkc1VwZGF0ZUhh
bmRsZXIoKTsKKyAgICAgICAgQmxvY2tfcmVsZWFzZShjb3BpZWRQcmVNZW51TmVlZHNVcGRhdGVI
YW5kbGVyKTsKKyAgICAgICAgX3Nob3VsZEhhdmVVc2VyRGF0YSA9IFlFUzsKKyAgICAgICAgW1th
Y3Rpb25NZW51IGRlbGVnYXRlXSBtZW51TmVlZHNVcGRhdGU6YWN0aW9uTWVudV07CisgICAgICAg
IF9zaG91bGRIYXZlVXNlckRhdGEgPSBOTzsKKyAgICB9KTsKKworICAgIHZvaWQgKF5jb3BpZWRQ
cmVXaWxsT3Blbk1lbnVIYW5kbGVyKSgpID0gQmxvY2tfY29weShwcmVXaWxsT3Blbk1lbnVIYW5k
bGVyKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBjb3BpZWRQcmVXaWxsT3Blbk1lbnVIYW5kbGVyKCk7CisgICAgICAgIEJsb2NrX3Jl
bGVhc2UoY29waWVkUHJlV2lsbE9wZW5NZW51SGFuZGxlcik7CisgICAgICAgIFtzZWxmIHdpbGxP
cGVuTWVudTphY3Rpb25NZW51IHdpdGhFdmVudDpldmVudC5nZXQoKV07CisgICAgfSk7CisKKyAg
ICB2b2lkICheY29waWVkUHJlRGlkQ2xvc2VNZW51SGFuZGxlcikoKSA9IEJsb2NrX2NvcHkocHJl
RGlkQ2xvc2VNZW51SGFuZGxlcik7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgY29waWVkUHJlRGlkQ2xvc2VNZW51SGFuZGxlcigpOwor
ICAgICAgICBCbG9ja19yZWxlYXNlKGNvcGllZFByZURpZENsb3NlTWVudUhhbmRsZXIpOworICAg
ICAgICBbc2VsZiBkaWRDbG9zZU1lbnU6YWN0aW9uTWVudSB3aXRoRXZlbnQ6ZXZlbnQuZ2V0KCld
OworICAgICAgICBbc2VsZiBtb3VzZURvd246ZXZlbnQuZ2V0KCldOworICAgICAgICBkaWRGaW5p
c2hTZXF1ZW5jZSA9IHRydWU7CisgICAgfSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRpZEZpbmlzaFNlcXVlbmNlKTsKK30KKworLSAodm9pZClydW5NZW51U2VxdWVuY2VBdFBv
aW50OihOU1BvaW50KXBvaW50IHByZURpZENsb3NlTWVudUhhbmRsZXI6KHZvaWQoXikodm9pZCkp
cHJlRGlkQ2xvc2VNZW51SGFuZGxlcgoreworICAgIFtzZWxmIHJ1bk1lbnVTZXF1ZW5jZUF0UG9p
bnQ6cG9pbnQgcHJlTWVudU5lZWRzVXBkYXRlSGFuZGxlcjpeeyB9IHByZVdpbGxPcGVuTWVudUhh
bmRsZXI6XnsgfSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOnByZURpZENsb3NlTWVudUhhbmRsZXJd
OworfQorCistICh2b2lkKV9zZXRPdmVycmlkZUFjdGlvbk1lbnVJdGVtczooTlNBcnJheSAqKW92
ZXJyaWRlSXRlbXMKK3sKKyAgICBfb3ZlcnJpZGVJdGVtcyA9IG92ZXJyaWRlSXRlbXM7Cit9CisK
K0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdHJ1Y3QgQWN0aXZlRG93bmxv
YWRDb250ZXh0IHsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcGF0aDsKKyAgICBib29s
IHNob3VsZENoZWNrRm9ySW1hZ2UgPSAwOworfTsKKworc3RhdGljIHZvaWQgZGlkRmluaXNoTG9h
ZEZvckZyYW1lQ2FsbGJhY2soV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlw
ZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBkaWRGaW5pc2hM
b2FkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoRG93bmxvYWRDYWxsYmFjayhX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbykKK3sKKyAgICBXS1N0cmluZ1JlZiB3a0FjdGl2ZURvd25sb2FkUGF0aCA9ICgo
QWN0aXZlRG93bmxvYWRDb250ZXh0KiljbGllbnRJbmZvKS0+cGF0aC5nZXQoKTsKKyAgICBzaXpl
X3QgbGVuZ3RoID0gV0tTdHJpbmdHZXRMZW5ndGgod2tBY3RpdmVEb3dubG9hZFBhdGgpICsgMTsK
KyAgICBjaGFyICphY3RpdmVEb3dubG9hZFBhdGggPSAoY2hhciAqKWNhbGxvYygxLCBsZW5ndGgp
OworICAgIFdLU3RyaW5nR2V0VVRGOENTdHJpbmcod2tBY3RpdmVEb3dubG9hZFBhdGgsIGFjdGl2
ZURvd25sb2FkUGF0aCwgbGVuZ3RoKTsKKworICAgIGlmICgoKEFjdGl2ZURvd25sb2FkQ29udGV4
dCopY2xpZW50SW5mbyktPnNob3VsZENoZWNrRm9ySW1hZ2UpIHsKKyAgICAgICAgUmV0YWluUHRy
PE5TSW1hZ2U+IGltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ29udGVu
dHNPZkZpbGU6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFjdGl2ZURvd25sb2FkUGF0
aF1dKTsKKworICAgICAgICBFWFBFQ1RfRVEoMjE1LCBbaW1hZ2Ugc2l6ZV0ud2lkdGgpOworICAg
ICAgICBFWFBFQ1RfRVEoMTc0LCBbaW1hZ2Ugc2l6ZV0uaGVpZ2h0KTsKKyAgICB9CisKKyAgICBk
aWRGaW5pc2hEb3dubG9hZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRpZENyZWF0ZURvd25s
b2FkRGVzdGluYXRpb25DYWxsYmFjayhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJl
ZiBkb3dubG9hZCwgV0tTdHJpbmdSZWYgcGF0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sK
KyAgICAoKEFjdGl2ZURvd25sb2FkQ29udGV4dCopY2xpZW50SW5mbyktPnBhdGggPSBwYXRoOwor
fQorCitzdGF0aWMgTlNTdHJpbmcgKndhdGNoUGFzdGVib2FyZEZvclN0cmluZygpCit7CisgICAg
W1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGNsZWFyQ29udGVudHNdOworCisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1v
ZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV07
CisgICAgICAgIE5TU3RyaW5nICpwYXN0ZWJvYXJkU3RyaW5nID0gW1tOU1Bhc3RlYm9hcmQgZ2Vu
ZXJhbFBhc3RlYm9hcmRdIHN0cmluZ0ZvclR5cGU6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ107Cisg
ICAgICAgIGlmIChwYXN0ZWJvYXJkU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIHBhc3RlYm9h
cmRTdHJpbmc7CisgICAgfQorfQorCitzdGF0aWMgTlNJbWFnZSAqd2F0Y2hQYXN0ZWJvYXJkRm9y
SW1hZ2UoKQoreworICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBjbGVhckNv
bnRlbnRzXTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJl
bnRSdW5Mb29wXSBydW5Nb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0
ZSBkaXN0YW50UGFzdF1dOworICAgICAgICBOU0FycmF5ICpwYXN0ZWJvYXJkSXRlbXMgPSBbW05T
UGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gcmVhZE9iamVjdHNGb3JDbGFzc2VzOkBbIFtO
U0ltYWdlIGNsYXNzXSBdIG9wdGlvbnM6bmlsXTsKKyAgICAgICAgaWYgKHBhc3RlYm9hcmRJdGVt
cyAmJiBwYXN0ZWJvYXJkSXRlbXMuY291bnQpCisgICAgICAgICAgICByZXR1cm4gcGFzdGVib2Fy
ZEl0ZW1zLmZpcnN0T2JqZWN0OworICAgIH0KK30KKworc3RydWN0IEphdmFTY3JpcHRTdHJpbmdD
YWxsYmFja0NvbnRleHQgeworICAgIEphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRleHQoKSA6
IGRpZEZpbmlzaChmYWxzZSkgeyB9CisKKyAgICBib29sIGRpZEZpbmlzaDsKKyAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gYWN0dWFsU3RyaW5nOworfTsKKworc3RydWN0IEphdmFTY3JpcHRC
b29sQ2FsbGJhY2tDb250ZXh0IHsKKyAgICBKYXZhU2NyaXB0Qm9vbENhbGxiYWNrQ29udGV4dCgp
IDogZGlkRmluaXNoKGZhbHNlKSB7IH0KKworICAgIGJvb2wgZGlkRmluaXNoOworICAgIGJvb2wg
dmFsdWU7Cit9OworCitzdGF0aWMgdm9pZCBqYXZhU2NyaXB0U3RyaW5nQ2FsbGJhY2soV0tTZXJp
YWxpemVkU2NyaXB0VmFsdWVSZWYgcmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBXS0Vycm9y
UmVmIGVycm9yLCB2b2lkKiBjdHgpCit7CisgICAgRVhQRUNUX05PVF9OVUxMKHJlc3VsdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSk7CisKKyAgICBKYXZhU2NyaXB0U3RyaW5nQ2FsbGJhY2tDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SmF2YVNjcmlwdFN0cmluZ0NhbGxiYWNrQ29udGV4dCo+
KGN0eCk7CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgc2NyaXB0Q29udGV4dCA9IEpTR2xvYmFs
Q29udGV4dENyZWF0ZSgwKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwoc2NyaXB0Q29udGV4dCk7CisK
KyAgICBKU1ZhbHVlUmVmIHNjcmlwdFZhbHVlID0gV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVEZXNl
cmlhbGl6ZShyZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUsIHNjcmlwdENvbnRleHQsIDApOwor
ICAgIEVYUEVDVF9OT1RfTlVMTChzY3JpcHRWYWx1ZSk7CisKKyAgICBjb250ZXh0LT5hY3R1YWxT
dHJpbmcuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShzY3JpcHRDb250ZXh0LCBzY3JpcHRWYWx1
ZSwgMCkpOworICAgIEVYUEVDVF9OT1RfTlVMTChjb250ZXh0LT5hY3R1YWxTdHJpbmcuZ2V0KCkp
OworCisgICAgY29udGV4dC0+ZGlkRmluaXNoID0gdHJ1ZTsKKyAgICAKKyAgICBKU0dsb2JhbENv
bnRleHRSZWxlYXNlKHNjcmlwdENvbnRleHQpOworICAgIAorICAgIEVYUEVDVF9OVUxMKGVycm9y
KTsKK30KKworc3RhdGljIHZvaWQgamF2YVNjcmlwdEJvb2xDYWxsYmFjayhXS1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZVJlZiByZXN1bHRTZXJpYWxpemVkU2NyaXB0VmFsdWUsIFdLRXJyb3JSZWYgZXJy
b3IsIHZvaWQqIGN0eCkKK3sKKyAgICBFWFBFQ1RfTk9UX05VTEwocmVzdWx0U2VyaWFsaXplZFNj
cmlwdFZhbHVlKTsKKworICAgIEphdmFTY3JpcHRCb29sQ2FsbGJhY2tDb250ZXh0KiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8SmF2YVNjcmlwdEJvb2xDYWxsYmFja0NvbnRleHQqPihjdHgpOworCisg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIHNjcmlwdENvbnRleHQgPSBKU0dsb2JhbENvbnRleHRDcmVh
dGUoMCk7CisgICAgRVhQRUNUX05PVF9OVUxMKHNjcmlwdENvbnRleHQpOworCisgICAgSlNWYWx1
ZVJlZiBzY3JpcHRWYWx1ZSA9IFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlRGVzZXJpYWxpemUocmVz
dWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBzY3JpcHRDb250ZXh0LCAwKTsKKyAgICBFWFBFQ1Rf
Tk9UX05VTEwoc2NyaXB0VmFsdWUpOworCisgICAgRVhQRUNUX1RSVUUoSlNWYWx1ZUlzQm9vbGVh
bihzY3JpcHRDb250ZXh0LCBzY3JpcHRWYWx1ZSkpOworCisgICAgY29udGV4dC0+dmFsdWUgPSBK
U1ZhbHVlVG9Cb29sZWFuKHNjcmlwdENvbnRleHQsIHNjcmlwdFZhbHVlKTsKKyAgICBjb250ZXh0
LT5kaWRGaW5pc2ggPSB0cnVlOworICAgIAorICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2Uoc2Ny
aXB0Q29udGV4dCk7CisgICAgCisgICAgRVhQRUNUX05VTEwoZXJyb3IpOworfQorCitzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY2FsbEphdmFTY3JpcHRSZXR1cm5pbmdTdHJpbmcoV0tQ
YWdlUmVmIHBhZ2UsIGNvbnN0IGNoYXIqIGpzKQoreworICAgIEphdmFTY3JpcHRTdHJpbmdDYWxs
YmFja0NvbnRleHQgY29udGV4dDsKKyAgICBXS1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUo
cGFnZSwgVXRpbDo6dG9XSyhqcykuZ2V0KCksICZjb250ZXh0LCBqYXZhU2NyaXB0U3RyaW5nQ2Fs
bGJhY2spOworICAgIFV0aWw6OnJ1bigmY29udGV4dC5kaWRGaW5pc2gpOworCisgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoY29udGV4dC5h
Y3R1YWxTdHJpbmcuZ2V0KCkpOworICAgIGF1dG8gYnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxj
aGFyW10+KGJ1ZmZlclNpemUpOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoY29udGV4dC5h
Y3R1YWxTdHJpbmcuZ2V0KCksIGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJu
IGJ1ZmZlcjsKK30KKworc3RhdGljIGJvb2wgY2FsbEphdmFTY3JpcHRSZXR1cm5pbmdCb29sKFdL
UGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBqcykKK3sKKyAgICBKYXZhU2NyaXB0Qm9vbENhbGxi
YWNrQ29udGV4dCBjb250ZXh0OworICAgIFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShw
YWdlLCBVdGlsOjp0b1dLKGpzKS5nZXQoKSwgJmNvbnRleHQsIGphdmFTY3JpcHRCb29sQ2FsbGJh
Y2spOworICAgIFV0aWw6OnJ1bigmY29udGV4dC5kaWRGaW5pc2gpOworICAgIHJldHVybiBjb250
ZXh0LnZhbHVlOworfQorCitzdGF0aWMgdm9pZCB3YXRjaEVkaXRhYmxlQXJlYUZvclN0cmluZyhX
S1BhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciAqYXJlYU5hbWUsIGNvbnN0IGNoYXIgKndhdGNoU3Ry
aW5nKQoreworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRS
dW5Mb29wXSBydW5Nb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBk
aXN0YW50UGFzdF1dOworICAgICAgICBhdXRvIGJ1ZmZlciA9IGNhbGxKYXZhU2NyaXB0UmV0dXJu
aW5nU3RyaW5nKHBhZ2UsIFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImVkaXRhYmxlQXJl
YVN0cmluZygnJXMnKSIsYXJlYU5hbWVdIFVURjhTdHJpbmddKTsKKworICAgICAgICBpZiAoIXN0
cmNtcChidWZmZXIuZ2V0KCksIHdhdGNoU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRGb3JWaWRlb1JlYWR5KFdLUGFnZVJlZiBwYWdlKQor
eworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29w
XSBydW5Nb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBkaXN0YW50
UGFzdF1dOworICAgICAgICBpZiAoY2FsbEphdmFTY3JpcHRSZXR1cm5pbmdCb29sKHBhZ2UsICJp
c1ZpZGVvUmVhZHkoKSIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworc3RhdGlj
IE5TU3RyaW5nICpyZXRyaWV2ZVNlbGVjdGlvbihXS1BhZ2VSZWYgcGFnZSkKK3sKKyAgICBhdXRv
IGJ1ZmZlciA9IGNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nU3RyaW5nKHBhZ2UsICJzdHJpbmdpZnlT
ZWxlY3Rpb24oKSIpOworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
YnVmZmVyLmdldCgpXTsKK30KKworc3RhdGljIE5TU3RyaW5nICpyZXRyaWV2ZVNlbGVjdGlvbklu
RWxlbWVudChXS1BhZ2VSZWYgcGFnZSwgY29uc3QgY2hhciAqYXJlYU5hbWUpCit7CisgICAgYXV0
byBidWZmZXIgPSBjYWxsSmF2YVNjcmlwdFJldHVybmluZ1N0cmluZyhwYWdlLCBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJzdHJpbmdpZnlTZWxlY3Rpb25JbkVsZW1lbnQoJyVzJykiLGFy
ZWFOYW1lXSBVVEY4U3RyaW5nXSk7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzpidWZmZXIuZ2V0KCldOworfQorCitzdGF0aWMgdm9pZCBwZXJmb3JtTWVudUl0ZW1B
dEluZGV4T2ZUeXBlQXN5bmMoTlNNZW51ICptZW51LCBOU0ludGVnZXIgaW5kZXgsIGludCB0eXBl
KQoreworICAgIEVYUEVDVF9MVChpbmRleCwgbWVudS5udW1iZXJPZkl0ZW1zKTsKKyAgICBpZiAo
aW5kZXggPj0gbWVudS5udW1iZXJPZkl0ZW1zKQorICAgICAgICByZXR1cm47CisgICAgTlNNZW51
SXRlbSAqbWVudUl0ZW0gPSBbbWVudSBpdGVtQXRJbmRleDppbmRleF07CisgICAgRVhQRUNUX05P
VF9OVUxMKG1lbnVJdGVtKTsKKyAgICBFWFBFQ1RfRVEodHlwZSwgW21lbnVJdGVtIHRhZ10pOwor
ICAgIEVYUEVDVF9UUlVFKFttZW51SXRlbSBpc0VuYWJsZWRdKTsKKyAgICBbbWVudUl0ZW0udGFy
Z2V0IHBlcmZvcm1TZWxlY3RvcjptZW51SXRlbS5hY3Rpb24gd2l0aE9iamVjdDptZW51SXRlbSBh
ZnRlckRlbGF5OjBdOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVNZW51SXRlbUF0SW5kZXhPZlR5
cGVJc0Rpc2FibGVkKE5TTWVudSAqbWVudSwgTlNJbnRlZ2VyIGluZGV4LCBpbnQgdHlwZSkKK3sK
KyAgICBFWFBFQ1RfTFQoaW5kZXgsIG1lbnUubnVtYmVyT2ZJdGVtcyk7CisgICAgaWYgKGluZGV4
ID49IG1lbnUubnVtYmVyT2ZJdGVtcykKKyAgICAgICAgcmV0dXJuOworICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gW21lbnUgaXRlbUF0SW5kZXg6aW5kZXhdOworICAgIEVYUEVDVF9OT1RfTlVM
TChtZW51SXRlbSk7CisgICAgRVhQRUNUX0VRKHR5cGUsIFttZW51SXRlbSB0YWddKTsKKyAgICBF
WFBFQ1RfRkFMU0UoW21lbnVJdGVtIGlzRW5hYmxlZF0pOworfQorCitlbnVtIGNsYXNzIFRhcmdl
dFR5cGUgeworICAgIFdvcmQsCisgICAgUGhyYXNlLAorICAgIEFkZHJlc3MsCisgICAgRGF0ZSwK
KyAgICBQaG9uZU51bWJlciwKKyAgICBDb250ZW50RWRpdGFibGVXb3JkcywKKyAgICBDb250ZW50
RWRpdGFibGVQaHJhc2UsCisgICAgVGV4dElucHV0V29yZHMsCisgICAgVGV4dElucHV0UGhyYXNl
LAorICAgIFRleHRBcmVhV29yZHMsCisgICAgVGV4dEFyZWFQaHJhc2UsCisgICAgSW1hZ2UsCisg
ICAgSW1hZ2VBc0xpbmssCisgICAgSFRUUExpbmssCisgICAgRlRQTGluaywKKyAgICBNYWlsdG9M
aW5rLAorICAgIEphdmFTY3JpcHRMaW5rLAorICAgIFBhZ2VPdmVybGF5LAorICAgIFBhZ2VXaGl0
ZXNwYWNlLAorICAgIFZpZGVvLAorICAgIE1TRVZpZGVvLAorfTsKKworc3RhdGljIE5TUG9pbnQg
d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZSB0YXJnZXQpCit7CisgICAgTlNQb2ludCBj
b250ZW50UG9pbnQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIFRhcmdldFR5cGU6
OldvcmQ6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDAsIDApOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlBocmFzZToKKyAgICAgICAgY29udGVudFBv
aW50ID0gTlNNYWtlUG9pbnQoMjAwLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJn
ZXRUeXBlOjpBZGRyZXNzOgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2ludCgwLCA1
MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6RGF0ZToKKyAgICAgICAg
Y29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCA1MCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVGFyZ2V0VHlwZTo6UGhvbmVOdW1iZXI6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5T
TWFrZVBvaW50KDQwMCwgNTApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6
OkNvbnRlbnRFZGl0YWJsZVdvcmRzOgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2lu
dCgwLCAxNTApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OkNvbnRlbnRF
ZGl0YWJsZVBocmFzZToKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMCwgMjAw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJnZXRUeXBlOjpUZXh0SW5wdXRXb3JkczoK
KyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCAxNTApOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlRleHRJbnB1dFBocmFzZToKKyAgICAgICAgY29u
dGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCAyMDApOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRhcmdldFR5cGU6OlRleHRBcmVhV29yZHM6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5T
TWFrZVBvaW50KDQwMCwgMTUwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJnZXRUeXBl
OjpUZXh0QXJlYVBocmFzZToKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoNDAw
LCAyMDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OkltYWdlOgorICAg
ICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2ludCgwLCAyNTApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhcmdldFR5cGU6OkltYWdlQXNMaW5rOgorICAgICAgICBjb250ZW50UG9pbnQg
PSBOU01ha2VQb2ludCgyMDAsIDI1MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0
VHlwZTo6SFRUUExpbms6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDAsIDMw
MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6RlRQTGluazoKKyAgICAg
ICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMTAwLCAzMDApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhcmdldFR5cGU6Ok1haWx0b0xpbms6CisgICAgICAgIGNvbnRlbnRQb2ludCA9
IE5TTWFrZVBvaW50KDIwMCwgMzAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJnZXRU
eXBlOjpKYXZhU2NyaXB0TGluazoKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQo
MzAwLCAzMDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlBhZ2VPdmVy
bGF5OgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2ludCg3NTAsIDEwMCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6UGFnZVdoaXRlc3BhY2U6CisgICAgICAg
IGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDY1MCwgMCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVGFyZ2V0VHlwZTo6VmlkZW86CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBv
aW50KDAsIDM1MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6TVNFVmlk
ZW86CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDIwMCwgMzUwKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIE5TTWFrZVBvaW50KGNvbnRlbnRQb2ludC54
LCA2MDAgLSBjb250ZW50UG9pbnQueSk7Cit9CisKK3N0YXRpYyBOU1BvaW50IGluc2V0OChOU1Bv
aW50IHBvaW50KQoreworICAgIHJldHVybiBOU01ha2VQb2ludChwb2ludC54ICsgOCwgcG9pbnQu
eSAtIDgpOworfQorCitURVNUKFdlYktpdDIsIEFjdGlvbk1lbnVzVGVzdCkKK3sKKyAgICBXS1Jl
dGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQgPSBhZG9wdFdLKFV0aWw6OmNyZWF0ZUNvbnRl
eHRGb3JJbmplY3RlZEJ1bmRsZVRlc3QoIkFjdGlvbk1lbnVUZXN0IikpOworCisgICAgV0tSZXRh
aW5QdHI8V0tQYWdlR3JvdXBSZWY+IHBhZ2VHcm91cCA9IGFkb3B0V0soV0tQYWdlR3JvdXBDcmVh
dGVXaXRoSWRlbnRpZmllcihVdGlsOjp0b1dLKCJBY3Rpb25NZW51c1Rlc3RHcm91cCIpLmdldCgp
KSk7CisgICAgV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJl
ZmVyZW5jZXMocGFnZUdyb3VwLmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TWVkaWFTb3Vy
Y2VFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOworCisgICAgUmV0YWlu
UHRyPEFjdGlvbk1lbnVzVGVzdFdLVmlldz4gd2tWaWV3ID0gYWRvcHROUyhbW0FjdGlvbk1lbnVz
VGVzdFdLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb250ZXh0UmVmOmNvbnRleHQuZ2V0KCkgcGFnZUdyb3VwUmVmOnBhZ2VHcm91cC5nZXQoKV0p
OworICAgIFBsYXRmb3JtV2ViVmlldyBwbGF0Zm9ybVdlYlZpZXcod2tWaWV3LmdldCgpKTsKKwor
ICAgIFdLUGFnZUxvYWRlckNsaWVudFYwIGxvYWRlckNsaWVudDsKKyAgICBtZW1zZXQoJmxvYWRl
ckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNsaWVudCkpOworICAgIGxvYWRlckNsaWVudC5iYXNl
LnZlcnNpb24gPSAwOworICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWVDYWxsYmFjazsKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xp
ZW50KFt3a1ZpZXcgcGFnZVJlZl0sICZsb2FkZXJDbGllbnQuYmFzZSk7CisKKyAgICBBY3RpdmVE
b3dubG9hZENvbnRleHQgYWN0aXZlRG93bmxvYWRDb250ZXh0OworCisgICAgV0tDb250ZXh0RG93
bmxvYWRDbGllbnRWMCBkb3dubG9hZENsaWVudDsKKyAgICBtZW1zZXQoJmRvd25sb2FkQ2xpZW50
LCAwLCBzaXplb2YoZG93bmxvYWRDbGllbnQpKTsKKyAgICBkb3dubG9hZENsaWVudC5iYXNlLnZl
cnNpb24gPSAwOworICAgIGRvd25sb2FkQ2xpZW50LmJhc2UuY2xpZW50SW5mbyA9ICZhY3RpdmVE
b3dubG9hZENvbnRleHQ7CisgICAgZG93bmxvYWRDbGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNo
RG93bmxvYWRDYWxsYmFjazsKKyAgICBkb3dubG9hZENsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlv
biA9IGRpZENyZWF0ZURvd25sb2FkRGVzdGluYXRpb25DYWxsYmFjazsKKyAgICBXS0NvbnRleHRT
ZXREb3dubG9hZENsaWVudChjb250ZXh0LmdldCgpLCAmZG93bmxvYWRDbGllbnQuYmFzZSk7CisK
KyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsKEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZv
clJlc291cmNlKCJhY3Rpb24tbWVudS10YXJnZXRzIiwgImh0bWwiKSk7CisgICAgV0tQYWdlTG9h
ZFVSTChbd2tWaWV3IHBhZ2VSZWZdLCB1cmwuZ2V0KCkpOworCisgICAgVXRpbDo6cnVuKCZkaWRG
aW5pc2hMb2FkKTsKKworICAgIC8vIFJlYWQtb25seSB0ZXh0LgorICAgIFt3a1ZpZXcgcnVuTWVu
dVNlcXVlbmNlQXRQb2ludDppbnNldDgod2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6
V29yZCkpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtX
S0FjdGlvbk1lbnVSZWFkT25seVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUp
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ3b3JkIiwgcmV0cmlldmVTZWxlY3Rpb24oW3dr
VmlldyBwYWdlUmVmXSkpOworICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5
bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMCwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdDb3B5VGV4
dCk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIndvcmQiLCB3YXRjaFBhc3RlYm9hcmRGb3JT
dHJpbmcoKSk7CisgICAgfV07CisKKyAgICAvLyBSZWFkLW9ubHkgdGV4dCwgb24gYSBwaHJhc2Uu
CisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQb2ludEZv
clRhcmdldChUYXJnZXRUeXBlOjpQaHJhc2UpKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7
CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51UmVhZE9ubHlUZXh0LCBbd2tWaWV3IF9h
Y3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlv
cmsiLCByZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgICAgIHBlcmZv
cm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tD
b250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlUZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAi
TmV3IFlvcmsiLCB3YXRjaFBhc3RlYm9hcmRGb3JTdHJpbmcoKSk7CisgICAgfV07CisKKyAgICAv
LyBSZWFkLW9ubHkgdGV4dCwgb24gYW4gYWRkcmVzcy4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1
ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkFkZHJl
c3MpKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tB
Y3Rpb25NZW51RGF0YURldGVjdGVkSXRlbSwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlw
ZSk7CisKKyAgICAgICAgLy8gQWRkcmVzc2VzIGRvbid0IGdldCBzZWxlY3RlZCwgYmVjYXVzZSB0
aGV5IGltbWVkaWF0ZWx5IHNob3cgYSBUZXh0SW5kaWNhdG9yLgorICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoQCI8bm8gc2VsZWN0aW9uPiIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1ZpZXcgcGFnZVJl
Zl0pKTsKKyAgICB9XTsKKworICAgIC8vIFJlYWQtb25seSB0ZXh0LCBvbiBhIGRhdGUuCisgICAg
W3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdl
dChUYXJnZXRUeXBlOjpEYXRlKSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAg
ICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudURhdGFEZXRlY3RlZEl0ZW0sIFt3a1ZpZXcgX2FjdGlv
bk1lbnVSZXN1bHRdLnR5cGUpOworCisgICAgICAgIC8vIERhdGVzIGRvbid0IGdldCBzZWxlY3Rl
ZCwgYmVjYXVzZSB0aGV5IGltbWVkaWF0ZWx5IHNob3cgYSBUZXh0SW5kaWNhdG9yLgorICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCI8bm8gc2VsZWN0aW9uPiIsIHJldHJpZXZlU2VsZWN0aW9uKFt3
a1ZpZXcgcGFnZVJlZl0pKTsKKyAgICB9XTsKKworICAgIC8vIFJlYWQtb25seSB0ZXh0LCBvbiBh
IHBob25lIG51bWJlci4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4
KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OlBob25lTnVtYmVyKSkgcHJlRGlkQ2xv
c2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudURhdGFE
ZXRlY3RlZEl0ZW0sIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoQCIoNDA4KSA5OTYtMTAxMCIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1Zp
ZXcgcGFnZVJlZl0pKTsKKyAgICB9XTsKKworICAgIC8vIENvcHkgZnJvbSBhIGNvbnRlbnRFZGl0
YWJsZSBkaXYuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5k
b3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpDb250ZW50RWRpdGFibGVXb3JkcykpIHByZURp
ZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVF
ZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1ZpZXcgcGFn
ZVJlZl0pKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1Zp
ZXcgYWN0aW9uTWVudV0sIDAsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHQpOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHdhdGNoUGFzdGVib2FyZEZvclN0cmlu
ZygpKTsKKyAgICB9XTsKKworICAgIC8vIENvcHkgYSBwaHJhc2UgZnJvbSBhIGNvbnRlbnRFZGl0
YWJsZSBkaXYuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5k
b3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpDb250ZW50RWRpdGFibGVQaHJhc2UpKSBwcmVE
aWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51
RWRpdGFibGVUZXh0LCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAg
RVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCByZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBh
Z2VSZWZdKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tW
aWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlUZXh0KTsKKyAg
ICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCB3YXRjaFBhc3RlYm9hcmRGb3JTdHJp
bmcoKSk7CisgICAgfV07CisKKyAgICAvLyBQYXN0ZSBvbiB0b3Agb2YgdGhlIHRleHQgaW4gdGhl
IGNvbnRlbnRFZGl0YWJsZSBkaXYuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50
Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpDb250ZW50RWRpdGFibGVX
b3JkcykpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtX
S0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUp
OworICAgICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gY2xlYXJDb250ZW50
c107CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBzZXRTdHJpbmc6
QCJwYXN0ZWQgc3RyaW5nIiBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddOworICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1ZpZXcg
cGFnZVJlZl0pKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3
a1ZpZXcgYWN0aW9uTWVudV0sIDIsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnUGFzdGUpOworCisg
ICAgICAgIC8vIE5vdyBjaGVjayBhbmQgc2VlIGlmIG91ciBwYXN0ZSBzdWNjZWVkZWQuIEl0IHNo
b3VsZCBvbmx5IHJlcGxhY2Ugb25lICdlZGl0YWJsZScuCisgICAgICAgIHdhdGNoRWRpdGFibGVB
cmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJlZGl0YWJsZTEiLCAicGFzdGVkIHN0cmlu
ZyBlZGl0YWJsZSBlZGl0YWJsZSBlZGl0YWJsZSIpOworICAgIH1dOworCisgICAgLy8gUGFzdGUg
b24gdG9wIG9mIGEgcGhyYXNlIGluIHRoZSBjb250ZW50RWRpdGFibGUgZGl2LgorICAgIFt3a1Zp
ZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDppbnNldDgod2luZG93UG9pbnRGb3JUYXJnZXQoVGFy
Z2V0VHlwZTo6Q29udGVudEVkaXRhYmxlUGhyYXNlKSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpe
KCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3drVmll
dyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVy
YWxQYXN0ZWJvYXJkXSBjbGVhckNvbnRlbnRzXTsKKyAgICAgICAgW1tOU1Bhc3RlYm9hcmQgZ2Vu
ZXJhbFBhc3RlYm9hcmRdIHNldFN0cmluZzpAInBhc3RlZCBvdmVyIHBocmFzZSIgZm9yVHlwZTpO
U1Bhc3RlYm9hcmRUeXBlU3RyaW5nXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlv
cmsiLCByZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgICAgIHBlcmZv
cm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAyLCBrV0tD
b250ZXh0QWN0aW9uSXRlbVRhZ1Bhc3RlKTsKKworICAgICAgICAvLyBOb3cgY2hlY2sgYW5kIHNl
ZSBpZiBvdXIgcGFzdGUgc3VjY2VlZGVkLCBhbmQgcmVwbGFjZWQgdGhlIHdob2xlIHBocmFzZS4K
KyAgICAgICAgd2F0Y2hFZGl0YWJsZUFyZWFGb3JTdHJpbmcoW3drVmlldyBwYWdlUmVmXSwgImVk
aXRhYmxlMiIsICJwYXN0ZWQgb3ZlciBwaHJhc2Ugc29tZSB3b3JkcyIpOworICAgIH1dOworCisg
ICAgLyogRklYTUU6IFRoZXNlIGN1cnJlbnRseSBmYWlsIGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9i
bGVtLzE5MDcyMDgzPi4KKyAgICAvLyBDb3B5IGZyb20gYW4gPGlucHV0Pi4KKyAgICBbd2tWaWV3
IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdl
dFR5cGU6OlRleHRJbnB1dFdvcmRzKSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAg
ICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3drVmlldyBfYWN0aW9u
TWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImVkaXRhYmxlIiwg
cmV0cmlldmVTZWxlY3Rpb25JbkVsZW1lbnQoW3drVmlldyBwYWdlUmVmXSwgImlucHV0MSIpKTsK
KyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9u
TWVudV0sIDAsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHQpOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHdhdGNoUGFzdGVib2FyZEZvclN0cmluZygpKTsKKyAg
ICB9XTsKKyAgICAgCisgICAgLy8gQ29weSBhIHBocmFzZSBmcm9tIGFuIDxpbnB1dD4uCisgICAg
W3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdl
dChUYXJnZXRUeXBlOjpUZXh0SW5wdXRQaHJhc2UpKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4o
KSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51RWRpdGFibGVUZXh0LCBbd2tWaWV3
IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3
IFlvcmsiLCByZXRyaWV2ZVNlbGVjdGlvbkluRWxlbWVudChbd2tWaWV3IHBhZ2VSZWZdLCAiaW5w
dXQyIikpOworICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmll
dyBhY3Rpb25NZW51XSwgMCwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdDb3B5VGV4dCk7CisgICAg
ICAgIEVYUEVDVF9XS19TVFJFUShAIk5ldyBZb3JrIiwgd2F0Y2hQYXN0ZWJvYXJkRm9yU3RyaW5n
KCkpOworICAgIH1dOworCisgICAgLy8gUGFzdGUgb24gdG9wIG9mIHRoZSBlZGl0YWJsZSB0ZXh0
IGluIGFuIDxpbnB1dD4uCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0
OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0SW5wdXRXb3JkcykpIHByZURp
ZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVF
ZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBb
W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gY2xlYXJDb250ZW50c107CisgICAgICAg
IFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBzZXRTdHJpbmc6QCJwYXN0ZWQiIGZv
clR5cGU6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ107CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShA
ImVkaXRhYmxlIiwgcmV0cmlldmVTZWxlY3Rpb25JbkVsZW1lbnQoW3drVmlldyBwYWdlUmVmXSwg
ImlucHV0MSIpKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3
a1ZpZXcgYWN0aW9uTWVudV0sIDIsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnUGFzdGUpOworCisg
ICAgICAgIC8vIE5vdyBjaGVjayBhbmQgc2VlIGlmIG91ciBwYXN0ZSBzdWNjZWVkZWQuCisgICAg
ICAgIHdhdGNoRWRpdGFibGVBcmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJpbnB1dDEi
LCAicGFzdGVkIGVkaXRhYmxlIGVkaXRhYmxlIGVkaXRhYmxlIik7CisgICAgfV07CisKKyAgICAv
LyBQYXN0ZSBvbiB0b3Agb2YgdGhlIGVkaXRhYmxlIHRleHQsIG9uIGEgcGhyYXNlIGluIGFuIDxp
bnB1dD4uCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQ
b2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0SW5wdXRQaHJhc2UpKSBwcmVEaWRDbG9zZU1l
bnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51RWRpdGFibGVU
ZXh0LCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAgW1tOU1Bhc3Rl
Ym9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGNsZWFyQ29udGVudHNdOworICAgICAgICBbW05TUGFz
dGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gc2V0U3RyaW5nOkAicGFzdGVkIG92ZXIgcGhyYXNl
IiBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddOworICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJOZXcgWW9yayIsIHJldHJpZXZlU2VsZWN0aW9uSW5FbGVtZW50KFt3a1ZpZXcgcGFnZVJl
Zl0sICJpbnB1dDIiKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3lu
Yyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAyLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ1Bhc3RlKTsK
KworICAgICAgICAvLyBOb3cgY2hlY2sgYW5kIHNlZSBpZiBvdXIgcGFzdGUgc3VjY2VlZGVkLgor
ICAgICAgICB3YXRjaEVkaXRhYmxlQXJlYUZvclN0cmluZyhbd2tWaWV3IHBhZ2VSZWZdLCAiaW5w
dXQyIiwgInBhc3RlZCBvdmVyIHBocmFzZSBzb21lIHdvcmRzIik7CisgICAgfV07Ki8KKworICAg
IC8vIENvcHkgZnJvbSBhIDx0ZXh0YXJlYT4uCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VB
dFBvaW50Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0QXJlYVdv
cmRzKSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dL
QWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7
CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImVkaXRhYmxlIiwgcmV0cmlldmVTZWxlY3Rpb25J
bkVsZW1lbnQoW3drVmlldyBwYWdlUmVmXSwgInRleHRhcmVhMSIpKTsKKyAgICAgICAgcGVyZm9y
bU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9uTWVudV0sIDAsIGtXS0Nv
bnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHQpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJl
ZGl0YWJsZSIsIHdhdGNoUGFzdGVib2FyZEZvclN0cmluZygpKTsKKyAgICB9XTsKKworICAgIC8v
IENvcHkgYSBwaHJhc2UgZnJvbSBhIDx0ZXh0YXJlYT4uCisgICAgW3drVmlldyBydW5NZW51U2Vx
dWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0
QXJlYVBocmFzZSkpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNU
X0VRKGtXS0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRd
LnR5cGUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJOZXcgWW9yayIsIHJldHJpZXZlU2Vs
ZWN0aW9uSW5FbGVtZW50KFt3a1ZpZXcgcGFnZVJlZl0sICJ0ZXh0YXJlYTIiKSk7CisgICAgICAg
IHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAw
LCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlUZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKEAiTmV3IFlvcmsiLCB3YXRjaFBhc3RlYm9hcmRGb3JTdHJpbmcoKSk7CisgICAgfV07CisK
KyAgICAvLyBQYXN0ZSBvbiB0b3Agb2YgdGhlIGVkaXRhYmxlIHRleHQgaW4gYSA8dGV4dGFyZWE+
LgorICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDppbnNldDgod2luZG93UG9pbnRG
b3JUYXJnZXQoVGFyZ2V0VHlwZTo6VGV4dEFyZWFXb3JkcykpIHByZURpZENsb3NlTWVudUhhbmRs
ZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3
a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBbW05TUGFzdGVib2FyZCBn
ZW5lcmFsUGFzdGVib2FyZF0gY2xlYXJDb250ZW50c107CisgICAgICAgIFtbTlNQYXN0ZWJvYXJk
IGdlbmVyYWxQYXN0ZWJvYXJkXSBzZXRTdHJpbmc6QCJwYXN0ZWQiIGZvclR5cGU6TlNQYXN0ZWJv
YXJkVHlwZVN0cmluZ107CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImVkaXRhYmxlIiwgcmV0
cmlldmVTZWxlY3Rpb25JbkVsZW1lbnQoW3drVmlldyBwYWdlUmVmXSwgInRleHRhcmVhMSIpKTsK
KyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9u
TWVudV0sIDIsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnUGFzdGUpOworCisgICAgICAgIC8vIE5v
dyBjaGVjayBhbmQgc2VlIGlmIG91ciBwYXN0ZSBzdWNjZWVkZWQuCisgICAgICAgIHdhdGNoRWRp
dGFibGVBcmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJ0ZXh0YXJlYTEiLCAicGFzdGVk
IGVkaXRhYmxlIGVkaXRhYmxlIGVkaXRhYmxlIik7CisgICAgfV07CisKKyAgICAvLyBQYXN0ZSBv
biB0b3Agb2YgdGhlIGVkaXRhYmxlIHRleHQsIG9uIGEgcGhyYXNlIGluIGEgPHRleHRhcmVhPi4K
KyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdpbmRvd1BvaW50Rm9y
VGFyZ2V0KFRhcmdldFR5cGU6OlRleHRBcmVhUGhyYXNlKSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxl
cjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3dr
VmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdl
bmVyYWxQYXN0ZWJvYXJkXSBjbGVhckNvbnRlbnRzXTsKKyAgICAgICAgW1tOU1Bhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdIHNldFN0cmluZzpAInBhc3RlZCBvdmVyIHBocmFzZSIgZm9yVHlw
ZTpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3
IFlvcmsiLCByZXRyaWV2ZVNlbGVjdGlvbkluRWxlbWVudChbd2tWaWV3IHBhZ2VSZWZdLCAidGV4
dGFyZWEyIikpOworICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3dr
VmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdQYXN0ZSk7CisKKyAg
ICAgICAgLy8gTm93IGNoZWNrIGFuZCBzZWUgaWYgb3VyIHBhc3RlIHN1Y2NlZWRlZC4KKyAgICAg
ICAgd2F0Y2hFZGl0YWJsZUFyZWFGb3JTdHJpbmcoW3drVmlldyBwYWdlUmVmXSwgInRleHRhcmVh
MiIsICJwYXN0ZWQgb3ZlciBwaHJhc2Ugc29tZSB3b3JkcyIpOworICAgIH1dOworCisgICAgLy8g
Q29weSBhbiBpbWFnZS4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4
KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkltYWdlKSkgcHJlRGlkQ2xvc2VNZW51
SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUltYWdlLCBbd2tW
aWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKworICAgICAgICBwZXJmb3JtTWVudUl0ZW1B
dEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMCwga1dLQ29udGV4dEFjdGlv
bkl0ZW1UYWdDb3B5SW1hZ2UpOworICAgICAgICBOU0ltYWdlICppbWFnZSA9IHdhdGNoUGFzdGVi
b2FyZEZvckltYWdlKCk7CisKKyAgICAgICAgRVhQRUNUX0VRKDIxNSwgaW1hZ2Uuc2l6ZS53aWR0
aCk7CisgICAgICAgIEVYUEVDVF9FUSgxNzQsIGltYWdlLnNpemUuaGVpZ2h0KTsKKyAgICB9XTsK
KworICAgIC8vIERvd25sb2FkIGFuIGltYWdlLgorICAgIGFjdGl2ZURvd25sb2FkQ29udGV4dC5z
aG91bGRDaGVja0ZvckltYWdlID0gdHJ1ZTsKKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0
UG9pbnQ6aW5zZXQ4KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkltYWdlKSkgcHJl
RGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVu
dUltYWdlLCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKworICAgICAgICBkaWRG
aW5pc2hEb3dubG9hZCA9IGZhbHNlOworICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZU
eXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdT
YXZlSW1hZ2VUb0Rvd25sb2Fkcyk7CisgICAgICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoRG93bmxv
YWQpOworICAgIH1dOworICAgIGFjdGl2ZURvd25sb2FkQ29udGV4dC5zaG91bGRDaGVja0Zvcklt
YWdlID0gZmFsc2U7CisKKyAgICAvLyBJbWFnZXMgdGhhdCBhcmUgYWxzbyBsaW5rcyBzaG91bGQg
YmUgdHJlYXRlZCBhcyBsaW5rcy4KKyAgICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8xNzU3MDEKKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdp
bmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkltYWdlQXNMaW5rKSkgcHJlRGlkQ2xvc2VN
ZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUxpbmssIFt3
a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgIH1dOworCisgICAgd2FpdEZvclZp
ZGVvUmVhZHkoW3drVmlldyBwYWdlUmVmXSk7CisKKyAgICAvLyBDb3B5IGEgdmlkZW8gVVJMLgor
ICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDppbnNldDgod2luZG93UG9pbnRGb3JU
YXJnZXQoVGFyZ2V0VHlwZTo6VmlkZW8pKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7Cisg
ICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51VmlkZW8sIFt3a1ZpZXcgX2FjdGlvbk1lbnVS
ZXN1bHRdLnR5cGUpOworCisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3lu
Yyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlWaWRl
b1VSTCk7CisgICAgICAgIE5TU3RyaW5nICp2aWRlb1VSTCA9IHdhdGNoUGFzdGVib2FyZEZvclN0
cmluZygpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ0ZXN0Lm1wNCIsIFt2aWRlb1VSTCBs
YXN0UGF0aENvbXBvbmVudF0pOworICAgIH1dOworCisgICAgLy8gQ29weWluZyBhIHZpZGVvIFVS
TCBmb3IgYSBub24tZG93bmxvYWRhYmxlIHZpZGVvIHNob3VsZCByZXN1bHQgaW4gY29weWluZyB0
aGUgcGFnZSBVUkwgaW5zdGVhZC4KKyAgICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8xNzYxMzEKKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdp
bmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6Ok1TRVZpZGVvKSkgcHJlRGlkQ2xvc2VNZW51
SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudVZpZGVvLCBbd2tW
aWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKworICAgICAgICBwZXJmb3JtTWVudUl0ZW1B
dEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMCwga1dLQ29udGV4dEFjdGlv
bkl0ZW1UYWdDb3B5VmlkZW9VUkwpOworICAgICAgICBOU1N0cmluZyAqdmlkZW9VUkwgPSB3YXRj
aFBhc3RlYm9hcmRGb3JTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiYWN0aW9u
LW1lbnUtdGFyZ2V0cy5odG1sIiwgW3ZpZGVvVVJMIGxhc3RQYXRoQ29tcG9uZW50XSk7CisKKyAg
ICAgICAgLy8gQWxzbywgdGhlIGRvd25sb2FkIG1lbnUgaXRlbSBzaG91bGQgYmUgZGlzYWJsZWQg
Zm9yIG5vbi1kb3dubG9hZGFibGUgdmlkZW8uCisgICAgICAgIGVuc3VyZU1lbnVJdGVtQXRJbmRl
eE9mVHlwZUlzRGlzYWJsZWQoW3drVmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29udGV4dEFjdGlv
bkl0ZW1UYWdTYXZlVmlkZW9Ub0Rvd25sb2Fkcyk7CisgICAgfV07CisKKyAgICAvLyBIVFRQIGxp
bmsuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0OCh3aW5kb3dQb2lu
dEZvclRhcmdldChUYXJnZXRUeXBlOjpIVFRQTGluaykpIHByZURpZENsb3NlTWVudUhhbmRsZXI6
XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVMaW5rLCBbd2tWaWV3IF9hY3Rp
b25NZW51UmVzdWx0XS50eXBlKTsKKworICAgICAgICAvLyBJbnZva2luZyBhbiBhY3Rpb24gbWVu
dSBzaG91bGQgZGlzbWlzcyBhbnkgZXhpc3Rpbmcgc2VsZWN0aW9uLgorICAgICAgICAvLyBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzU3NTMKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKEAiPG5vIHNlbGVjdGlvbj4iLCByZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZd
KSk7CisgICAgfV07CisKKyAgICAvLyBNYWlsdG8gbGluay4KKyAgICBbd2tWaWV3IHJ1bk1lbnVT
ZXF1ZW5jZUF0UG9pbnQ6aW5zZXQ4KHdpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6Ok1h
aWx0b0xpbmspKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9F
UShrV0tBY3Rpb25NZW51TWFpbHRvTGluaywgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlw
ZSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIjxubyBzZWxlY3Rpb24+IiwgcmV0cmlldmVT
ZWxlY3Rpb24oW3drVmlldyBwYWdlUmVmXSkpOworICAgIH1dOworCisgICAgLy8gTm9uLUhUVFAo
UyksIG5vbi1tYWlsdG8gbGlua3Mgc2hvdWxkIGZhbGwgYmFjayB0byB0aGUgdGV4dCBtZW51Lgor
ICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDppbnNldDgod2luZG93UG9pbnRGb3JU
YXJnZXQoVGFyZ2V0VHlwZTo6RlRQTGluaykpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsK
KyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVSZWFkT25seVRleHQsIFt3a1ZpZXcgX2Fj
dGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJmdHAiLCBy
ZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgfV07CisKKyAgICAvLyBK
YXZhU2NyaXB0IGxpbmtzIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQsIGFuZCBzaG91bGQgZmFsbCBi
YWNrIHRvIHRoZSB0ZXh0IG1lbnUuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50
Omluc2V0OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpKYXZhU2NyaXB0TGluaykp
IHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlv
bk1lbnVSZWFkT25seVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJqYXZhc2NyaXB0IiwgcmV0cmlldmVTZWxlY3Rpb24oW3dr
VmlldyBwYWdlUmVmXSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2FsbEphdmFTY3JpcHRSZXR1
cm5pbmdCb29sKFt3a1ZpZXcgcGFnZVJlZl0sICJ3YXNGYWlsQ2FsbGVkKCkiKSk7CisgICAgfV07
CisKKyAgICAvLyBDbGllbnRzIHNob3VsZCBiZSBhYmxlIHRvIGN1c3RvbWl6ZSB0aGUgbWVudSBi
eSBvdmVycmlkaW5nIFdLVmlldydzIF9hY3Rpb25NZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0Lgor
ICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE3NDkwOAorICAgIFJldGFp
blB0cjxOU01lbnVJdGVtPiBpdGVtID0gYWRvcHROUyhbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRX
aXRoVGl0bGU6QCJTb21lIEFjdGlvbiIgYWN0aW9uOkBzZWxlY3Rvcihjb3B5Oikga2V5RXF1aXZh
bGVudDpAIiJdKTsKKyAgICBbd2tWaWV3IF9zZXRPdmVycmlkZUFjdGlvbk1lbnVJdGVtczpAWyBp
dGVtLmdldCgpIF1dOworICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDppbnNldDgo
d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6SW1hZ2UpKSBwcmVEaWRDbG9zZU1lbnVI
YW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUSgxLCBbd2tWaWV3IGFjdGlvbk1lbnVdLm51
bWJlck9mSXRlbXMpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJTb21lIEFjdGlvbiIsIFtb
d2tWaWV3IGFjdGlvbk1lbnVdIGl0ZW1BdEluZGV4OjBdLnRpdGxlKTsKKyAgICB9XTsKKyAgICBb
d2tWaWV3IF9zZXRPdmVycmlkZUFjdGlvbk1lbnVJdGVtczpuaWxdOworCisgICAgLy8gQ2xpZW50
cyBzaG91bGQgYmUgYWJsZSB0byBjdXN0b21pemUgdGhlIERhdGFEZXRlY3RvcnMgYWN0aW9ucyBi
eSBpbXBsZW1lbnRpbmcKKyAgICAvLyBXS0J1bmRsZVBhZ2VPdmVybGF5Q2xpZW50J3MgcHJlcGFy
ZUZvckFjdGlvbk1lbnUgY2FsbGJhY2suCisgICAgLy8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMTc2MDg2CisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Omluc2V0
OCh3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpQYWdlT3ZlcmxheSkpIHByZURpZENs
b3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVEYXRh
RGV0ZWN0ZWRJdGVtLCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICB9XTsK
KworICAgIC8vIE5vIG1lbnUgc2hvdWxkIGJlIGJ1aWx0IGZvciB3aGl0ZXNwYWNlIChleGNlcHQg
aW4gZWRpdGFibGUgYXJlYXMpLgorICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDpp
bnNldDgod2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6UGFnZVdoaXRlc3BhY2UpKSBw
cmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25N
ZW51Tm9uZSwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIEVYUEVD
VF9FUSgwLCBbd2tWaWV3IGFjdGlvbk1lbnVdLm51bWJlck9mSXRlbXMpOworICAgIH1dOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVzQnVuZGxlLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyT2JqQy9BY3Rpb25NZW51c0J1bmRsZS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42ZjY2MTJhMjQwNTliNmZjMGIxOWI5YTE4ZTgzZWQ2YjQ4MTI4NDI4Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyT2JqQy9BY3Rpb25NZW51
c0J1bmRsZS5tbQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVUZXN0LmgiCisjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVGcmFtZVByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS0J1bmRsZUhpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0J1bmRs
ZU5vZGVIYW5kbGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlT3ZlcmxheS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
QnVuZGxlUmFuZ2VIYW5kbGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tEaWN0aW9uYXJ5
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOdW1iZXIuaD4KKyNpbXBvcnQgPGRsZmNuLmg+CisjaW1w
b3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUgU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JL
X09QVElPTkFMKGZyYW1ld29yaykgXAorICAgIHN0YXRpYyB2b2lkKiBmcmFtZXdvcmsjI0xpYnJh
cnkoKSBcCisgICAgeyBcCisgICAgICAgIHN0YXRpYyB2b2lkKiBmcmFtZXdvcmtMaWJyYXJ5ID0g
ZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIu
ZnJhbWV3b3JrLyIgI2ZyYW1ld29yaywgUlRMRF9OT1cpOyBcCisgICAgICAgIHJldHVybiBmcmFt
ZXdvcmtMaWJyYXJ5OyBcCisgICAgfQorCisjZGVmaW5lIFNPRlRfTElOSyhmcmFtZXdvcmssIGZ1
bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBwYXJhbWV0ZXJO
YW1lcykgXAorICAgIHN0YXRpYyByZXN1bHRUeXBlIGluaXQjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0
ZXJEZWNsYXJhdGlvbnM7IFwKKyAgICBzdGF0aWMgcmVzdWx0VHlwZSAoKnNvZnRMaW5rIyNmdW5j
dGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9IGluaXQjI2Z1bmN0aW9uTmFtZTsgXAor
ICAgIFwKKyAgICBzdGF0aWMgcmVzdWx0VHlwZSBpbml0IyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVy
RGVjbGFyYXRpb25zIFwKKyAgICB7IFwKKyAgICAgICAgc29mdExpbmsjI2Z1bmN0aW9uTmFtZSA9
IChyZXN1bHRUeXBlICgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMpIGRsc3ltKGZyYW1ld29yayMj
TGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUsICIlcyIsIGRsZXJyb3IoKSk7IFwKKyAgICAgICAgcmV0
dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7IFwKKyAgICB9XAorICAg
IFwKKyAgICBpbmxpbmUgcmVzdWx0VHlwZSBmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRp
b25zIFwKKyAgICB7XAorICAgICAgICByZXR1cm4gc29mdExpbmsjI2Z1bmN0aW9uTmFtZSBwYXJh
bWV0ZXJOYW1lczsgXAorICAgIH0KKworI2RlZmluZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3Jr
LCBjbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgQ2xhc3MgaW5pdCMjY2xhc3NOYW1lKCk7IFwKKyAg
ICBzdGF0aWMgQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMjQ2xhc3MpKCkgPSBpbml0IyNjbGFzc05h
bWU7IFwKKyAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNzTmFtZTsgXAorICAgIFwKKyAgICBz
dGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0
dXJuIGNsYXNzIyNjbGFzc05hbWU7IFwKKyAgICB9XAorICAgIFwKKyAgICBzdGF0aWMgQ2xhc3Mg
aW5pdCMjY2xhc3NOYW1lKCkgXAorICAgIHsgXAorICAgICAgICBmcmFtZXdvcmsjI0xpYnJhcnko
KTsgXAorICAgICAgICBjbGFzcyMjY2xhc3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1l
KTsgXAorICAgICAgICBBU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSk7IFwKKyAgICAgICAgZ2V0IyNj
bGFzc05hbWUjI0NsYXNzID0gY2xhc3NOYW1lIyNGdW5jdGlvbjsgXAorICAgICAgICByZXR1cm4g
Y2xhc3MjI2NsYXNzTmFtZTsgXAorICAgIH0KKwordHlwZWRlZiBzdHJ1Y3QgX19ERFNjYW5uZXIg
RERTY2FubmVyLCAqRERTY2FubmVyUmVmOwordHlwZWRlZiBzdHJ1Y3QgX19ERFNjYW5RdWVyeSAq
RERTY2FuUXVlcnlSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0REUmVzdWx0ICpERFJlc3VsdFJlZjsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBERFNjYW5uZXJUeXBlU3RhbmRhcmQgPSAwLAorfSBERFNj
YW5uZXJUeXBlOworCitlbnVtIHsKKyAgICBERFNjYW5uZXJPcHRpb25TdG9wQXRGaXJzdE1hdGNo
ID0gMSwKK307Cit0eXBlZGVmIENGSW5kZXggRERTY2FubmVyT3B0aW9uczsKKworZW51bSB7Cisg
ICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9uZSA9IDAsCisgICAgRERTY2FubmVyQ29w
eVJlc3VsdHNPcHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAorfTsKK3R5cGVkZWYgQ0ZJbmRleCBE
RFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnM7CisKK1NPRlRfTElOS19QUklWQVRFX0ZSQU1FV09S
S19PUFRJT05BTChEYXRhRGV0ZWN0b3JzKQorU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLX09Q
VElPTkFMKERhdGFEZXRlY3RvcnNDb3JlKQorCitleHRlcm4gIkMiIHsKKworU09GVF9MSU5LKERh
dGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJDcmVhdGUsIEREU2Nhbm5lclJlZiwgKEREU2Nhbm5l
clR5cGUgdHlwZSwgRERTY2FubmVyT3B0aW9ucyBvcHRpb25zLCBDRkVycm9yUmVmKiBlcnJvclJl
ZiksICh0eXBlLCBvcHRpb25zLCBlcnJvclJlZikpCitTT0ZUX0xJTksoRGF0YURldGVjdG9yc0Nv
cmUsIEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZywgRERTY2FuUXVlcnlSZWYsIChDRkFsbG9j
YXRvclJlZiBhbGxvY2F0b3IsIENGU3RyaW5nUmVmIHN0cmluZywgQ0ZSYW5nZSByYW5nZSksIChh
bGxvY2F0b3IsIHN0cmluZywgcmFuZ2UpKQorU09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBE
RFNjYW5uZXJTY2FuUXVlcnksIEREU2NhblF1ZXJ5UmVmLCAoRERTY2FubmVyUmVmIHNjYW5uZXIs
IEREU2NhblF1ZXJ5UmVmIHF1ZXJ5KSwgKHNjYW5uZXIsIHF1ZXJ5KSkKK1NPRlRfTElOSyhEYXRh
RGV0ZWN0b3JzQ29yZSwgRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucywgQ0ZBcnJheVJl
ZiwgKEREU2Nhbm5lclJlZiBzY2FubmVyLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnMgb3B0
aW9ucyksIChzY2FubmVyLCBvcHRpb25zKSkKKworfQorCitTT0ZUX0xJTktfQ0xBU1MoRGF0YURl
dGVjdG9ycywgRERBY3Rpb25Db250ZXh0KQorCitAaW50ZXJmYWNlIEREQWN0aW9uQ29udGV4dCA6
IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TU2VjdXJlQ29kaW5nPgorCitAcHJvcGVydHkgKHJldGFp
bikgTlNBcnJheSAqYWxsUmVzdWx0czsKK0Bwcm9wZXJ0eSAocmV0YWluKSBfX2F0dHJpYnV0ZV9f
KChOU09iamVjdCkpIEREUmVzdWx0UmVmIG1haW5SZXN1bHQ7CisKK0BlbmQKKworCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1JldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGNyZWF0ZUFj
dGlvbkNvbnRleHRGb3JQaG9uZU51bWJlcigpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBwbGFpblRleHQgPSBDRlNUUigiKDQwOCkgOTk2LTEwMTAiKTsKKyAgICBSZXRhaW5QdHI8RERT
Y2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlw
ZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBz
Y2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBwbGFpblRleHQuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIENGU3RyaW5nR2V0TGVu
Z3RoKHBsYWluVGV4dC5nZXQoKSkpKSk7CisKKyAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVyeShz
Y2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJD
b3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9uc05vT3ZlcmxhcCkpOworCisKKyAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJh
eUdldENvdW50KHJlc3VsdHMuZ2V0KCkpOworICAgIGlmIChyZXN1bHRDb3VudCAhPSAxKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSAoRERS
ZXN1bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1bHRzLmdldCgpLCAwKTsKKworICAg
IGlmICghbWFpblJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbW2dldEREQWN0aW9u
Q29udGV4dENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKyAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxS
ZXN1bHRzOkBbIChpZCltYWluUmVzdWx0IF1dOworICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5S
ZXN1bHQ6bWFpblJlc3VsdF07CisKKyAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKK30KKyAgICAK
K2NsYXNzIEFjdGlvbk1lbnVUZXN0IDogcHVibGljIEluamVjdGVkQnVuZGxlVGVzdCB7CitwdWJs
aWM6CisgICAgQWN0aW9uTWVudVRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIpCisg
ICAgICAgIDogSW5qZWN0ZWRCdW5kbGVUZXN0KGlkZW50aWZpZXIpCisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JBY3Rpb25NZW51KFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCwgV0tUeXBlUmVmKiB1c2Vy
RGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAgICAgIFdLU3RyaW5nUmVm
IGtleXNbMV07CisgICAgICAgIFdLVHlwZVJlZiB2YWx1ZXNbMV07CisKKyAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGhhc0xpbmtLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJoYXNMaW5rVVJMIikpOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gYWJzb2x1dGVMaW5rVVJMID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5QWJz
b2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCb29s
ZWFuUmVmPiBoYXNMaW5rVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZSghIWFic29sdXRl
TGlua1VSTCkpOworICAgICAgICBrZXlzWzBdID0gaGFzTGlua0tleS5nZXQoKTsKKyAgICAgICAg
dmFsdWVzWzBdID0gaGFzTGlua1ZhbHVlLmdldCgpOworCisgICAgICAgIC8vIEhvdyBkb2VzIG93
bmVyc2hpcCB3b3JrIGhlcmU/CisgICAgICAgICp1c2VyRGF0YSA9IFdLRGljdGlvbmFyeUNyZWF0
ZShrZXlzLCB2YWx1ZXMsIDEpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBhY3Rpb25Db250
ZXh0Rm9yUmVzdWx0QXRQb2ludChXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIHBhZ2VPdmVybGF5LCBX
S1BvaW50IHBvc2l0aW9uLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmKiByYW5nZUhhbmRsZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAgICAgIGlmIChwb3NpdGlvbi54ID4gNzAw
KSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0
ID0gY3JlYXRlQWN0aW9uQ29udGV4dEZvclBob25lTnVtYmVyKCk7CisgICAgICAgICAgICAqcmFu
Z2VIYW5kbGUgPSAoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiljbGllbnRJbmZvOworICAgICAgICAg
ICAgcmV0dXJuICh2b2lkKilhY3Rpb25Db250ZXh0LmF1dG9yZWxlYXNlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZHJhd1Jl
Y3QoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheSwgdm9pZCogZ3JhcGhpY3NDb250
ZXh0LCBXS1JlY3QgZGlydHlSZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsKKyAg
ICAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oZ3JhcGhp
Y3NDb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGN0eCwgMCwgMSwg
MCwgMSk7CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGN0eCwgQ0dSZWN0TWFrZSg3MDAsIDAs
IDEwMCwgNjAwKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVBhZ2UoV0tC
dW5kbGVSZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKKyAgICB7CisgICAgICAgIFdL
QnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50VjEgY29udGV4dE1lbnVDbGllbnQ7CisgICAgICAg
IG1lbXNldCgmY29udGV4dE1lbnVDbGllbnQsIDAsIHNpemVvZihjb250ZXh0TWVudUNsaWVudCkp
OworICAgICAgICBjb250ZXh0TWVudUNsaWVudC5iYXNlLnZlcnNpb24gPSAxOworICAgICAgICBj
b250ZXh0TWVudUNsaWVudC5wcmVwYXJlRm9yQWN0aW9uTWVudSA9IHByZXBhcmVGb3JBY3Rpb25N
ZW51OworICAgICAgICBXS0J1bmRsZVBhZ2VTZXRDb250ZXh0TWVudUNsaWVudChwYWdlLCAmY29u
dGV4dE1lbnVDbGllbnQuYmFzZSk7CisKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVIaXRU
ZXN0UmVzdWx0UmVmPiBoaXRUZXN0UmVzdWx0ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ3JlYXRl
SGl0VGVzdFJlc3VsdChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSksIFdLUG9pbnRNYWtl
KDcwOCwgOCkpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVOb2RlSGFuZGxlUmVmPiBu
b2RlSGFuZGxlID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZSho
aXRUZXN0UmVzdWx0LmdldCgpKSk7CisgICAgICAgIF9yYW5nZUhhbmRsZSA9IGFkb3B0V0soV0tC
dW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVSYW5nZShub2RlSGFuZGxlLmdldCgpKSk7CisKKyAg
ICAgICAgV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudFYxIHBhZ2VPdmVybGF5Q2xpZW50OworICAg
ICAgICBtZW1zZXQoJnBhZ2VPdmVybGF5Q2xpZW50LCAwLCBzaXplb2YocGFnZU92ZXJsYXlDbGll
bnQpKTsKKyAgICAgICAgcGFnZU92ZXJsYXlDbGllbnQuYmFzZS52ZXJzaW9uID0gMTsKKyAgICAg
ICAgcGFnZU92ZXJsYXlDbGllbnQuYmFzZS5jbGllbnRJbmZvID0gX3JhbmdlSGFuZGxlLmdldCgp
OworCisgICAgICAgIHBhZ2VPdmVybGF5Q2xpZW50LmRyYXdSZWN0ID0gZHJhd1JlY3Q7CisgICAg
ICAgIHBhZ2VPdmVybGF5Q2xpZW50LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50ID0gYWN0
aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQ7CisKKyAgICAgICAgX2J1bmRsZVBhZ2VPdmVybGF5
ID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRlKCZwYWdlT3ZlcmxheUNsaWVudC5i
YXNlKSk7CisgICAgICAgIFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShwYWdlLCBfYnVu
ZGxlUGFnZU92ZXJsYXkuZ2V0KCkpOworICAgICAgICBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVl
ZHNEaXNwbGF5KF9idW5kbGVQYWdlT3ZlcmxheS5nZXQoKSwgV0tSZWN0TWFrZSgwLCAwLCA4MDAs
IDYwMCkpOworICAgIH0KKworICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlUGFnZU92ZXJsYXlSZWY+
IF9idW5kbGVQYWdlT3ZlcmxheTsKKyAgICBXS1JldGFpblB0cjxXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmPiBfcmFuZ2VIYW5kbGU7Cit9OworCitzdGF0aWMgSW5qZWN0ZWRCdW5kbGVUZXN0OjpSZWdp
c3RlcjxBY3Rpb25NZW51VGVzdD4gcmVnaXN0cmFyKCJBY3Rpb25NZW51VGVzdCIpOworCit9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9QbGF0
Zm9ybVdlYlZpZXdNYWMubW0KaW5kZXggZDYwODE5OTllMzdlMzMyMjc0ZjUwZGVjMjYyN2YzZWFl
YjM2MTNmMi4uMTFlYzI3MzY4YzBmMDE1YWNiOTIyNzA5OTVkNDEyMDRkYzhjYjBiMCAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQpAQCAtNzUsNiAr
NzUsMjAgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tQYWdlUmVmIHJlbGF0
ZWRQYWdlKQogICAgIFttX3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwogfQogCitQ
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhQbGF0Zm9ybVdLVmlldyB3a1ZpZXcpCit7
CisgICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKTsKKyAgICBtX3Zp
ZXcgPSBbd2tWaWV3IHJldGFpbl07CisKKyAgICBOU1JlY3Qgd2luZG93UmVjdCA9IE5TT2Zmc2V0
UmVjdChyZWN0LCAtMTAwMDAsIFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVj
dEF0SW5kZXg6MF0gZnJhbWVdLnNpemUuaGVpZ2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEwMDAw
KTsKKyAgICBtX3dpbmRvdyA9IFtbQWN0aXZlT2Zmc2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0
aENvbnRlbnRSZWN0OndpbmRvd1JlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sg
YmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOllFU107CisgICAgW21fd2luZG93
IHNldENvbG9yU3BhY2U6W1tOU1NjcmVlbiBtYWluU2NyZWVuXSBjb2xvclNwYWNlXV07CisgICAg
W1ttX3dpbmRvdyBjb250ZW50Vmlld10gYWRkU3VidmlldzptX3ZpZXddOworICAgIFttX3dpbmRv
dyBvcmRlckJhY2s6bmlsXTsKKyAgICBbbV93aW5kb3cgc2V0QXV0b2Rpc3BsYXk6Tk9dOworICAg
IFttX3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworfQorCiBQbGF0Zm9ybVdlYlZp
ZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewogICAgIFttX3dpbmRvdyBjbG9zZV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242561</attachid>
            <date>2014-12-04 02:28:49 -0800</date>
            <delta_ts>2014-12-05 11:43:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139156-20141204022921.patch</filename>
            <type>text/plain</type>
            <size>60401</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2Nzc5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGY4OTllYWRkNzkxZGYzOTNlYjI1YTU0MWNhOGE1MTkw
YzQ0ZWY5Mi4uNmU2Yzc4ZmZhYmUyODBjMDYyNmViZTkzZmRkYjFjMzUwMjFjYTVhZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1
IEBACisyMDE0LTEyLTA0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhY3Rpb24gbWVudSB0ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5MTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5o
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToK
KyAgICAgICAgQWRkIGEgbWVjaGFuaXNtIGFsbG93aW5nIHRlc3RzIHRvIHByb3ZpZGUgdGhlaXIg
b3duIFdLVmlldyBzdWJjbGFzcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9hY3Rpb24tbWVudS10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICBB
ZGQgYSBmaWxlIHdpdGggbG90cyBvZiBtZW51IHRhcmdldHMuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVzLm1tOiBBZGRlZC4KKyAgICAgICAg
KC1bQWN0aW9uTWVudXNUZXN0V0tWaWV3IF9hY3Rpb25NZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0
OndpdGhUeXBlOmRlZmF1bHRBY3Rpb25NZW51SXRlbXM6dXNlckRhdGE6XSk6CisgICAgICAgICgt
W0FjdGlvbk1lbnVzVGVzdFdLVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50OnByZU1lbnVOZWVk
c1VwZGF0ZUhhbmRsZXI6cHJlV2lsbE9wZW5NZW51SGFuZGxlcjpwcmVEaWRDbG9zZU1lbnVIYW5k
bGVyOl0pOgorICAgICAgICAoLVtBY3Rpb25NZW51c1Rlc3RXS1ZpZXcgcnVuTWVudVNlcXVlbmNl
QXRQb2ludDpwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl0pOgorICAgICAgICBSdW4gdGhyb3VnaCB0
aGUgbm9ybWFsIHNlcXVlbmNlIG9mIGNhbGxiYWNrcywgcmVjb3JkaW5nIHdoYXQgaXRlbXMgYW5k
IHR5cGUgd2VyZSByZXR1cm5lZCwgYW5kIGdpdmUgY2xpZW50cyBhIGNoYW5jZSB0byBkbyB3b3Jr
IGF0IHZhcmlvdXMgcG9pbnRzIGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgICgtW0FjdGlvbk1l
bnVzVGVzdFdLVmlldyBfc2V0T3ZlcnJpZGVBY3Rpb25NZW51SXRlbXM6XSk6CisKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZUNhbGxiYWNrKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRpZEZpbmlzaERvd25sb2FkQ2FsbGJhY2spOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6ZGlkQ3JlYXRlRG93bmxvYWREZXN0aW5hdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgV2F0Y2ggZG93bmxvYWRzIGFuZCBlbnN1cmUgdGhhdCB0aGV5IG1hdGNoIHRoZSBjb250ZW50
IHdlIGV4cGVjdC4KKworICAgICAgICAoVGVzdFdlYktpdEFQSTo6d2F0Y2hQYXN0ZWJvYXJkRm9y
U3RyaW5nKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OndhdGNoUGFzdGVib2FyZEZvckltYWdl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRl
eHQ6OkphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRleHQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SmF2YVNjcmlwdEJvb2xDYWxsYmFja0NvbnRleHQ6OkphdmFTY3JpcHRCb29sQ2FsbGJh
Y2tDb250ZXh0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmphdmFTY3JpcHRTdHJpbmdDYWxs
YmFjayk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpqYXZhU2NyaXB0Qm9vbENhbGxiYWNrKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nU3RyaW5nKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nQm9vbCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjp3YXRjaEVkaXRhYmxlQXJlYUZvclN0cmluZyk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp3YWl0Rm9yVmlkZW9SZWFkeSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpyZXRyaWV2ZVNlbGVjdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpyZXRy
aWV2ZVNlbGVjdGlvbkluRWxlbWVudCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpwZXJmb3Jt
TWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZW5z
dXJlTWVudUl0ZW1BdEluZGV4T2ZUeXBlSXNEaXNhYmxlZCk6CisgICAgICAgIEFkZCBtYW55IGhl
bHBlcnMgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgdG8gbWFrZSBhc3luY2hyb25vdXMgdGhpbmdz
IHN5bmNocm9ub3VzLgorCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp3aW5kb3dQb2ludEZvclRh
cmdldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjppbnNldDgpOgorICAgICAgICBIYXJkLWNv
ZGUgcG9pbnRzIGluIGFjdGlvbi1tZW51LXRhcmdldHMuaHRtbCBmb3IgaGl0IHRlc3RpbmcuCisK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBBZGQgYSBzdWl0ZSBvZiB0
ZXN0cyBmb3IgV2ViS2l0MiBhY3Rpb24gbWVudXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVzQnVuZGxlLm1tOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmNyZWF0ZUFjdGlvbkNvbnRleHRGb3JQaG9uZU51bWJlcik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpBY3Rpb25NZW51VGVzdDo6QWN0aW9uTWVudVRlc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6QWN0aW9uTWVudVRlc3Q6OnByZXBhcmVGb3JBY3Rpb25NZW51
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkFjdGlvbk1lbnVUZXN0OjphY3Rpb25Db250ZXh0
Rm9yUmVzdWx0QXRQb2ludCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpBY3Rpb25NZW51VGVz
dDo6ZHJhd1JlY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6QWN0aW9uTWVudVRlc3Q6OmRp
ZENyZWF0ZVBhZ2UpOgorICAgICAgICBBZGQgYSBidW5kbGUgd2l0aCBhIFBhZ2VPdmVybGF5IGFu
ZCBhIGFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50IG92ZXJyaWRlLAorICAgICAgICBzbyB0
aGF0IHdlIGNhbiB0ZXN0IHRoYXQgaW5mcmFzdHJ1Y3R1cmUuCisKIDIwMTQtMTItMDMgIEpvYW5t
YXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFYOiBbQVRLXSBJbmxp
bmUgdGV4dCBlbGVtZW50cyB3aXRoIGFjY2Vzc2libGUgb2JqZWN0IGF0dHJpYnV0ZXMgYW5kL29y
IGV2ZW50IGhhbmRsZXJzIGFyZSBub3QgZXhwb3NlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1X
ZWJWaWV3LmgKaW5kZXggMGUyZTAwNjhjZGE1NmI1NmQ0NmEwNjQ1ZWQ2NjAwMjk4MWQ5OTY2YS4u
ZWRhMjQ3ZDk2MzJkZTMyMzQ1NjU4NjAxMzc4MjRmNTE0YmJkMTFmNiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0dlb21ldHJ5Lmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNs
dWRlIDxvYmpjL29iamMuaD4KKyNlbmRpZgorCiAjaWZkZWYgX19BUFBMRV9fCiAjaWZkZWYgX19P
QkpDX18KIEBjbGFzcyBXS1ZpZXc7CkBAIC01NCw2ICs1OCw5IEBAIGNsYXNzIFBsYXRmb3JtV2Vi
VmlldyB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJl
ZiwgV0tQYWdlR3JvdXBSZWYgPSAwKTsKICAgICBleHBsaWNpdCBQbGF0Zm9ybVdlYlZpZXcoV0tQ
YWdlUmVmIHJlbGF0ZWRQYWdlKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgZXhwbGljaXQgUGxh
dGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIENsYXNzIHdrVmlld1N1
YmNsYXNzKTsKKyNlbmRpZgogICAgIH5QbGF0Zm9ybVdlYlZpZXcoKTsKIAogICAgIFdLUGFnZVJl
ZiBwYWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDViM2QzNjYyNTZjNDI0
ZTU3OTU2MTkwODgwNjZiNmI1ZTFhNjNjNmUuLjAyM2NiNzgzZDBmMGVjNzllMmRhYjk0YTEzYzg4
ZDIxOTRhZGYwMzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02Miw2ICs2Miw5IEBACiAJ
CTI5QUI4QUExMTY0QzczNTgwMEQ0OUJFQyAvKiBDdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBQjhBOUYxNjRDNzM1
ODAwRDQ5QkVDIC8qIEN1c3RvbVByb3RvY29sc1Rlc3QubW0gKi87IH07CiAJCTI5QUI4QUE0MTY0
QzdBOTMwMEQ0OUJFQyAvKiBUZXN0QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBQjhBQTIxNjRDN0E5
MzAwRDQ5QkVDIC8qIFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gKi87IH07CiAJ
CTJENjQwQjU1MTc4NzVERkYwMEJGQUY5OSAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENjQwQjU0MTc4
NzVERkYwMEJGQUY5OSAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCAqLzsgfTsKKwkJMkQ5
NTBGQkMxQTIyMTdEMDAwMDEyNDM0IC8qIEFjdGlvbk1lbnVzLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5NTBGQkExQTIyMTdEMDAwMDEyNDM0IC8q
IEFjdGlvbk1lbnVzLm1tICovOyB9OworCQkyRDk1MEZCRTFBMjIxN0QzMDAwMTI0MzQgLyogQWN0
aW9uTWVudXNCdW5kbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDk1MEZCQjFBMjIxN0QwMDAwMTI0MzQgLyogQWN0aW9uTWVudXNCdW5kbGUubW0g
Ki87IH07CisJCTJEOTUwRkMwMUEyMzBDM0EwMDAxMjQzNCAvKiBhY3Rpb24tbWVudS10YXJnZXRz
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ5NTBGQkYxQTIzMEMxRTAwMDEyNDM0IC8qIGFjdGlvbi1tZW51LXRhcmdldHMuaHRtbCAq
LzsgfTsKIAkJMkREN0QzQUExNzgyMDVEMDAwMjZFMUUzIC8qIFJlc2l6ZVJldmVyc2VQYWdpbmF0
ZWRXZWJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJERDdEM0E5MTc4MjA1RDAwMDI2RTFFMyAvKiBSZXNpemVSZXZlcnNlUGFnaW5hdGVkV2Vi
Vmlldy5jcHAgKi87IH07CiAJCTJERDdEM0FGMTc4MjI3QjMwMDI2RTFFMyAvKiBsb3RzLW9mLXRl
eHQtdmVydGljYWwtbHIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREQ3RDNBRTE3ODIyN0FDMDAyNkUxRTMgLyogbG90cy1vZi10ZXh0
LXZlcnRpY2FsLWxyLmh0bWwgKi87IH07CiAJCTJFNzc2NUNEMTZDNEQ4MEEwMEJBMkJCMSAvKiBt
YWluSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU3NzY1Q0MxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gKi87IH07CkBAIC0zNDAsNiAr
MzQzLDcgQEAKIAkJCQlCQ0JEMzczNzEyNUFCQkVCMDBEMkMyOUYgLyogaWNvbi5wbmcgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMzc4RTY0NzkxNjMyNzA3NDAwQjZDNjc2IC8qIGxpbmstd2l0
aC10aXRsZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkzNjEwMDI5MTREQzk1QTcw
MDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJ
CQkyRDk1MEZDMDFBMjMwQzNBMDAwMTI0MzQgLyogYWN0aW9uLW1lbnUtdGFyZ2V0cy5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkzQUY0RUQxMTUwNkYxMzAwMDdGRDU3RSAvKiBsb3Rz
LW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTkzMEFENDAyMTUwNjk4
RDAwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJ
CQkyREQ3RDNBRjE3ODIyN0IzMDAyNkUxRTMgLyogbG90cy1vZi10ZXh0LXZlcnRpY2FsLWxyLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC00MjIsNiArNDI2LDkgQEAKIAkJMjlBQjhBQTIx
NjRDN0E5MzAwRDQ5QkVDIC8qIFRlc3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0QnJvd3NpbmdDb250ZXh0
TG9hZERlbGVnYXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUFCOEFBMzE2
NEM3QTkzMDBENDlCRUMgLyogVGVzdEJyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0QnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENjQwQjU0MTc4NzVERkYwMEJG
QUY5OSAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbFBpbm5pbmdCZWhhdmlvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyRDk1MEZCQTFBMjIxN0QwMDAwMTI0MzQgLyogQWN0aW9uTWVudXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY3Rpb25NZW51cy5t
bTsgcGF0aCA9IFdlYktpdDJPYmpDL0FjdGlvbk1lbnVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRDk1MEZCQjFBMjIxN0QwMDAwMTI0MzQgLyogQWN0aW9uTWVudXNCdW5kbGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY3Rpb25NZW51c0J1
bmRsZS5tbTsgcGF0aCA9IFdlYktpdDJPYmpDL0FjdGlvbk1lbnVzQnVuZGxlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRDk1MEZCRjFBMjMwQzFFMDAwMTI0MzQgLyogYWN0aW9u
LW1lbnUtdGFyZ2V0cy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImFjdGlvbi1t
ZW51LXRhcmdldHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERDdEM0E5
MTc4MjA1RDAwMDI2RTFFMyAvKiBSZXNpemVSZXZlcnNlUGFnaW5hdGVkV2ViVmlldy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNpemVSZXZlcnNlUGFnaW5hdGVk
V2ViVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERDdEM0FFMTc4MjI3
QUMwMDI2RTFFMyAvKiBsb3RzLW9mLXRleHQtdmVydGljYWwtbHIuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJs
b3RzLW9mLXRleHQtdmVydGljYWwtbHIuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJFNzc2NUNDMTZDNEQ4MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbWFpbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTgwNyw2ICs4MTQsOCBAQAogCQlCQzNDNEM2RjE0NTc1QjFEMDAyNUZCNjIg
LyogV2ViS2l0MiBPYmplY3RpdmUtQyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMkQ5NTBGQkExQTIyMTdEMDAwMDEyNDM0IC8qIEFjdGlvbk1lbnVzLm1t
ICovLAorCQkJCTJEOTUwRkJCMUEyMjE3RDAwMDAxMjQzNCAvKiBBY3Rpb25NZW51c0J1bmRsZS5t
bSAqLywKIAkJCQkyOTcyMzRCMjE3M0FEMDQ4MDA5ODM2MDEgLyogQ3VzdG9tUHJvdG9jb2xzSW52
YWxpZFNjaGVtZS5tbSAqLywKIAkJCQkyOTcyMzRCNTE3M0FGQUM3MDA5ODM2MDEgLyogQ3VzdG9t
UHJvdG9jb2xzSW52YWxpZFNjaGVtZV9CdW5kbGUuY3BwICovLAogCQkJCTI5MEY0Mjc2MTcyQTIz
MkMwMDkzOUZGMCAvKiBDdXN0b21Qcm90b2NvbHNTeW5jWEhSVGVzdC5tbSAqLywKQEAgLTk4NSw2
ICs5OTQsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNEE0MTBGNEQxOUFGN0JFRjAwMkVCQUI1
IC8qIGdldFVzZXJNZWRpYS5odG1sICovLAogCQkJCUMwNDVGOTQ2MTM4NUMyRjgwMEMwRjNDRCAv
KiAxOC1jaGFyYWN0ZXJzLmh0bWwgKi8sCisJCQkJMkQ5NTBGQkYxQTIzMEMxRTAwMDEyNDM0IC8q
IGFjdGlvbi1tZW51LXRhcmdldHMuaHRtbCAqLywKIAkJCQlGNkI3QkU5NjE3NDY5QjdFMDA4QTM0
NDUgLyogYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCAqLywKIAkJCQk3NkUxODJERTE1NDc1
QTgzMDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLywKIAkJCQkxQTUwQUEx
RjFBMkE0RUE1MDBGNEMzNDUgLyogY2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCAq
LywKQEAgLTEzMzQsNiArMTM0NCw3IEBACiAJCQkJMTQ0NjQwMTMxNjdBODMwNTAwMEJEMjE4IC8q
IExheW91dFVuaXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ2NDBCNTUxNzg3NURGRjAwQkZB
Rjk5IC8qIFNjcm9sbFBpbm5pbmdCZWhhdmlvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYz
MDBCMTgxNjc1NUNEOTAwNjY4ODZEIC8qIExpc3RIYXNoU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTJEOTUwRkJDMUEyMjE3RDAwMDAxMjQzNCAvKiBBY3Rpb25NZW51cy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUExQTRGRTVGMThERDNEQjcwMEI1RUE4QSAvKiBEb3dubG9hZC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUM5NTUwMUJGMTlBRDJGQUYwMDQ5QkUzRSAvKiBQcmVmZXJlbmNlcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUyQ0I0NzQxMTQ0OEZCOTMwMDg3Mzk5NSAvKiBMb2FkQWx0ZXJu
YXRlSFRNTFN0cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
NDc2LDYgKzE0ODcsNyBAQAogCQkJCUY2QjdCRTk1MTc0NjkyMTIwMDhBMzQ0NSAvKiBEaWRBc3Nv
Y2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwQkQ2NjlG
MTMxRDNDRkYwMEUxOEYyQSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyRG9lc250RmlyZUVhcmx5X0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUZDRjdBMTE1MzRCMkEwMDAxMDQ0OTEgLyog
U2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW1fQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTJEOTUwRkJFMUEyMjE3RDMwMDAxMjQzNCAvKiBBY3Rpb25NZW51c0J1bmRsZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDMjJEMzE5MTREQzY4QjkwMEZGQjFERCAvKiBVc2VyTWVzc2FnZV9C
dW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTIwQkNGNEMxNDFFQjA5RTAwOTM3RUE4IC8q
IFdlYkFyY2hpdmVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2RTE4MkREMTU0NzU2
OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9hY3Rpb24t
bWVudS10YXJnZXRzLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvYWN0
aW9uLW1lbnUtdGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0MTgyZGU2NDc0NjJlZDFiNDJiN2Zm
OGIxMGY0ZWMzZmRhMzlkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvYWN0aW9uLW1lbnUtdGFyZ2V0cy5odG1sCkBAIC0wLDAgKzEsMTE0IEBA
Cis8c3R5bGU+CitkaXYgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMTk1
cHg7IGhlaWdodDogNDVweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJvcmRlcjogMXB4
IHNvbGlkIGJsYWNrOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGVkaXRhYmxl
QXJlYVN0cmluZyhuYW1lKSB7CisgICAgaWYgKG5hbWUuaW5kZXhPZigidGV4dGFyZWEiKSA9PT0g
MCB8fCBuYW1lLmluZGV4T2YoImlucHV0IikgPT09IDApCisgICAgICAgIHJldHVybiBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChuYW1lKS52YWx1ZTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQobmFtZSkuaW5uZXJUZXh0OworfQorCitmdW5jdGlvbiBzdHJpbmdpZnlTZWxlY3Rp
b24oKSB7CisgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICBpZiAoc2Vs
LnJhbmdlQ291bnQgPT0gMCB8fCBzZWwuZ2V0UmFuZ2VBdCgwKS5jb2xsYXBzZWQpCisgICAgICAg
IHJldHVybiAiPG5vIHNlbGVjdGlvbj4iOworICAgIHJldHVybiBzZWwudG9TdHJpbmcoKTsKK30K
KworZnVuY3Rpb24gc3RyaW5naWZ5U2VsZWN0aW9uSW5FbGVtZW50KG5hbWUpIHsKKyAgICB2YXIg
ZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsKKyAgICBjb25zb2xlLmxvZyhlbCk7
CisgICAgaWYgKGVsLnNlbGVjdGlvblN0YXJ0ID09IHVuZGVmaW5lZCkKKyAgICAgICAgcmV0dXJu
ICI8bm8gc2VsZWN0aW9uPiI7CisgICAgcmV0dXJuIGVsLnZhbHVlLnN1YnN0cmluZyhlbC5zZWxl
Y3Rpb25TdGFydCwgZWwuc2VsZWN0aW9uRW5kKTsKK30KKwordmFyIGZhaWxXYXNDYWxsZWQgPSBm
YWxzZTsKKworZnVuY3Rpb24gZmFpbCgpIHsKKyAgICBmYWlsV2FzQ2FsbGVkID0gdHJ1ZTsKK30K
KworZnVuY3Rpb24gd2FzRmFpbENhbGxlZCgpIHsKKyAgICByZXR1cm4gZmFpbFdhc0NhbGxlZDsK
K30KKworLy8gTVNFIHZpZGVvOgordmFyIHNvdXJjZTsKK3ZhciByZXF1ZXN0OwordmFyIHZpZGVv
SXNSZWFkeSA9IGZhbHNlOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgIHBs
YXlWaWRlbygpOworfQorCitmdW5jdGlvbiBwbGF5VmlkZW8oKQoreworICAgIHJlcXVlc3QgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1
ZmZlcic7CisgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCAndGVzdC1tc2UubXA0JywgdHJ1ZSk7Cisg
ICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZCk7CisgICAgcmVxdWVzdC5z
ZW5kKCk7Cit9CisKK2Z1bmN0aW9uIGxvYWQoZXZlbnQpCit7CisgICAgc291cmNlID0gbmV3IE1l
ZGlhU291cmNlKCk7CisgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3NvdXJjZW9wZW4nLCBz
b3VyY2VPcGVuKTsKKyAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXNl
LXZpZGVvJyk7CisgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpOwor
fQorCitmdW5jdGlvbiBzb3VyY2VPcGVuKGV2ZW50KQoreworICAgIHZhciBzb3VyY2VCdWZmZXIg
PSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCd2aWRlby9tcDQ7Y29kZWNzPSJhdmMxLjRENDAwMSxt
cDRhLjQwLjIiJyk7CisgICAgc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihyZXF1ZXN0LnJlc3Bv
bnNlKTsKKyAgICBzb3VyY2VCdWZmZXIuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlZW5kJywgdXBk
YXRlRW5kKTsKK30KKworZnVuY3Rpb24gdXBkYXRlRW5kKGV2ZW50KQoreworICAgIHZpZGVvSXNS
ZWFkeSA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIGlzVmlkZW9SZWFkeSgpCit7CisgICAgcmV0dXJu
IHZpZGVvSXNSZWFkeTsKK30KKworPC9zY3JpcHQ+CisKKzxkaXYgc3R5bGU9InRvcDogMHB4OyBs
ZWZ0OiAwcHg7Ij53b3JkPC9kaXY+PGJyLz4KKzxkaXYgc3R5bGU9InRvcDogMHB4OyBsZWZ0OiAy
MDBweDsiPk5ldyBZb3JrPC9kaXY+PGJyLz4KKworPGRpdiBzdHlsZT0idG9wOiA1MHB4OyBsZWZ0
OiAwcHg7Ij4xIEluZmluaXRlIExvb3AsIEN1cGVydGlubywgQ0EgOTUwMTQ8L2Rpdj48YnIvPgor
PGRpdiBzdHlsZT0idG9wOiA1MHB4OyBsZWZ0OiAyMDBweDsiPk1heSAxN3RoLCAyMDEyPC9kaXY+
PGJyLz4KKzxkaXYgc3R5bGU9InRvcDogNTBweDsgbGVmdDogNDAwcHg7Ij4oNDA4KSA5OTYtMTAx
MDwvZGl2Pjxici8+CisKKzxkaXYgaWQ9ImVkaXRhYmxlMSIgc3R5bGU9InRvcDogMTUwcHg7IGxl
ZnQ6IDBweDsiIGNvbnRlbnRlZGl0YWJsZT5lZGl0YWJsZSBlZGl0YWJsZSBlZGl0YWJsZSBlZGl0
YWJsZTwvZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDE1MHB4OyBsZWZ0OiAyMDBweDsiPjxp
bnB1dCBpZD0iaW5wdXQxIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iZWRpdGFibGUgZWRpdGFibGUgZWRp
dGFibGUgZWRpdGFibGUiPjwvaW5wdXQ+PC9kaXY+PGJyLz4KKzxkaXYgc3R5bGU9InRvcDogMTUw
cHg7IGxlZnQ6IDQwMHB4OyI+PHRleHRhcmVhIGlkPSJ0ZXh0YXJlYTEiPmVkaXRhYmxlIGVkaXRh
YmxlIGVkaXRhYmxlIGVkaXRhYmxlPC90ZXh0YXJlYT48L2Rpdj48YnIvPgorCis8ZGl2IGlkPSJl
ZGl0YWJsZTIiIHN0eWxlPSJ0b3A6IDIwMHB4OyBsZWZ0OiAwcHg7IiBjb250ZW50ZWRpdGFibGU+
TmV3IFlvcmsgc29tZSB3b3JkczwvZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDIwMHB4OyBs
ZWZ0OiAyMDBweDsiPjxpbnB1dCBpZD0iaW5wdXQyIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iTmV3IFlv
cmsgc29tZSB3b3JkcyI+PC9pbnB1dD48L2Rpdj48YnIvPgorPGRpdiBzdHlsZT0idG9wOiAyMDBw
eDsgbGVmdDogNDAwcHg7Ij48dGV4dGFyZWEgaWQ9InRleHRhcmVhMiI+TmV3IFlvcmsgc29tZSB3
b3JkczwvdGV4dGFyZWE+PC9kaXY+PGJyLz4KKworPGRpdiBzdHlsZT0idG9wOiAyNTBweDsgbGVm
dDogMHB4OyI+PGltZyBzcmM9Imljb24ucG5nIiBoZWlnaHQ9IjEwMCUiPjwvZGl2Pjxici8+Cis8
ZGl2IHN0eWxlPSJ0b3A6IDI1MHB4OyBsZWZ0OiAyMDBweDsiPjxhIGhyZWY9Imh0dHA6Ly9leGFt
cGxlLm9yZy8iPjxpbWcgc3JjPSJpY29uLnBuZyIgaGVpZ2h0PSIxMDAlIj48L2E+PC9kaXY+PGJy
Lz4KKworPGRpdiBzdHlsZT0idG9wOiAzMDBweDsgbGVmdDogMHB4OyB3aWR0aDogOTVweDsiPjxh
IGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZy8iPmh0dHA8L2E+PC9kaXY+PGJyLz4KKzxkaXYgc3R5
bGU9InRvcDogMzAwcHg7IGxlZnQ6IDEwMHB4OyB3aWR0aDogOTVweDsiPjxhIGhyZWY9ImZ0cDov
L2V4YW1wbGUub3JnLyI+ZnRwPC9hPjwvZGl2Pjxici8+Cis8ZGl2IHN0eWxlPSJ0b3A6IDMwMHB4
OyBsZWZ0OiAyMDBweDsgd2lkdGg6IDk1cHg7Ij48YSBocmVmPSJtYWlsdG86ZXhhbXBsZUBleGFt
cGxlLm9yZyI+bWFpbHRvIGxpbms8L2E+PC9kaXY+PGJyLz4KKzxkaXYgc3R5bGU9InRvcDogMzAw
cHg7IGxlZnQ6IDMwMHB4OyB3aWR0aDogOTVweDsiPjxhIGhyZWY9ImphdmFzY3JpcHQ6ZmFpbCgp
Ij5qYXZhc2NyaXB0IGxpbms8L2E+PC9kaXY+PGJyLz4KKworPGRpdiBzdHlsZT0idG9wOiAzNTBw
eDsgbGVmdDogMHB4OyI+PHZpZGVvIHNyYz0idGVzdC5tcDQiPjwvdmlkZW8+PC9kaXY+PGJyLz4K
KzxkaXYgc3R5bGU9InRvcDogMzUwcHg7IGxlZnQ6IDIwMHB4OyI+PHZpZGVvIGlkPSJtc2Utdmlk
ZW8iPjwvdmlkZW8+PC9kaXY+PGJyLz4KKworCis8ZGl2IHN0eWxlPSJ0b3A6IDBweDsgbGVmdDog
NzUwcHg7IGhlaWdodDogNjAwcHg7Ij5kYXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRl
Y3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBt
ZW51IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4
dCBkYXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEg
ZGV0ZWN0b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3Rv
cnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBtZW51
IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCBk
YXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0
ZWN0b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3RvcnMg
bWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBtZW51IHRl
eHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCBkYXRh
IGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVudSB0ZXh0IGRhdGEgZGV0ZWN0
b3JzIG1lbnUgdGV4dCBkYXRhIGRldGVjdG9ycyBtZW51IHRleHQgZGF0YSBkZXRlY3RvcnMgbWVu
dSB0ZXh0IGRhdGEgZGV0ZWN0b3JzIG1lbnUgdGV4dCA8L2Rpdj48YnIvPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyT2JqQy9BY3Rpb25NZW51cy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mk9iakMvQWN0aW9uTWVudXMubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2UyOTZkNDIxODk5NGE2ZGRjN2NlZTYxYjRhYWJjYmE0ZTZlM2U1YQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mk9iakMvQWN0aW9uTWVu
dXMubW0KQEAgLTAsMCArMSw3MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3QuaCIKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIlBsYXRmb3JtV2ViVmlldy5oIgorI2ltcG9ydCAiVGVzdEJyb3dzaW5nQ29udGV4dExvYWRE
ZWxlZ2F0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktp
dDIuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0FjdGlvbk1lbnVJdGVtVHlwZXMuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS0FjdGlvbk1lbnVUeXBlcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1ZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK3N0YXRpYyBib29sIGRpZEZpbmlzaExvYWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRp
ZEZpbmlzaERvd25sb2FkID0gZmFsc2U7CisKK0BpbnRlcmZhY2UgV0tWaWV3IChEZXRhaWxzKQor
CistICh2b2lkKXByZXBhcmVGb3JNZW51OihOU01lbnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVu
dCAqKWV2ZW50OworLSAodm9pZCl3aWxsT3Blbk1lbnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50
OihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKWRpZENsb3NlTWVudTooTlNNZW51ICopbWVudSB3
aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNNZW51ICopYWN0aW9uTWVudTsKKy0g
KHZvaWQpY29weTooaWQpc2VuZGVyOworCitAZW5kCisKK3N0cnVjdCBBY3Rpb25NZW51UmVzdWx0
IHsKKyAgICBXS1JldGFpblB0cjxXS0hpdFRlc3RSZXN1bHRSZWY+IGhpdFRlc3RSZXN1bHQ7Cisg
ICAgX1dLQWN0aW9uTWVudVR5cGUgdHlwZTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZGVmYXVs
dE1lbnVJdGVtczsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHVzZXJEYXRhOworfTsKKwor
QGludGVyZmFjZSBBY3Rpb25NZW51c1Rlc3RXS1ZpZXcgOiBXS1ZpZXcgeworICAgIEFjdGlvbk1l
bnVSZXN1bHQgX2FjdGlvbk1lbnVSZXN1bHQ7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9vdmVy
cmlkZUl0ZW1zOworICAgIEJPT0wgX3Nob3VsZEhhdmVVc2VyRGF0YTsKK30KKworQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRBY3Rpb25NZW51UmVzdWx0OikgQWN0aW9u
TWVudVJlc3VsdCBfYWN0aW9uTWVudVJlc3VsdDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
QWN0aW9uTWVudXNUZXN0V0tWaWV3CisKK0BzeW50aGVzaXplIF9hY3Rpb25NZW51UmVzdWx0PV9h
Y3Rpb25NZW51UmVzdWx0OworCistIChOU0FycmF5ICopX2FjdGlvbk1lbnVJdGVtc0ZvckhpdFRl
c3RSZXN1bHQ6KFdLSGl0VGVzdFJlc3VsdFJlZiloaXRUZXN0UmVzdWx0IHdpdGhUeXBlOihfV0tB
Y3Rpb25NZW51VHlwZSl0eXBlIGRlZmF1bHRBY3Rpb25NZW51SXRlbXM6KE5TQXJyYXkgKilkZWZh
dWx0TWVudUl0ZW1zIHVzZXJEYXRhOihXS1R5cGVSZWYpdXNlckRhdGEKK3sKKyAgICBpZiAodHlw
ZSAhPSBrV0tBY3Rpb25NZW51Tm9uZSkKKyAgICAgICAgRVhQRUNUX0dUKGRlZmF1bHRNZW51SXRl
bXMuY291bnQsIChOU1VJbnRlZ2VyKTApOworCisgICAgLy8gQ2xpZW50cyBzaG91bGQgYmUgYWJs
ZSB0byBwYXNzIHVzZXJEYXRhIGZyb20gdGhlIFdlYiB0byBVSSBwcm9jZXNzLCBiZXR3ZWVuCisg
ICAgLy8gdGhlIFdLQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50J3MgcHJlcGFyZUZvckFjdGlv
bk1lbnUsIGFuZCBoZXJlLgorICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzE3NTQ0NAorICAgIGlmIChfc2hvdWxkSGF2ZVVzZXJEYXRhKSB7CisgICAgICAgIEVYUEVDVF9O
T1RfTlVMTCh1c2VyRGF0YSk7CisgICAgICAgIEVYUEVDVF9FUShXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSwgV0tHZXRUeXBlSUQodXNlckRhdGEpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhhc0xpbmtLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJoYXNMaW5rVVJMIikpOworICAgICAgICBXS1R5cGVSZWYgaGFzTGlua1ZhbHVlID0gV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleSgoV0tEaWN0aW9uYXJ5UmVmKXVzZXJEYXRhLCBoYXNMaW5rS2V5
LmdldCgpKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGhhc0xpbmtWYWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUShXS0Jvb2xlYW5HZXRUeXBlSUQoKSwgV0tHZXRUeXBlSUQoaGFzTGlua1ZhbHVl
KSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBhYnNvbHV0ZUxpbmtVUkwgPSBhZG9w
dFdLKFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUxpbmtVUkwoaGl0VGVzdFJlc3VsdCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoISFhYnNvbHV0ZUxpbmtVUkwsIFdLQm9vbGVhbkdldFZhbHVlKChX
S0Jvb2xlYW5SZWYpaGFzTGlua1ZhbHVlKSk7CisgICAgfSBlbHNlCisgICAgICAgIEVYUEVDVF9O
VUxMKHVzZXJEYXRhKTsKKworICAgIF9hY3Rpb25NZW51UmVzdWx0LmhpdFRlc3RSZXN1bHQgPSBo
aXRUZXN0UmVzdWx0OworICAgIF9hY3Rpb25NZW51UmVzdWx0LnR5cGUgPSB0eXBlOworICAgIF9h
Y3Rpb25NZW51UmVzdWx0LmRlZmF1bHRNZW51SXRlbXMgPSBkZWZhdWx0TWVudUl0ZW1zOworICAg
IF9hY3Rpb25NZW51UmVzdWx0LnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgcmV0dXJuIF9vdmVy
cmlkZUl0ZW1zID8gX292ZXJyaWRlSXRlbXMuZ2V0KCkgOiBkZWZhdWx0TWVudUl0ZW1zOworfQor
CistICh2b2lkKXJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgcHJlRGlkQ2xv
c2VNZW51SGFuZGxlcjoodm9pZCheKSh2b2lkKSlwcmVEaWRDbG9zZU1lbnVIYW5kbGVyCit7Cisg
ICAgX19ibG9jayBib29sIGRpZEZpbmlzaFNlcXVlbmNlID0gZmFsc2U7CisKKyAgICBOU01lbnUg
KmFjdGlvbk1lbnUgPSBzZWxmLmFjdGlvbk1lbnU7CisgICAgUmV0YWluUHRyPE5TRXZlbnQ+IGV2
ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlRG93biBsb2NhdGlv
bjpwb2ludCBtb2RpZmllckZsYWdzOjAgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOnNlbGYud2lu
ZG93LndpbmRvd051bWJlciBjb250ZXh0OjAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJl
c3N1cmU6MF07CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCBeeworICAgICAgICBbc2VsZiBwcmVwYXJlRm9yTWVudTphY3Rpb25NZW51IHdpdGhFdmVudDpl
dmVudC5nZXQoKV07CisgICAgfSk7CisKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBfc2hvdWxkSGF2ZVVzZXJEYXRhID0gWUVTOworICAg
ICAgICBbW2FjdGlvbk1lbnUgZGVsZWdhdGVdIG1lbnVOZWVkc1VwZGF0ZTphY3Rpb25NZW51XTsK
KyAgICAgICAgX3Nob3VsZEhhdmVVc2VyRGF0YSA9IE5POworICAgIH0pOworCisgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgW3NlbGYgd2ls
bE9wZW5NZW51OmFjdGlvbk1lbnUgd2l0aEV2ZW50OmV2ZW50LmdldCgpXTsKKyAgICB9KTsKKwor
ICAgIHZvaWQgKF5jb3BpZWRQcmVEaWRDbG9zZU1lbnVIYW5kbGVyKSgpID0gQmxvY2tfY29weShw
cmVEaWRDbG9zZU1lbnVIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBjb3BpZWRQcmVEaWRDbG9zZU1lbnVIYW5kbGVyKCk7
CisgICAgICAgIEJsb2NrX3JlbGVhc2UoY29waWVkUHJlRGlkQ2xvc2VNZW51SGFuZGxlcik7Cisg
ICAgICAgIFtzZWxmIGRpZENsb3NlTWVudTphY3Rpb25NZW51IHdpdGhFdmVudDpldmVudC5nZXQo
KV07CisgICAgICAgIFtzZWxmIG1vdXNlRG93bjpldmVudC5nZXQoKV07CisgICAgICAgIGRpZEZp
bmlzaFNlcXVlbmNlID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZGlkRmluaXNoU2VxdWVuY2UpOworfQorCistICh2b2lkKV9zZXRPdmVycmlkZUFjdGlv
bk1lbnVJdGVtczooTlNBcnJheSAqKW92ZXJyaWRlSXRlbXMKK3sKKyAgICBfb3ZlcnJpZGVJdGVt
cyA9IG92ZXJyaWRlSXRlbXM7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
eworCitzdHJ1Y3QgQWN0aXZlRG93bmxvYWRDb250ZXh0IHsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gcGF0aDsKKyAgICBib29sIHNob3VsZENoZWNrRm9ySW1hZ2UgPSAwOworfTsKKwor
c3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lQ2FsbGJhY2soV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBkaWRGaW5pc2hMb2FkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZGlk
RmluaXNoRG93bmxvYWRDYWxsYmFjayhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJl
ZiBkb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBXS1N0cmluZ1JlZiB3
a0FjdGl2ZURvd25sb2FkUGF0aCA9ICgoQWN0aXZlRG93bmxvYWRDb250ZXh0KiljbGllbnRJbmZv
KS0+cGF0aC5nZXQoKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gV0tTdHJpbmdHZXRMZW5ndGgod2tB
Y3RpdmVEb3dubG9hZFBhdGgpICsgMTsKKyAgICBjaGFyICphY3RpdmVEb3dubG9hZFBhdGggPSAo
Y2hhciAqKWNhbGxvYygxLCBsZW5ndGgpOworICAgIFdLU3RyaW5nR2V0VVRGOENTdHJpbmcod2tB
Y3RpdmVEb3dubG9hZFBhdGgsIGFjdGl2ZURvd25sb2FkUGF0aCwgbGVuZ3RoKTsKKworICAgIGlm
ICgoKEFjdGl2ZURvd25sb2FkQ29udGV4dCopY2xpZW50SW5mbyktPnNob3VsZENoZWNrRm9ySW1h
Z2UpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlID0gYWRvcHROUyhbW05TSW1h
Z2UgYWxsb2NdIGluaXRXaXRoQ29udGVudHNPZkZpbGU6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOmFjdGl2ZURvd25sb2FkUGF0aF1dKTsKKworICAgICAgICBFWFBFQ1RfRVEoMjE1LCBb
aW1hZ2Ugc2l6ZV0ud2lkdGgpOworICAgICAgICBFWFBFQ1RfRVEoMTc0LCBbaW1hZ2Ugc2l6ZV0u
aGVpZ2h0KTsKKyAgICB9CisKKyAgICBkaWRGaW5pc2hEb3dubG9hZCA9IHRydWU7Cit9CisKK3N0
YXRpYyB2b2lkIGRpZENyZWF0ZURvd25sb2FkRGVzdGluYXRpb25DYWxsYmFjayhXS0NvbnRleHRS
ZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgV0tTdHJpbmdSZWYgcGF0aCwgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICAoKEFjdGl2ZURvd25sb2FkQ29udGV4dCopY2xp
ZW50SW5mbyktPnBhdGggPSBwYXRoOworfQorCitzdGF0aWMgTlNTdHJpbmcgKndhdGNoUGFzdGVi
b2FyZEZvclN0cmluZygpCit7CisgICAgW1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRd
IGNsZWFyQ29udGVudHNdOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgW1tOU1J1bkxv
b3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0
ZTpbTlNEYXRlIGRpc3RhbnRQYXN0XV07CisgICAgICAgIE5TU3RyaW5nICpwYXN0ZWJvYXJkU3Ry
aW5nID0gW1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIHN0cmluZ0ZvclR5cGU6TlNQ
YXN0ZWJvYXJkVHlwZVN0cmluZ107CisgICAgICAgIGlmIChwYXN0ZWJvYXJkU3RyaW5nKQorICAg
ICAgICAgICAgcmV0dXJuIHBhc3RlYm9hcmRTdHJpbmc7CisgICAgfQorfQorCitzdGF0aWMgTlNJ
bWFnZSAqd2F0Y2hQYXN0ZWJvYXJkRm9ySW1hZ2UoKQoreworICAgIFtbTlNQYXN0ZWJvYXJkIGdl
bmVyYWxQYXN0ZWJvYXJkXSBjbGVhckNvbnRlbnRzXTsKKworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIFtbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBydW5Nb2RlOk5TRGVmYXVsdFJ1bkxv
b3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBkaXN0YW50UGFzdF1dOworICAgICAgICBOU0FycmF5
ICpwYXN0ZWJvYXJkSXRlbXMgPSBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gcmVh
ZE9iamVjdHNGb3JDbGFzc2VzOkBbIFtOU0ltYWdlIGNsYXNzXSBdIG9wdGlvbnM6bmlsXTsKKyAg
ICAgICAgaWYgKHBhc3RlYm9hcmRJdGVtcyAmJiBwYXN0ZWJvYXJkSXRlbXMuY291bnQpCisgICAg
ICAgICAgICByZXR1cm4gcGFzdGVib2FyZEl0ZW1zLmxhc3RPYmplY3Q7CisgICAgfQorfQorCitz
dHJ1Y3QgSmF2YVNjcmlwdFN0cmluZ0NhbGxiYWNrQ29udGV4dCB7CisgICAgSmF2YVNjcmlwdFN0
cmluZ0NhbGxiYWNrQ29udGV4dCgpCisgICAgICAgIDogZGlkRmluaXNoKGZhbHNlKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGRpZEZpbmlzaDsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gYWN0dWFsU3RyaW5nOworfTsKKworc3RydWN0IEphdmFTY3JpcHRCb29sQ2FsbGJhY2tDb250
ZXh0IHsKKyAgICBKYXZhU2NyaXB0Qm9vbENhbGxiYWNrQ29udGV4dCgpCisgICAgICAgIDogZGlk
RmluaXNoKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGRpZEZpbmlzaDsKKyAgICBi
b29sIHZhbHVlOworfTsKKworc3RhdGljIHZvaWQgamF2YVNjcmlwdFN0cmluZ0NhbGxiYWNrKFdL
U2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmIHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgV0tF
cnJvclJlZiBlcnJvciwgdm9pZCogY3R4KQoreworICAgIEVYUEVDVF9OT1RfTlVMTChyZXN1bHRT
ZXJpYWxpemVkU2NyaXB0VmFsdWUpOworCisgICAgSmF2YVNjcmlwdFN0cmluZ0NhbGxiYWNrQ29u
dGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEphdmFTY3JpcHRTdHJpbmdDYWxsYmFja0NvbnRl
eHQqPihjdHgpOworCisgICAgSlNHbG9iYWxDb250ZXh0UmVmIHNjcmlwdENvbnRleHQgPSBKU0ds
b2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgRVhQRUNUX05PVF9OVUxMKHNjcmlwdENvbnRleHQp
OworCisgICAgSlNWYWx1ZVJlZiBzY3JpcHRWYWx1ZSA9IFdLU2VyaWFsaXplZFNjcmlwdFZhbHVl
RGVzZXJpYWxpemUocmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBzY3JpcHRDb250ZXh0LCAw
KTsKKyAgICBFWFBFQ1RfTk9UX05VTEwoc2NyaXB0VmFsdWUpOworCisgICAgY29udGV4dC0+YWN0
dWFsU3RyaW5nLmFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoc2NyaXB0Q29udGV4dCwgc2NyaXB0
VmFsdWUsIDApKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwoY29udGV4dC0+YWN0dWFsU3RyaW5nLmdl
dCgpKTsKKworICAgIGNvbnRleHQtPmRpZEZpbmlzaCA9IHRydWU7CisgICAgCisgICAgSlNHbG9i
YWxDb250ZXh0UmVsZWFzZShzY3JpcHRDb250ZXh0KTsKKyAgICAKKyAgICBFWFBFQ1RfTlVMTChl
cnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIGphdmFTY3JpcHRCb29sQ2FsbGJhY2soV0tTZXJpYWxp
emVkU2NyaXB0VmFsdWVSZWYgcmVzdWx0U2VyaWFsaXplZFNjcmlwdFZhbHVlLCBXS0Vycm9yUmVm
IGVycm9yLCB2b2lkKiBjdHgpCit7CisgICAgRVhQRUNUX05PVF9OVUxMKHJlc3VsdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSk7CisKKyAgICBKYXZhU2NyaXB0Qm9vbENhbGxiYWNrQ29udGV4dCogY29u
dGV4dCA9IHN0YXRpY19jYXN0PEphdmFTY3JpcHRCb29sQ2FsbGJhY2tDb250ZXh0Kj4oY3R4KTsK
KworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0
Q3JlYXRlKDApOworICAgIEVYUEVDVF9OT1RfTlVMTChzY3JpcHRDb250ZXh0KTsKKworICAgIEpT
VmFsdWVSZWYgc2NyaXB0VmFsdWUgPSBXS1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZURlc2VyaWFsaXpl
KHJlc3VsdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgc2NyaXB0Q29udGV4dCwgMCk7CisgICAgRVhQ
RUNUX05PVF9OVUxMKHNjcmlwdFZhbHVlKTsKKworICAgIEVYUEVDVF9UUlVFKEpTVmFsdWVJc0Jv
b2xlYW4oc2NyaXB0Q29udGV4dCwgc2NyaXB0VmFsdWUpKTsKKworICAgIGNvbnRleHQtPnZhbHVl
ID0gSlNWYWx1ZVRvQm9vbGVhbihzY3JpcHRDb250ZXh0LCBzY3JpcHRWYWx1ZSk7CisgICAgY29u
dGV4dC0+ZGlkRmluaXNoID0gdHJ1ZTsKKyAgICAKKyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNl
KHNjcmlwdENvbnRleHQpOworICAgIAorICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKK30KKworc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nU3RyaW5n
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyKiBqcykKK3sKKyAgICBKYXZhU2NyaXB0U3RyaW5n
Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQ7CisgICAgV0tQYWdlUnVuSmF2YVNjcmlwdEluTWFpbkZy
YW1lKHBhZ2UsIFV0aWw6OnRvV0soanMpLmdldCgpLCAmY29udGV4dCwgamF2YVNjcmlwdFN0cmlu
Z0NhbGxiYWNrKTsKKyAgICBVdGlsOjpydW4oJmNvbnRleHQuZGlkRmluaXNoKTsKKworICAgIHNp
emVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGNvbnRl
eHQuYWN0dWFsU3RyaW5nLmdldCgpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlx
dWU8Y2hhcltdPihidWZmZXJTaXplKTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKGNvbnRl
eHQuYWN0dWFsU3RyaW5nLmdldCgpLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJl
dHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBib29sIGNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nQm9v
bChXS1BhZ2VSZWYgcGFnZSwgY29uc3QgY2hhcioganMpCit7CisgICAgSmF2YVNjcmlwdEJvb2xD
YWxsYmFja0NvbnRleHQgY29udGV4dDsKKyAgICBXS1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJh
bWUocGFnZSwgVXRpbDo6dG9XSyhqcykuZ2V0KCksICZjb250ZXh0LCBqYXZhU2NyaXB0Qm9vbENh
bGxiYWNrKTsKKyAgICBVdGlsOjpydW4oJmNvbnRleHQuZGlkRmluaXNoKTsKKyAgICByZXR1cm4g
Y29udGV4dC52YWx1ZTsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hFZGl0YWJsZUFyZWFGb3JTdHJp
bmcoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IGNoYXIgKmFyZWFOYW1lLCBjb25zdCBjaGFyICp3YXRj
aFN0cmluZykKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBbW05TUnVuTG9vcCBjdXJy
ZW50UnVuTG9vcF0gcnVuTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZSBiZWZvcmVEYXRlOltOU0Rh
dGUgZGlzdGFudFBhc3RdXTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBjYWxsSmF2YVNjcmlwdFJl
dHVybmluZ1N0cmluZyhwYWdlLCBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJlZGl0YWJs
ZUFyZWFTdHJpbmcoJyVzJykiLCBhcmVhTmFtZV0gVVRGOFN0cmluZ10pOworCisgICAgICAgIGlm
ICghc3RyY21wKGJ1ZmZlci5nZXQoKSwgd2F0Y2hTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2FpdEZvclZpZGVvUmVhZHkoV0tQYWdlUmVmIHBh
Z2UpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1
bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRp
c3RhbnRQYXN0XV07CisgICAgICAgIGlmIChjYWxsSmF2YVNjcmlwdFJldHVybmluZ0Jvb2wocGFn
ZSwgImlzVmlkZW9SZWFkeSgpIikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCitz
dGF0aWMgTlNTdHJpbmcgKnJldHJpZXZlU2VsZWN0aW9uKFdLUGFnZVJlZiBwYWdlKQoreworICAg
IGF1dG8gYnVmZmVyID0gY2FsbEphdmFTY3JpcHRSZXR1cm5pbmdTdHJpbmcocGFnZSwgInN0cmlu
Z2lmeVNlbGVjdGlvbigpIik7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpidWZmZXIuZ2V0KCldOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnJldHJpZXZlU2VsZWN0
aW9uSW5FbGVtZW50KFdLUGFnZVJlZiBwYWdlLCBjb25zdCBjaGFyICphcmVhTmFtZSkKK3sKKyAg
ICBhdXRvIGJ1ZmZlciA9IGNhbGxKYXZhU2NyaXB0UmV0dXJuaW5nU3RyaW5nKHBhZ2UsIFtbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInN0cmluZ2lmeVNlbGVjdGlvbkluRWxlbWVudCgnJXMn
KSIsIGFyZWFOYW1lXSBVVEY4U3RyaW5nXSk7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzpidWZmZXIuZ2V0KCldOworfQorCitzdGF0aWMgdm9pZCBwZXJmb3JtTWVu
dUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoTlNNZW51ICptZW51LCBOU0ludGVnZXIgaW5kZXgsIGlu
dCB0eXBlKQoreworICAgIEVYUEVDVF9MVChpbmRleCwgbWVudS5udW1iZXJPZkl0ZW1zKTsKKyAg
ICBpZiAoaW5kZXggPj0gbWVudS5udW1iZXJPZkl0ZW1zKQorICAgICAgICByZXR1cm47CisgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSBbbWVudSBpdGVtQXRJbmRleDppbmRleF07CisgICAgRVhQ
RUNUX05PVF9OVUxMKG1lbnVJdGVtKTsKKyAgICBFWFBFQ1RfRVEodHlwZSwgW21lbnVJdGVtIHRh
Z10pOworICAgIEVYUEVDVF9UUlVFKFttZW51SXRlbSBpc0VuYWJsZWRdKTsKKyAgICBbbWVudUl0
ZW0udGFyZ2V0IHBlcmZvcm1TZWxlY3RvcjptZW51SXRlbS5hY3Rpb24gd2l0aE9iamVjdDptZW51
SXRlbSBhZnRlckRlbGF5OjBdOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVNZW51SXRlbUF0SW5k
ZXhPZlR5cGVJc0Rpc2FibGVkKE5TTWVudSAqbWVudSwgTlNJbnRlZ2VyIGluZGV4LCBpbnQgdHlw
ZSkKK3sKKyAgICBFWFBFQ1RfTFQoaW5kZXgsIG1lbnUubnVtYmVyT2ZJdGVtcyk7CisgICAgaWYg
KGluZGV4ID49IG1lbnUubnVtYmVyT2ZJdGVtcykKKyAgICAgICAgcmV0dXJuOworICAgIE5TTWVu
dUl0ZW0gKm1lbnVJdGVtID0gW21lbnUgaXRlbUF0SW5kZXg6aW5kZXhdOworICAgIEVYUEVDVF9O
T1RfTlVMTChtZW51SXRlbSk7CisgICAgRVhQRUNUX0VRKHR5cGUsIFttZW51SXRlbSB0YWddKTsK
KyAgICBFWFBFQ1RfRkFMU0UoW21lbnVJdGVtIGlzRW5hYmxlZF0pOworfQorCitlbnVtIGNsYXNz
IFRhcmdldFR5cGUgeworICAgIFdvcmQsCisgICAgUGhyYXNlLAorICAgIEFkZHJlc3MsCisgICAg
RGF0ZSwKKyAgICBQaG9uZU51bWJlciwKKyAgICBDb250ZW50RWRpdGFibGVXb3JkcywKKyAgICBD
b250ZW50RWRpdGFibGVQaHJhc2UsCisgICAgVGV4dElucHV0V29yZHMsCisgICAgVGV4dElucHV0
UGhyYXNlLAorICAgIFRleHRBcmVhV29yZHMsCisgICAgVGV4dEFyZWFQaHJhc2UsCisgICAgSW1h
Z2UsCisgICAgSW1hZ2VBc0xpbmssCisgICAgSFRUUExpbmssCisgICAgRlRQTGluaywKKyAgICBN
YWlsdG9MaW5rLAorICAgIEphdmFTY3JpcHRMaW5rLAorICAgIFBhZ2VPdmVybGF5LAorICAgIFBh
Z2VXaGl0ZXNwYWNlLAorICAgIFZpZGVvLAorICAgIE1TRVZpZGVvLAorfTsKKworc3RhdGljIE5T
UG9pbnQgd2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZSB0YXJnZXQpCit7CisgICAgTlNQ
b2ludCBjb250ZW50UG9pbnQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIFRhcmdl
dFR5cGU6OldvcmQ6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDAsIDApOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlBocmFzZToKKyAgICAgICAgY29u
dGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUYXJnZXRUeXBlOjpBZGRyZXNzOgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2lu
dCgwLCA1MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6RGF0ZToKKyAg
ICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCA1MCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVGFyZ2V0VHlwZTo6UGhvbmVOdW1iZXI6CisgICAgICAgIGNvbnRlbnRQb2lu
dCA9IE5TTWFrZVBvaW50KDQwMCwgNTApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdl
dFR5cGU6OkNvbnRlbnRFZGl0YWJsZVdvcmRzOgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01h
a2VQb2ludCgwLCAxNTApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OkNv
bnRlbnRFZGl0YWJsZVBocmFzZToKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQo
MCwgMjAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJnZXRUeXBlOjpUZXh0SW5wdXRX
b3JkczoKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCAxNTApOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlRleHRJbnB1dFBocmFzZToKKyAgICAg
ICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMjAwLCAyMDApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhcmdldFR5cGU6OlRleHRBcmVhV29yZHM6CisgICAgICAgIGNvbnRlbnRQb2lu
dCA9IE5TTWFrZVBvaW50KDQwMCwgMTUwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYXJn
ZXRUeXBlOjpUZXh0QXJlYVBocmFzZToKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9p
bnQoNDAwLCAyMDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OkltYWdl
OgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2ludCgwLCAyNTApOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OkltYWdlQXNMaW5rOgorICAgICAgICBjb250ZW50
UG9pbnQgPSBOU01ha2VQb2ludCgyMDAsIDI1MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VGFyZ2V0VHlwZTo6SFRUUExpbms6CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50
KDAsIDMwMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6RlRQTGluazoK
KyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtlUG9pbnQoMTAwLCAzMDApOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6Ok1haWx0b0xpbms6CisgICAgICAgIGNvbnRlbnRQ
b2ludCA9IE5TTWFrZVBvaW50KDIwMCwgMzAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
YXJnZXRUeXBlOjpKYXZhU2NyaXB0TGluazoKKyAgICAgICAgY29udGVudFBvaW50ID0gTlNNYWtl
UG9pbnQoMzAwLCAzMDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhcmdldFR5cGU6OlBh
Z2VPdmVybGF5OgorICAgICAgICBjb250ZW50UG9pbnQgPSBOU01ha2VQb2ludCg3NTAsIDEwMCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6UGFnZVdoaXRlc3BhY2U6Cisg
ICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDY1MCwgMCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVGFyZ2V0VHlwZTo6VmlkZW86CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5T
TWFrZVBvaW50KDAsIDM1MCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFyZ2V0VHlwZTo6
TVNFVmlkZW86CisgICAgICAgIGNvbnRlbnRQb2ludCA9IE5TTWFrZVBvaW50KDIwMCwgMzUwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIE5TTWFrZVBvaW50KGNvbnRlbnRQ
b2ludC54ICsgOCwgNjAwIC0gY29udGVudFBvaW50LnkgLSA4KTsKK30KKworLy8gRklYTUU6IElk
ZWFsbHksIGVhY2ggb2YgdGhlc2Ugd291bGQgYmUgYWJsZSB0byBydW4gYXMgaXRzIG93biBzdWJ0
ZXN0IGluIGEgc3VpdGUsIHNoYXJpbmcgYSBXS1ZpZXcgKGZvciBwZXJmb3JtYW5jZSByZWFzb25z
KSwKKy8vIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZSBydW4tYXBpLXRlc3RzIGV4cGxpY2l0bHkgcnVu
cyBlYWNoIHRlc3QgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLiBTbywgd2UgdXNlIGEgc2luZ2xlIHRl
c3QgZm9yIG1hbnkgdGVzdHMgaW5zdGVhZC4KK1RFU1QoV2ViS2l0MiwgQWN0aW9uTWVudXNUZXN0
KQoreworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dCA9IGFkb3B0V0soVXRp
bDo6Y3JlYXRlQ29udGV4dEZvckluamVjdGVkQnVuZGxlVGVzdCgiQWN0aW9uTWVudVRlc3QiKSk7
CisKKyAgICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4gcGFnZUdyb3VwID0gYWRvcHRXSyhX
S1BhZ2VHcm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKFV0aWw6OnRvV0soIkFjdGlvbk1lbnVzVGVz
dEdyb3VwIikuZ2V0KCkpKTsKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzID0gV0tQ
YWdlR3JvdXBHZXRQcmVmZXJlbmNlcyhwYWdlR3JvdXAuZ2V0KCkpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRNZWRpYVNvdXJjZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRGaWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7
CisKKyAgICBQbGF0Zm9ybVdlYlZpZXcgcGxhdGZvcm1XZWJWaWV3KGNvbnRleHQuZ2V0KCksIHBh
Z2VHcm91cC5nZXQoKSwgW0FjdGlvbk1lbnVzVGVzdFdLVmlldyBjbGFzc10pOworICAgIFJldGFp
blB0cjxBY3Rpb25NZW51c1Rlc3RXS1ZpZXc+IHdrVmlldyA9IChBY3Rpb25NZW51c1Rlc3RXS1Zp
ZXcgKilwbGF0Zm9ybVdlYlZpZXcucGxhdGZvcm1WaWV3KCk7CisKKyAgICBpZiAoIVt3a1ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRBY3Rpb25NZW51OildKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXS1BhZ2VMb2FkZXJDbGllbnRWMCBsb2FkZXJDbGllbnQ7CisgICAgbWVt
c2V0KCZsb2FkZXJDbGllbnQsIDAsIHNpemVvZihsb2FkZXJDbGllbnQpKTsKKyAgICBsb2FkZXJD
bGllbnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICBsb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZv
ckZyYW1lID0gZGlkRmluaXNoTG9hZEZvckZyYW1lQ2FsbGJhY2s7CisgICAgV0tQYWdlU2V0UGFn
ZUxvYWRlckNsaWVudChbd2tWaWV3IHBhZ2VSZWZdLCAmbG9hZGVyQ2xpZW50LmJhc2UpOworCisg
ICAgQWN0aXZlRG93bmxvYWRDb250ZXh0IGFjdGl2ZURvd25sb2FkQ29udGV4dDsKKworICAgIFdL
Q29udGV4dERvd25sb2FkQ2xpZW50VjAgZG93bmxvYWRDbGllbnQ7CisgICAgbWVtc2V0KCZkb3du
bG9hZENsaWVudCwgMCwgc2l6ZW9mKGRvd25sb2FkQ2xpZW50KSk7CisgICAgZG93bmxvYWRDbGll
bnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICBkb3dubG9hZENsaWVudC5iYXNlLmNsaWVudEluZm8g
PSAmYWN0aXZlRG93bmxvYWRDb250ZXh0OworICAgIGRvd25sb2FkQ2xpZW50LmRpZEZpbmlzaCA9
IGRpZEZpbmlzaERvd25sb2FkQ2FsbGJhY2s7CisgICAgZG93bmxvYWRDbGllbnQuZGlkQ3JlYXRl
RGVzdGluYXRpb24gPSBkaWRDcmVhdGVEb3dubG9hZERlc3RpbmF0aW9uQ2FsbGJhY2s7CisgICAg
V0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQoY29udGV4dC5nZXQoKSwgJmRvd25sb2FkQ2xpZW50
LmJhc2UpOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBVdGlsOjpj
cmVhdGVVUkxGb3JSZXNvdXJjZSgiYWN0aW9uLW1lbnUtdGFyZ2V0cyIsICJodG1sIikpOworICAg
IFdLUGFnZUxvYWRVUkwoW3drVmlldyBwYWdlUmVmXSwgdXJsLmdldCgpKTsKKworICAgIFV0aWw6
OnJ1bigmZGlkRmluaXNoTG9hZCk7CisKKyAgICAvLyBSZWFkLW9ubHkgdGV4dC4KKyAgICBbd2tW
aWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlw
ZTo6V29yZCkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEo
a1dLQWN0aW9uTWVudVJlYWRPbmx5VGV4dCwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlw
ZSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIndvcmQiLCByZXRyaWV2ZVNlbGVjdGlvbihb
d2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVB
c3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0NvcHlU
ZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAid29yZCIsIHdhdGNoUGFzdGVib2FyZEZv
clN0cmluZygpKTsKKyAgICB9XTsKKworICAgIC8vIFJlYWQtb25seSB0ZXh0LCBvbiBhIHBocmFz
ZS4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJn
ZXQoVGFyZ2V0VHlwZTo6UGhyYXNlKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAg
ICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51UmVhZE9ubHlUZXh0LCBbd2tWaWV3IF9hY3Rpb25N
ZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCBy
ZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgICAgIHBlcmZvcm1NZW51
SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0
QWN0aW9uSXRlbVRhZ0NvcHlUZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlv
cmsiLCB3YXRjaFBhc3RlYm9hcmRGb3JTdHJpbmcoKSk7CisgICAgfV07CisKKyAgICAvLyBSZWFk
LW9ubHkgdGV4dCwgb24gYW4gYWRkcmVzcy4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0
UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6QWRkcmVzcykgcHJlRGlkQ2xv
c2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudURhdGFE
ZXRlY3RlZEl0ZW0sIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworCisgICAgICAg
IC8vIEFkZHJlc3NlcyBkb24ndCBnZXQgc2VsZWN0ZWQsIGJlY2F1c2UgdGhleSBpbW1lZGlhdGVs
eSBzaG93IGEgVGV4dEluZGljYXRvci4KKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiPG5vIHNl
bGVjdGlvbj4iLCByZXRyaWV2ZVNlbGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgfV07
CisKKyAgICAvLyBSZWFkLW9ubHkgdGV4dCwgb24gYSBkYXRlLgorICAgIFt3a1ZpZXcgcnVuTWVu
dVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpEYXRlKSBw
cmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25N
ZW51RGF0YURldGVjdGVkSXRlbSwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisK
KyAgICAgICAgLy8gRGF0ZXMgZG9uJ3QgZ2V0IHNlbGVjdGVkLCBiZWNhdXNlIHRoZXkgaW1tZWRp
YXRlbHkgc2hvdyBhIFRleHRJbmRpY2F0b3IuCisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIjxu
byBzZWxlY3Rpb24+IiwgcmV0cmlldmVTZWxlY3Rpb24oW3drVmlldyBwYWdlUmVmXSkpOworICAg
IH1dOworCisgICAgLy8gUmVhZC1vbmx5IHRleHQsIG9uIGEgcGhvbmUgbnVtYmVyLgorICAgIFt3
a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRU
eXBlOjpQaG9uZU51bWJlcikgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBF
WFBFQ1RfRVEoa1dLQWN0aW9uTWVudURhdGFEZXRlY3RlZEl0ZW0sIFt3a1ZpZXcgX2FjdGlvbk1l
bnVSZXN1bHRdLnR5cGUpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCIoNDA4KSA5OTYtMTAx
MCIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1ZpZXcgcGFnZVJlZl0pKTsKKyAgICB9XTsKKworICAg
IC8vIENvcHkgZnJvbSBhIGNvbnRlbnRFZGl0YWJsZSBkaXYuCisgICAgW3drVmlldyBydW5NZW51
U2VxdWVuY2VBdFBvaW50OndpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkNvbnRlbnRF
ZGl0YWJsZVdvcmRzKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVD
VF9FUShrV0tBY3Rpb25NZW51RWRpdGFibGVUZXh0LCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0
XS50eXBlKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZWRpdGFibGUiLCByZXRyaWV2ZVNl
bGVjdGlvbihbd2tWaWV3IHBhZ2VSZWZdKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5k
ZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRl
bVRhZ0NvcHlUZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZWRpdGFibGUiLCB3YXRj
aFBhc3RlYm9hcmRGb3JTdHJpbmcoKSk7CisgICAgfV07CisKKyAgICAvLyBDb3B5IGEgcGhyYXNl
IGZyb20gYSBjb250ZW50RWRpdGFibGUgZGl2LgorICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNl
QXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpDb250ZW50RWRpdGFibGVQ
aHJhc2UpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtX
S0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUp
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJOZXcgWW9yayIsIHJldHJpZXZlU2VsZWN0aW9u
KFt3a1ZpZXcgcGFnZVJlZl0pKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlw
ZUFzeW5jKFt3a1ZpZXcgYWN0aW9uTWVudV0sIDAsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29w
eVRleHQpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJOZXcgWW9yayIsIHdhdGNoUGFzdGVi
b2FyZEZvclN0cmluZygpKTsKKyAgICB9XTsKKworICAgIC8vIFBhc3RlIG9uIHRvcCBvZiB0aGUg
dGV4dCBpbiB0aGUgY29udGVudEVkaXRhYmxlIGRpdi4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1
ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6Q29udGVudEVkaXRh
YmxlV29yZHMpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VR
KGtXS0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5
cGUpOworICAgICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gY2xlYXJDb250
ZW50c107CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBzZXRTdHJp
bmc6QCJwYXN0ZWQgc3RyaW5nIiBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHJldHJpZXZlU2VsZWN0aW9uKFt3a1Zp
ZXcgcGFnZVJlZl0pKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5j
KFt3a1ZpZXcgYWN0aW9uTWVudV0sIDIsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnUGFzdGUpOwor
CisgICAgICAgIC8vIE5vdyBjaGVjayBhbmQgc2VlIGlmIG91ciBwYXN0ZSBzdWNjZWVkZWQuIEl0
IHNob3VsZCBvbmx5IHJlcGxhY2Ugb25lICdlZGl0YWJsZScuCisgICAgICAgIHdhdGNoRWRpdGFi
bGVBcmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJlZGl0YWJsZTEiLCAicGFzdGVkIHN0
cmluZyBlZGl0YWJsZSBlZGl0YWJsZSBlZGl0YWJsZSIpOworICAgIH1dOworCisgICAgLy8gUGFz
dGUgb24gdG9wIG9mIGEgcGhyYXNlIGluIHRoZSBjb250ZW50RWRpdGFibGUgZGl2LgorICAgIFt3
a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRU
eXBlOjpDb250ZW50RWRpdGFibGVQaHJhc2UpIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsK
KyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2Fj
dGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFz
dGVib2FyZF0gY2xlYXJDb250ZW50c107CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQ
YXN0ZWJvYXJkXSBzZXRTdHJpbmc6QCJwYXN0ZWQgb3ZlciBwaHJhc2UiIGZvclR5cGU6TlNQYXN0
ZWJvYXJkVHlwZVN0cmluZ107CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIk5ldyBZb3JrIiwg
cmV0cmlldmVTZWxlY3Rpb24oW3drVmlldyBwYWdlUmVmXSkpOworICAgICAgICBwZXJmb3JtTWVu
dUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29udGV4
dEFjdGlvbkl0ZW1UYWdQYXN0ZSk7CisKKyAgICAgICAgLy8gTm93IGNoZWNrIGFuZCBzZWUgaWYg
b3VyIHBhc3RlIHN1Y2NlZWRlZCwgYW5kIHJlcGxhY2VkIHRoZSB3aG9sZSBwaHJhc2UuCisgICAg
ICAgIHdhdGNoRWRpdGFibGVBcmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJlZGl0YWJs
ZTIiLCAicGFzdGVkIG92ZXIgcGhyYXNlIHNvbWUgd29yZHMiKTsKKyAgICB9XTsKKworICAgIC8v
IENvcHkgZnJvbSBhbiA8aW5wdXQ+LgorICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2lu
dDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0SW5wdXRXb3JkcykgcHJlRGlk
Q2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVk
aXRhYmxlVGV4dCwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIEVY
UEVDVF9XS19TVFJFUShAImVkaXRhYmxlIiwgcmV0cmlldmVTZWxlY3Rpb25JbkVsZW1lbnQoW3dr
VmlldyBwYWdlUmVmXSwgImlucHV0MSIpKTsKKyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRl
eE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9uTWVudV0sIDAsIGtXS0NvbnRleHRBY3Rpb25JdGVt
VGFnQ29weVRleHQpOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHdhdGNo
UGFzdGVib2FyZEZvclN0cmluZygpKTsKKyAgICB9XTsKKworICAgIC8vIENvcHkgYSBwaHJhc2Ug
ZnJvbSBhbiA8aW5wdXQ+LgorICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDp3aW5k
b3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0SW5wdXRQaHJhc2UpIHByZURpZENsb3Nl
TWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVFZGl0YWJs
ZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoQCJOZXcgWW9yayIsIHJldHJpZXZlU2VsZWN0aW9uSW5FbGVtZW50KFt3a1ZpZXcg
cGFnZVJlZl0sICJpbnB1dDIiKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5
cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ0Nv
cHlUZXh0KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCB3YXRjaFBhc3Rl
Ym9hcmRGb3JTdHJpbmcoKSk7CisgICAgfV07CisKKyAgICAvLyBQYXN0ZSBvbiB0b3Agb2YgdGhl
IGVkaXRhYmxlIHRleHQgaW4gYW4gPGlucHV0Pi4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5j
ZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6VGV4dElucHV0V29yZHMp
IHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlv
bk1lbnVFZGl0YWJsZVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAg
ICAgICBbW05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gY2xlYXJDb250ZW50c107Cisg
ICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBzZXRTdHJpbmc6QCJwYXN0
ZWQgc3RyaW5nIiBmb3JUeXBlOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHJldHJpZXZlU2VsZWN0aW9uSW5FbGVtZW50KFt3a1Zp
ZXcgcGFnZVJlZl0sICJpbnB1dDEiKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhP
ZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAyLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRh
Z1Bhc3RlKTsKKworICAgICAgICAvLyBOb3cgY2hlY2sgYW5kIHNlZSBpZiBvdXIgcGFzdGUgc3Vj
Y2VlZGVkLiBJdCBzaG91bGQgb25seSByZXBsYWNlIG9uZSAnZWRpdGFibGUnLgorICAgICAgICB3
YXRjaEVkaXRhYmxlQXJlYUZvclN0cmluZyhbd2tWaWV3IHBhZ2VSZWZdLCAiaW5wdXQxIiwgInBh
c3RlZCBzdHJpbmcgZWRpdGFibGUgZWRpdGFibGUgZWRpdGFibGUiKTsKKyAgICB9XTsKKworICAg
IC8vIFBhc3RlIG9uIHRvcCBvZiB0aGUgZWRpdGFibGUgdGV4dCwgb24gYSBwaHJhc2UgaW4gYW4g
PGlucHV0Pi4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRG
b3JUYXJnZXQoVGFyZ2V0VHlwZTo6VGV4dElucHV0UGhyYXNlKSBwcmVEaWRDbG9zZU1lbnVIYW5k
bGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51RWRpdGFibGVUZXh0LCBb
d2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKyAgICAgICAgW1tOU1Bhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdIGNsZWFyQ29udGVudHNdOworICAgICAgICBbW05TUGFzdGVib2Fy
ZCBnZW5lcmFsUGFzdGVib2FyZF0gc2V0U3RyaW5nOkAicGFzdGVkIG92ZXIgcGhyYXNlIiBmb3JU
eXBlOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJO
ZXcgWW9yayIsIHJldHJpZXZlU2VsZWN0aW9uSW5FbGVtZW50KFt3a1ZpZXcgcGFnZVJlZl0sICJp
bnB1dDIiKSk7CisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5kZXhPZlR5cGVBc3luYyhbd2tW
aWV3IGFjdGlvbk1lbnVdLCAyLCBrV0tDb250ZXh0QWN0aW9uSXRlbVRhZ1Bhc3RlKTsKKworICAg
ICAgICAvLyBOb3cgY2hlY2sgYW5kIHNlZSBpZiBvdXIgcGFzdGUgc3VjY2VlZGVkLCBhbmQgcmVw
bGFjZWQgdGhlIHdob2xlIHBocmFzZS4KKyAgICAgICAgd2F0Y2hFZGl0YWJsZUFyZWFGb3JTdHJp
bmcoW3drVmlldyBwYWdlUmVmXSwgImlucHV0MiIsICJwYXN0ZWQgb3ZlciBwaHJhc2Ugc29tZSB3
b3JkcyIpOworICAgIH1dOworCisgICAgLy8gQ29weSBmcm9tIGEgPHRleHRhcmVhPi4KKyAgICBb
d2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0
VHlwZTo6VGV4dEFyZWFXb3JkcykgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAg
ICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3drVmlldyBfYWN0aW9uTWVu
dVJlc3VsdF0udHlwZSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImVkaXRhYmxlIiwgcmV0
cmlldmVTZWxlY3Rpb25JbkVsZW1lbnQoW3drVmlldyBwYWdlUmVmXSwgInRleHRhcmVhMSIpKTsK
KyAgICAgICAgcGVyZm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9u
TWVudV0sIDAsIGtXS0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVRleHQpOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoQCJlZGl0YWJsZSIsIHdhdGNoUGFzdGVib2FyZEZvclN0cmluZygpKTsKKyAg
ICB9XTsKKworICAgIC8vIENvcHkgYSBwaHJhc2UgZnJvbSBhIDx0ZXh0YXJlYT4uCisgICAgW3dr
VmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50OndpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5
cGU6OlRleHRBcmVhUGhyYXNlKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAg
IEVYUEVDVF9FUShrV0tBY3Rpb25NZW51RWRpdGFibGVUZXh0LCBbd2tWaWV3IF9hY3Rpb25NZW51
UmVzdWx0XS50eXBlKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCByZXRy
aWV2ZVNlbGVjdGlvbkluRWxlbWVudChbd2tWaWV3IHBhZ2VSZWZdLCAidGV4dGFyZWEyIikpOwor
ICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25N
ZW51XSwgMCwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdDb3B5VGV4dCk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUShAIk5ldyBZb3JrIiwgd2F0Y2hQYXN0ZWJvYXJkRm9yU3RyaW5nKCkpOworICAg
IH1dOworCisgICAgLy8gUGFzdGUgb24gdG9wIG9mIHRoZSBlZGl0YWJsZSB0ZXh0IGluIGEgPHRl
eHRhcmVhPi4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRG
b3JUYXJnZXQoVGFyZ2V0VHlwZTo6VGV4dEFyZWFXb3JkcykgcHJlRGlkQ2xvc2VNZW51SGFuZGxl
cjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3dr
VmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdl
bmVyYWxQYXN0ZWJvYXJkXSBjbGVhckNvbnRlbnRzXTsKKyAgICAgICAgW1tOU1Bhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdIHNldFN0cmluZzpAInBhc3RlZCIgZm9yVHlwZTpOU1Bhc3RlYm9h
cmRUeXBlU3RyaW5nXTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZWRpdGFibGUiLCByZXRy
aWV2ZVNlbGVjdGlvbkluRWxlbWVudChbd2tWaWV3IHBhZ2VSZWZdLCAidGV4dGFyZWExIikpOwor
ICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25N
ZW51XSwgMiwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdQYXN0ZSk7CisKKyAgICAgICAgLy8gTm93
IGNoZWNrIGFuZCBzZWUgaWYgb3VyIHBhc3RlIHN1Y2NlZWRlZC4gSXQgc2hvdWxkIG9ubHkgcmVw
bGFjZSBvbmUgJ2VkaXRhYmxlJy4KKyAgICAgICAgd2F0Y2hFZGl0YWJsZUFyZWFGb3JTdHJpbmco
W3drVmlldyBwYWdlUmVmXSwgInRleHRhcmVhMSIsICJwYXN0ZWQgZWRpdGFibGUgZWRpdGFibGUg
ZWRpdGFibGUiKTsKKyAgICB9XTsKKworICAgIC8vIFBhc3RlIG9uIHRvcCBvZiB0aGUgZWRpdGFi
bGUgdGV4dCwgb24gYSBwaHJhc2UgaW4gYSA8dGV4dGFyZWE+LgorICAgIFt3a1ZpZXcgcnVuTWVu
dVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpUZXh0QXJl
YVBocmFzZSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEo
a1dLQWN0aW9uTWVudUVkaXRhYmxlVGV4dCwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlw
ZSk7CisgICAgICAgIFtbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBjbGVhckNvbnRl
bnRzXTsKKyAgICAgICAgW1tOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIHNldFN0cmlu
ZzpAInBhc3RlZCBvdmVyIHBocmFzZSIgZm9yVHlwZTpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXTsK
KyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiTmV3IFlvcmsiLCByZXRyaWV2ZVNlbGVjdGlvbklu
RWxlbWVudChbd2tWaWV3IHBhZ2VSZWZdLCAidGV4dGFyZWEyIikpOworICAgICAgICBwZXJmb3Jt
TWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29u
dGV4dEFjdGlvbkl0ZW1UYWdQYXN0ZSk7CisKKyAgICAgICAgLy8gTm93IGNoZWNrIGFuZCBzZWUg
aWYgb3VyIHBhc3RlIHN1Y2NlZWRlZCwgYW5kIHJlcGxhY2VkIHRoZSB3aG9sZSBwaHJhc2UuCisg
ICAgICAgIHdhdGNoRWRpdGFibGVBcmVhRm9yU3RyaW5nKFt3a1ZpZXcgcGFnZVJlZl0sICJ0ZXh0
YXJlYTIiLCAicGFzdGVkIG92ZXIgcGhyYXNlIHNvbWUgd29yZHMiKTsKKyAgICB9XTsKKworICAg
IC8vIENvcHkgYW4gaW1hZ2UuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50Ondp
bmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkltYWdlKSBwcmVEaWRDbG9zZU1lbnVIYW5k
bGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51SW1hZ2UsIFt3a1ZpZXcg
X2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworCisgICAgICAgIHBlcmZvcm1NZW51SXRlbUF0SW5k
ZXhPZlR5cGVBc3luYyhbd2tWaWV3IGFjdGlvbk1lbnVdLCAwLCBrV0tDb250ZXh0QWN0aW9uSXRl
bVRhZ0NvcHlJbWFnZSk7CisgICAgICAgIE5TSW1hZ2UgKmltYWdlID0gd2F0Y2hQYXN0ZWJvYXJk
Rm9ySW1hZ2UoKTsKKworICAgICAgICBFWFBFQ1RfRVEoMjE1LCBpbWFnZS5zaXplLndpZHRoKTsK
KyAgICAgICAgRVhQRUNUX0VRKDE3NCwgaW1hZ2Uuc2l6ZS5oZWlnaHQpOworICAgIH1dOworCisg
ICAgLy8gRG93bmxvYWQgYW4gaW1hZ2UuCisgICAgYWN0aXZlRG93bmxvYWRDb250ZXh0LnNob3Vs
ZENoZWNrRm9ySW1hZ2UgPSB0cnVlOworICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2lu
dDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpJbWFnZSkgcHJlRGlkQ2xvc2VNZW51
SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudUltYWdlLCBbd2tW
aWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKworICAgICAgICBkaWRGaW5pc2hEb3dubG9h
ZCA9IGZhbHNlOworICAgICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3dr
VmlldyBhY3Rpb25NZW51XSwgMiwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdTYXZlSW1hZ2VUb0Rv
d25sb2Fkcyk7CisgICAgICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoRG93bmxvYWQpOworICAgIH1d
OworICAgIGFjdGl2ZURvd25sb2FkQ29udGV4dC5zaG91bGRDaGVja0ZvckltYWdlID0gZmFsc2U7
CisKKyAgICAvLyBJbWFnZXMgdGhhdCBhcmUgYWxzbyBsaW5rcyBzaG91bGQgYmUgdHJlYXRlZCBh
cyBsaW5rcy4KKyAgICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzU3MDEK
KyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQo
VGFyZ2V0VHlwZTo6SW1hZ2VBc0xpbmspIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAg
ICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVMaW5rLCBbd2tWaWV3IF9hY3Rpb25NZW51UmVz
dWx0XS50eXBlKTsKKyAgICB9XTsKKworICAgIHdhaXRGb3JWaWRlb1JlYWR5KFt3a1ZpZXcgcGFn
ZVJlZl0pOworCisgICAgLy8gQ29weSBhIHZpZGVvIFVSTC4KKyAgICBbd2tWaWV3IHJ1bk1lbnVT
ZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6VmlkZW8pIHBy
ZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1l
bnVWaWRlbywgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisKKyAgICAgICAgcGVy
Zm9ybU1lbnVJdGVtQXRJbmRleE9mVHlwZUFzeW5jKFt3a1ZpZXcgYWN0aW9uTWVudV0sIDAsIGtX
S0NvbnRleHRBY3Rpb25JdGVtVGFnQ29weVZpZGVvVVJMKTsKKyAgICAgICAgTlNTdHJpbmcgKnZp
ZGVvVVJMID0gd2F0Y2hQYXN0ZWJvYXJkRm9yU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9XS19T
VFJFUShAInRlc3QubXA0IiwgW3ZpZGVvVVJMIGxhc3RQYXRoQ29tcG9uZW50XSk7CisgICAgfV07
CisKKyAgICAvLyBDb3B5aW5nIGEgdmlkZW8gVVJMIGZvciBhIG5vbi1kb3dubG9hZGFibGUgdmlk
ZW8gc2hvdWxkIHJlc3VsdCBpbiBjb3B5aW5nIHRoZSBwYWdlIFVSTCBpbnN0ZWFkLgorICAgIC8v
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE3NjEzMQorICAgIFt3a1ZpZXcgcnVu
TWVudVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJnZXRUeXBlOjpNU0VW
aWRlbykgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAgICBFWFBFQ1RfRVEoa1dL
QWN0aW9uTWVudVZpZGVvLCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0XS50eXBlKTsKKworICAg
ICAgICBwZXJmb3JtTWVudUl0ZW1BdEluZGV4T2ZUeXBlQXN5bmMoW3drVmlldyBhY3Rpb25NZW51
XSwgMCwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdDb3B5VmlkZW9VUkwpOworICAgICAgICBOU1N0
cmluZyAqdmlkZW9VUkwgPSB3YXRjaFBhc3RlYm9hcmRGb3JTdHJpbmcoKTsKKyAgICAgICAgRVhQ
RUNUX1dLX1NUUkVRKEAiYWN0aW9uLW1lbnUtdGFyZ2V0cy5odG1sIiwgW3ZpZGVvVVJMIGxhc3RQ
YXRoQ29tcG9uZW50XSk7CisKKyAgICAgICAgLy8gQWxzbywgdGhlIGRvd25sb2FkIG1lbnUgaXRl
bSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIG5vbi1kb3dubG9hZGFibGUgdmlkZW8uCisgICAgICAg
IGVuc3VyZU1lbnVJdGVtQXRJbmRleE9mVHlwZUlzRGlzYWJsZWQoW3drVmlldyBhY3Rpb25NZW51
XSwgMiwga1dLQ29udGV4dEFjdGlvbkl0ZW1UYWdTYXZlVmlkZW9Ub0Rvd25sb2Fkcyk7CisgICAg
fV07CisKKyAgICAvLyBIVFRQIGxpbmsuCisgICAgW3drVmlldyBydW5NZW51U2VxdWVuY2VBdFBv
aW50OndpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5cGU6OkhUVFBMaW5rKSBwcmVEaWRDbG9z
ZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAgIEVYUEVDVF9FUShrV0tBY3Rpb25NZW51TGluaywg
W3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0udHlwZSk7CisKKyAgICAgICAgLy8gSW52b2tpbmcg
YW4gYWN0aW9uIG1lbnUgc2hvdWxkIGRpc21pc3MgYW55IGV4aXN0aW5nIHNlbGVjdGlvbi4KKyAg
ICAgICAgLy8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc1NzUzCisgICAgICAg
IEVYUEVDVF9XS19TVFJFUShAIjxubyBzZWxlY3Rpb24+IiwgcmV0cmlldmVTZWxlY3Rpb24oW3dr
VmlldyBwYWdlUmVmXSkpOworICAgIH1dOworCisgICAgLy8gTWFpbHRvIGxpbmsuCisgICAgW3dr
VmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50OndpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5
cGU6Ok1haWx0b0xpbmspIHByZURpZENsb3NlTWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQ
RUNUX0VRKGtXS0FjdGlvbk1lbnVNYWlsdG9MaW5rLCBbd2tWaWV3IF9hY3Rpb25NZW51UmVzdWx0
XS50eXBlKTsKKworICAgICAgICAvLyBEYXRhIGRldGVjdGVkIGxpbmtzIGRvbid0IGdldCBhIHNl
bGVjdGlvbiBub3Igc3BlY2lhbCBpbmRpY2F0aW9uLCBmb3IgY29uc2lzdGVuY3kgd2l0aCBIVFRQ
IGxpbmtzLgorICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCI8bm8gc2VsZWN0aW9uPiIsIHJldHJp
ZXZlU2VsZWN0aW9uKFt3a1ZpZXcgcGFnZVJlZl0pKTsKKyAgICB9XTsKKworICAgIC8vIE5vbi1I
VFRQKFMpLCBub24tbWFpbHRvIGxpbmtzIHNob3VsZCBmYWxsIGJhY2sgdG8gdGhlIHRleHQgbWVu
dS4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2luZG93UG9pbnRGb3JUYXJn
ZXQoVGFyZ2V0VHlwZTo6RlRQTGluaykgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAg
ICAgICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudVJlYWRPbmx5VGV4dCwgW3drVmlldyBfYWN0aW9u
TWVudVJlc3VsdF0udHlwZSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImZ0cCIsIHJldHJp
ZXZlU2VsZWN0aW9uKFt3a1ZpZXcgcGFnZVJlZl0pKTsKKyAgICB9XTsKKworICAgIC8vIEphdmFT
Y3JpcHQgbGlua3Mgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCwgYW5kIHNob3VsZCBmYWxsIGJhY2sg
dG8gdGhlIHRleHQgbWVudS4KKyAgICBbd2tWaWV3IHJ1bk1lbnVTZXF1ZW5jZUF0UG9pbnQ6d2lu
ZG93UG9pbnRGb3JUYXJnZXQoVGFyZ2V0VHlwZTo6SmF2YVNjcmlwdExpbmspIHByZURpZENsb3Nl
TWVudUhhbmRsZXI6XigpIHsKKyAgICAgICAgRVhQRUNUX0VRKGtXS0FjdGlvbk1lbnVSZWFkT25s
eVRleHQsIFt3a1ZpZXcgX2FjdGlvbk1lbnVSZXN1bHRdLnR5cGUpOworICAgICAgICBFWFBFQ1Rf
V0tfU1RSRVEoQCJqYXZhc2NyaXB0IiwgcmV0cmlldmVTZWxlY3Rpb24oW3drVmlldyBwYWdlUmVm
XSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoY2FsbEphdmFTY3JpcHRSZXR1cm5pbmdCb29sKFt3
a1ZpZXcgcGFnZVJlZl0sICJ3YXNGYWlsQ2FsbGVkKCkiKSk7CisgICAgfV07CisKKyAgICAvLyBD
bGllbnRzIHNob3VsZCBiZSBhYmxlIHRvIGN1c3RvbWl6ZSB0aGUgbWVudSBieSBvdmVycmlkaW5n
IFdLVmlldydzIF9hY3Rpb25NZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0LgorICAgIC8vIGh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE3NDkwOAorICAgIFJldGFpblB0cjxOU01lbnVJ
dGVtPiBpdGVtID0gYWRvcHROUyhbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0bGU6QCJT
b21lIEFjdGlvbiIgYWN0aW9uOkBzZWxlY3Rvcihjb3B5Oikga2V5RXF1aXZhbGVudDpAIiJdKTsK
KyAgICBbd2tWaWV3IF9zZXRPdmVycmlkZUFjdGlvbk1lbnVJdGVtczpAWyBpdGVtLmdldCgpIF1d
OworICAgIFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdl
dChUYXJnZXRUeXBlOjpJbWFnZSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAg
ICBFWFBFQ1RfRVEoMSwgW3drVmlldyBhY3Rpb25NZW51XS5udW1iZXJPZkl0ZW1zKTsKKyAgICAg
ICAgRVhQRUNUX1dLX1NUUkVRKEAiU29tZSBBY3Rpb24iLCBbW3drVmlldyBhY3Rpb25NZW51XSBp
dGVtQXRJbmRleDowXS50aXRsZSk7CisgICAgfV07CisgICAgW3drVmlldyBfc2V0T3ZlcnJpZGVB
Y3Rpb25NZW51SXRlbXM6bmlsXTsKKworICAgIC8vIENsaWVudHMgc2hvdWxkIGJlIGFibGUgdG8g
Y3VzdG9taXplIHRoZSBEYXRhRGV0ZWN0b3JzIGFjdGlvbnMgYnkgaW1wbGVtZW50aW5nCisgICAg
Ly8gV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudCdzIHByZXBhcmVGb3JBY3Rpb25NZW51IGNhbGxi
YWNrLgorICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE3NjA4NgorICAg
IFt3a1ZpZXcgcnVuTWVudVNlcXVlbmNlQXRQb2ludDp3aW5kb3dQb2ludEZvclRhcmdldChUYXJn
ZXRUeXBlOjpQYWdlT3ZlcmxheSkgcHJlRGlkQ2xvc2VNZW51SGFuZGxlcjpeKCkgeworICAgICAg
ICBFWFBFQ1RfRVEoa1dLQWN0aW9uTWVudURhdGFEZXRlY3RlZEl0ZW0sIFt3a1ZpZXcgX2FjdGlv
bk1lbnVSZXN1bHRdLnR5cGUpOworICAgIH1dOworCisgICAgLy8gTm8gbWVudSBzaG91bGQgYmUg
YnVpbHQgZm9yIHdoaXRlc3BhY2UgKGV4Y2VwdCBpbiBlZGl0YWJsZSBhcmVhcykuCisgICAgW3dr
VmlldyBydW5NZW51U2VxdWVuY2VBdFBvaW50OndpbmRvd1BvaW50Rm9yVGFyZ2V0KFRhcmdldFR5
cGU6OlBhZ2VXaGl0ZXNwYWNlKSBwcmVEaWRDbG9zZU1lbnVIYW5kbGVyOl4oKSB7CisgICAgICAg
IEVYUEVDVF9FUShrV0tBY3Rpb25NZW51Tm9uZSwgW3drVmlldyBfYWN0aW9uTWVudVJlc3VsdF0u
dHlwZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBbd2tWaWV3IGFjdGlvbk1lbnVdLm51bWJlck9m
SXRlbXMpOworICAgIH1dOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJPYmpDL0FjdGlvbk1lbnVz
QnVuZGxlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyT2JqQy9BY3Rpb25N
ZW51c0J1bmRsZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjY2MTJhMjQwNTliNmZjMGIxOWI5YTE4ZTgzZWQ2
YjQ4MTI4NDI4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyT2JqQy9BY3Rpb25NZW51c0J1bmRsZS5tbQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGVUZXN0Lmgi
CisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVGcmFt
ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0J1bmRsZUhpdFRlc3RSZXN1bHQuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS0J1bmRsZU5vZGVIYW5kbGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tCdW5kbGVQYWdlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tCdW5kbGVQYWdlT3ZlcmxheS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLQnVuZGxlUmFuZ2VIYW5kbGVQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tEaWN0aW9uYXJ5Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tOdW1iZXIuaD4KKyNp
bXBvcnQgPGRsZmNuLmg+CisjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNkZWZpbmUgU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKGZyYW1ld29yaykgXAorICAgIHN0YXRpYyB2
b2lkKiBmcmFtZXdvcmsjI0xpYnJhcnkoKSBcCisgICAgeyBcCisgICAgICAgIHN0YXRpYyB2b2lk
KiBmcmFtZXdvcmtMaWJyYXJ5ID0gZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2ZyYW1ld29yaywgUlRMRF9OT1cpOyBc
CisgICAgICAgIHJldHVybiBmcmFtZXdvcmtMaWJyYXJ5OyBcCisgICAgfQorCisjZGVmaW5lIFNP
RlRfTElOSyhmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwgcGFyYW1ldGVyRGVj
bGFyYXRpb25zLCBwYXJhbWV0ZXJOYW1lcykgXAorICAgIHN0YXRpYyByZXN1bHRUeXBlIGluaXQj
I2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7IFwKKyAgICBzdGF0aWMgcmVzdWx0
VHlwZSAoKnNvZnRMaW5rIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9IGlu
aXQjI2Z1bmN0aW9uTmFtZTsgXAorICAgIFwKKyAgICBzdGF0aWMgcmVzdWx0VHlwZSBpbml0IyNm
dW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zIFwKKyAgICB7IFwKKyAgICAgICAgc29m
dExpbmsjI2Z1bmN0aW9uTmFtZSA9IChyZXN1bHRUeXBlICgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlv
bnMpIGRsc3ltKGZyYW1ld29yayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUsICIlcyIsIGRsZXJy
b3IoKSk7IFwKKyAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVy
TmFtZXM7IFwKKyAgICB9XAorICAgIFwKKyAgICBpbmxpbmUgcmVzdWx0VHlwZSBmdW5jdGlvbk5h
bWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zIFwKKyAgICB7XAorICAgICAgICByZXR1cm4gc29mdExp
bmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgXAorICAgIH0KKworI2RlZmluZSBTT0ZU
X0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgQ2xhc3MgaW5p
dCMjY2xhc3NOYW1lKCk7IFwKKyAgICBzdGF0aWMgQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMjQ2xh
c3MpKCkgPSBpbml0IyNjbGFzc05hbWU7IFwKKyAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNz
TmFtZTsgXAorICAgIFwKKyAgICBzdGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIFwK
KyAgICB7IFwKKyAgICAgICAgcmV0dXJuIGNsYXNzIyNjbGFzc05hbWU7IFwKKyAgICB9XAorICAg
IFwKKyAgICBzdGF0aWMgQ2xhc3MgaW5pdCMjY2xhc3NOYW1lKCkgXAorICAgIHsgXAorICAgICAg
ICBmcmFtZXdvcmsjI0xpYnJhcnkoKTsgXAorICAgICAgICBjbGFzcyMjY2xhc3NOYW1lID0gb2Jq
Y19nZXRDbGFzcygjY2xhc3NOYW1lKTsgXAorICAgICAgICBBU1NFUlQoY2xhc3MjI2NsYXNzTmFt
ZSk7IFwKKyAgICAgICAgZ2V0IyNjbGFzc05hbWUjI0NsYXNzID0gY2xhc3NOYW1lIyNGdW5jdGlv
bjsgXAorICAgICAgICByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgXAorICAgIH0KKwordHlwZWRl
ZiBzdHJ1Y3QgX19ERFNjYW5uZXIgRERTY2FubmVyLCAqRERTY2FubmVyUmVmOwordHlwZWRlZiBz
dHJ1Y3QgX19ERFNjYW5RdWVyeSAqRERTY2FuUXVlcnlSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0RE
UmVzdWx0ICpERFJlc3VsdFJlZjsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBERFNjYW5uZXJUeXBl
U3RhbmRhcmQgPSAwLAorfSBERFNjYW5uZXJUeXBlOworCitlbnVtIHsKKyAgICBERFNjYW5uZXJP
cHRpb25TdG9wQXRGaXJzdE1hdGNoID0gMSwKK307Cit0eXBlZGVmIENGSW5kZXggRERTY2FubmVy
T3B0aW9uczsKKworZW51bSB7CisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9uZSA9
IDAsCisgICAgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwID0gMSA8PCAwLAor
fTsKK3R5cGVkZWYgQ0ZJbmRleCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnM7CisKK1NPRlRf
TElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChEYXRhRGV0ZWN0b3JzKQorU09GVF9MSU5L
X1BSSVZBVEVfRlJBTUVXT1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnNDb3JlKQorCitleHRlcm4g
IkMiIHsKKworU09GVF9MSU5LKERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJDcmVhdGUsIERE
U2Nhbm5lclJlZiwgKEREU2Nhbm5lclR5cGUgdHlwZSwgRERTY2FubmVyT3B0aW9ucyBvcHRpb25z
LCBDRkVycm9yUmVmKiBlcnJvclJlZiksICh0eXBlLCBvcHRpb25zLCBlcnJvclJlZikpCitTT0ZU
X0xJTksoRGF0YURldGVjdG9yc0NvcmUsIEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZywgRERT
Y2FuUXVlcnlSZWYsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGU3RyaW5nUmVmIHN0cmlu
ZywgQ0ZSYW5nZSByYW5nZSksIChhbGxvY2F0b3IsIHN0cmluZywgcmFuZ2UpKQorU09GVF9MSU5L
KERhdGFEZXRlY3RvcnNDb3JlLCBERFNjYW5uZXJTY2FuUXVlcnksIEREU2NhblF1ZXJ5UmVmLCAo
RERTY2FubmVyUmVmIHNjYW5uZXIsIEREU2NhblF1ZXJ5UmVmIHF1ZXJ5KSwgKHNjYW5uZXIsIHF1
ZXJ5KSkKK1NPRlRfTElOSyhEYXRhRGV0ZWN0b3JzQ29yZSwgRERTY2FubmVyQ29weVJlc3VsdHNX
aXRoT3B0aW9ucywgQ0ZBcnJheVJlZiwgKEREU2Nhbm5lclJlZiBzY2FubmVyLCBERFNjYW5uZXJD
b3B5UmVzdWx0c09wdGlvbnMgb3B0aW9ucyksIChzY2FubmVyLCBvcHRpb25zKSkKKworfQorCitT
T0ZUX0xJTktfQ0xBU1MoRGF0YURldGVjdG9ycywgRERBY3Rpb25Db250ZXh0KQorCitAaW50ZXJm
YWNlIEREQWN0aW9uQ29udGV4dCA6IE5TT2JqZWN0IDxOU0NvcHlpbmcsIE5TU2VjdXJlQ29kaW5n
PgorCitAcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqYWxsUmVzdWx0czsKK0Bwcm9wZXJ0eSAo
cmV0YWluKSBfX2F0dHJpYnV0ZV9fKChOU09iamVjdCkpIEREUmVzdWx0UmVmIG1haW5SZXN1bHQ7
CisKK0BlbmQKKworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1JldGFpblB0cjxEREFj
dGlvbkNvbnRleHQ+IGNyZWF0ZUFjdGlvbkNvbnRleHRGb3JQaG9uZU51bWJlcigpCit7CisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBwbGFpblRleHQgPSBDRlNUUigiKDQwOCkgOTk2LTEwMTAi
KTsKKyAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5u
ZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgUmV0YWlu
UHRyPEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRl
RnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbGFpblRleHQuZ2V0KCksIENGUmFuZ2VN
YWtlKDAsIENGU3RyaW5nR2V0TGVuZ3RoKHBsYWluVGV4dC5nZXQoKSkpKSk7CisKKyAgICBpZiAo
IUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1bHRz
ID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCks
IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworCisKKyAgICBDRkluZGV4
IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHJlc3VsdHMuZ2V0KCkpOworICAgIGlmIChy
ZXN1bHRDb3VudCAhPSAxKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEREUmVzdWx0
UmVmIG1haW5SZXN1bHQgPSAoRERSZXN1bHRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChyZXN1
bHRzLmdldCgpLCAwKTsKKworICAgIGlmICghbWFpblJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0g
YWRvcHROUyhbW2dldEREQWN0aW9uQ29udGV4dENsYXNzKCkgYWxsb2NdIGluaXRdKTsKKyAgICBb
YWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChpZCltYWluUmVzdWx0IF1dOworICAgIFth
Y3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07CisKKyAgICByZXR1cm4gYWN0
aW9uQ29udGV4dDsKK30KKyAgICAKK2NsYXNzIEFjdGlvbk1lbnVUZXN0IDogcHVibGljIEluamVj
dGVkQnVuZGxlVGVzdCB7CitwdWJsaWM6CisgICAgQWN0aW9uTWVudVRlc3QoY29uc3Qgc3RkOjpz
dHJpbmcmIGlkZW50aWZpZXIpCisgICAgICAgIDogSW5qZWN0ZWRCdW5kbGVUZXN0KGlkZW50aWZp
ZXIpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JBY3Rpb25NZW51
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJl
c3VsdCwgV0tUeXBlUmVmKiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7
CisgICAgICAgIFdLU3RyaW5nUmVmIGtleXNbMV07CisgICAgICAgIFdLVHlwZVJlZiB2YWx1ZXNb
MV07CisKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhhc0xpbmtLZXkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoYXNMaW5rVVJMIikpOworICAgICAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYWJzb2x1dGVMaW5rVVJMID0gYWRvcHRXSyhXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVMaW5rVVJMKGhpdFRlc3RSZXN1bHQpKTsKKyAgICAg
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBoYXNMaW5rVmFsdWUgPSBhZG9wdFdLKFdLQm9v
bGVhbkNyZWF0ZSghIWFic29sdXRlTGlua1VSTCkpOworICAgICAgICBrZXlzWzBdID0gaGFzTGlu
a0tleS5nZXQoKTsKKyAgICAgICAgdmFsdWVzWzBdID0gaGFzTGlua1ZhbHVlLmdldCgpOworCisg
ICAgICAgIC8vIEhvdyBkb2VzIG93bmVyc2hpcCB3b3JrIGhlcmU/CisgICAgICAgICp1c2VyRGF0
YSA9IFdLRGljdGlvbmFyeUNyZWF0ZShrZXlzLCB2YWx1ZXMsIDEpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkKiBhY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXS0J1bmRsZVBhZ2VPdmVy
bGF5UmVmIHBhZ2VPdmVybGF5LCBXS1BvaW50IHBvc2l0aW9uLCBXS0J1bmRsZVJhbmdlSGFuZGxl
UmVmKiByYW5nZUhhbmRsZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAgICAg
IGlmIChwb3NpdGlvbi54ID4gNzAwKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25D
b250ZXh0PiBhY3Rpb25Db250ZXh0ID0gY3JlYXRlQWN0aW9uQ29udGV4dEZvclBob25lTnVtYmVy
KCk7CisgICAgICAgICAgICAqcmFuZ2VIYW5kbGUgPSAoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZilj
bGllbnRJbmZvOworICAgICAgICAgICAgcmV0dXJuICh2b2lkKilhY3Rpb25Db250ZXh0LmF1dG9y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZHJhd1JlY3QoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3Zlcmxh
eSwgdm9pZCogZ3JhcGhpY3NDb250ZXh0LCBXS1JlY3QgZGlydHlSZWN0LCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IHN0YXRpY19jYXN0
PENHQ29udGV4dFJlZj4oZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0UkdC
RmlsbENvbG9yKGN0eCwgMCwgMSwgMCwgMSk7CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGN0
eCwgQ0dSZWN0TWFrZSg3MDAsIDAsIDEwMCwgNjAwKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSkKKyAgICB7CisgICAgICAgIFdLQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50VjEgY29udGV4
dE1lbnVDbGllbnQ7CisgICAgICAgIG1lbXNldCgmY29udGV4dE1lbnVDbGllbnQsIDAsIHNpemVv
Zihjb250ZXh0TWVudUNsaWVudCkpOworICAgICAgICBjb250ZXh0TWVudUNsaWVudC5iYXNlLnZl
cnNpb24gPSAxOworICAgICAgICBjb250ZXh0TWVudUNsaWVudC5wcmVwYXJlRm9yQWN0aW9uTWVu
dSA9IHByZXBhcmVGb3JBY3Rpb25NZW51OworICAgICAgICBXS0J1bmRsZVBhZ2VTZXRDb250ZXh0
TWVudUNsaWVudChwYWdlLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7CisKKyAgICAgICAgV0tS
ZXRhaW5QdHI8V0tCdW5kbGVIaXRUZXN0UmVzdWx0UmVmPiBoaXRUZXN0UmVzdWx0ID0gYWRvcHRX
SyhXS0J1bmRsZUZyYW1lQ3JlYXRlSGl0VGVzdFJlc3VsdChXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUocGFnZSksIFdLUG9pbnRNYWtlKDcwOCwgOCkpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tC
dW5kbGVOb2RlSGFuZGxlUmVmPiBub2RlSGFuZGxlID0gYWRvcHRXSyhXS0J1bmRsZUhpdFRlc3RS
ZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0LmdldCgpKSk7CisgICAgICAgIF9yYW5n
ZUhhbmRsZSA9IGFkb3B0V0soV0tCdW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVSYW5nZShub2Rl
SGFuZGxlLmdldCgpKSk7CisKKyAgICAgICAgV0tCdW5kbGVQYWdlT3ZlcmxheUNsaWVudFYxIHBh
Z2VPdmVybGF5Q2xpZW50OworICAgICAgICBtZW1zZXQoJnBhZ2VPdmVybGF5Q2xpZW50LCAwLCBz
aXplb2YocGFnZU92ZXJsYXlDbGllbnQpKTsKKyAgICAgICAgcGFnZU92ZXJsYXlDbGllbnQuYmFz
ZS52ZXJzaW9uID0gMTsKKyAgICAgICAgcGFnZU92ZXJsYXlDbGllbnQuYmFzZS5jbGllbnRJbmZv
ID0gX3JhbmdlSGFuZGxlLmdldCgpOworCisgICAgICAgIHBhZ2VPdmVybGF5Q2xpZW50LmRyYXdS
ZWN0ID0gZHJhd1JlY3Q7CisgICAgICAgIHBhZ2VPdmVybGF5Q2xpZW50LmFjdGlvbkNvbnRleHRG
b3JSZXN1bHRBdFBvaW50ID0gYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQ7CisKKyAgICAg
ICAgX2J1bmRsZVBhZ2VPdmVybGF5ID0gYWRvcHRXSyhXS0J1bmRsZVBhZ2VPdmVybGF5Q3JlYXRl
KCZwYWdlT3ZlcmxheUNsaWVudC5iYXNlKSk7CisgICAgICAgIFdLQnVuZGxlUGFnZUluc3RhbGxQ
YWdlT3ZlcmxheShwYWdlLCBfYnVuZGxlUGFnZU92ZXJsYXkuZ2V0KCkpOworICAgICAgICBXS0J1
bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNwbGF5KF9idW5kbGVQYWdlT3ZlcmxheS5nZXQoKSwg
V0tSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkpOworICAgIH0KKworICAgIFdLUmV0YWluUHRyPFdL
QnVuZGxlUGFnZU92ZXJsYXlSZWY+IF9idW5kbGVQYWdlT3ZlcmxheTsKKyAgICBXS1JldGFpblB0
cjxXS0J1bmRsZVJhbmdlSGFuZGxlUmVmPiBfcmFuZ2VIYW5kbGU7Cit9OworCitzdGF0aWMgSW5q
ZWN0ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxBY3Rpb25NZW51VGVzdD4gcmVnaXN0cmFyKCJBY3Rp
b25NZW51VGVzdCIpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KaW5kZXggZDYwODE5OTllMzdl
MzMyMjc0ZjUwZGVjMjYyN2YzZWFlYjM2MTNmMi4uYjY1ODZkZDQyZmQ0MDQ0NDMxYjZlYTQxNDE5
YTZiNDIwYWE3YjkwZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvUGxhdGZv
cm1XZWJWaWV3TWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL1BsYXRmb3JtV2Vi
Vmlld01hYy5tbQpAQCAtNDYsOSArNDYsMTQgQEAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKKyAgICA6IFBsYXRmb3JtV2ViVmlldyhj
b250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIFtXS1ZpZXcgY2xhc3NdKQoreworfQorCitQbGF0Zm9y
bVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1BhZ2VSZWYgcmVsYXRlZFBhZ2UpCiB7CiAgICAg
TlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKTsKLSAgICBtX3ZpZXcgPSBb
W1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IGNvbnRleHRSZWY6Y29udGV4dFJlZiBw
YWdlR3JvdXBSZWY6cGFnZUdyb3VwUmVmXTsKKyAgICBtX3ZpZXcgPSBbW1dLVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpyZWN0IGNvbnRleHRSZWY6V0tQYWdlR2V0Q29udGV4dChyZWxhdGVkUGFn
ZSkgcGFnZUdyb3VwUmVmOldLUGFnZUdldFBhZ2VHcm91cChyZWxhdGVkUGFnZSkgcmVsYXRlZFRv
UGFnZTpyZWxhdGVkUGFnZV07CiAgICAgW21fdmlldyBzZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rp
b25FbmFibGVkOk5PXTsKIAogICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gTlNPZmZzZXRSZWN0KHJl
Y3QsIC0xMDAwMCwgWyhOU1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRl
eDowXSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwpAQCAt
NjAsMTAgKzY1LDEwIEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvCiAgICAgW21fd2luZG93IHNl
dFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CiB9CiAKLVBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1X
ZWJWaWV3KFdLUGFnZVJlZiByZWxhdGVkUGFnZSkKK1BsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1X
ZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYsIENsYXNzIHdrVmlld1N1YmNsYXNzKQogewogICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCk7Ci0gICAgbV92aWV3ID0gW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6cmVjdCBjb250ZXh0UmVmOldLUGFnZUdldENvbnRleHQocmVsYXRlZFBhZ2UpIHBhZ2VH
cm91cFJlZjpXS1BhZ2VHZXRQYWdlR3JvdXAocmVsYXRlZFBhZ2UpIHJlbGF0ZWRUb1BhZ2U6cmVs
YXRlZFBhZ2VdOworICAgIG1fdmlldyA9IFtbd2tWaWV3U3ViY2xhc3MgYWxsb2NdIGluaXRXaXRo
RnJhbWU6cmVjdCBjb250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOnBhZ2VHcm91cFJl
Zl07CiAgICAgW21fdmlldyBzZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOk5PXTsK
IAogICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gTlNPZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgWyhO
U1NjcmVlbiAqKVtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0uc2l6
ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwo=
</data>
<flag name="review"
          id="267430"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>