<?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>113481</bug_id>
          
          <creation_ts>2013-03-27 23:04:02 -0700</creation_ts>
          <short_desc>fourthTier: FTL JIT should be able run some simple function</short_desc>
          <delta_ts>2013-03-29 21:14:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>865186</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 23:04:02 -0700</bug_when>
    <thetext>The fourth tier LLVM JIT should be able to run some simple function.

This is going to be the very initial prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865192</commentid>
    <comment_count>1</comment_count>
      <attachid>195489</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-27 23:23:33 -0700</bug_when>
    <thetext>Created attachment 195489
it begins

Fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865286</commentid>
    <comment_count>2</comment_count>
      <attachid>195509</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-28 02:51:25 -0700</bug_when>
    <thetext>Created attachment 195509
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865840</commentid>
    <comment_count>3</comment_count>
      <attachid>195653</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-28 15:09:12 -0700</bug_when>
    <thetext>Created attachment 195653
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865888</commentid>
    <comment_count>4</comment_count>
      <attachid>195668</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-28 16:09:57 -0700</bug_when>
    <thetext>Created attachment 195668
lowering is done

Lowering should now have support for all of the opcodes that we&apos;re going to initially compile.  It&apos;s a small list.  It also has support for locals, captured locals, basic blocks, and trap-based OSR exits (i.e. OSR exit = crash, for now).

Now I just need to write the wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865926</commentid>
    <comment_count>5</comment_count>
      <attachid>195682</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-28 17:04:21 -0700</bug_when>
    <thetext>Created attachment 195682
done

Of course, it doesn&apos;t compile, and I have no idea what I&apos;m doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866402</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 14:51:21 -0700</bug_when>
    <thetext>It just ran function foo() { return 42; }.


DFG compiling foo#B0Pv4u:[0x7fa1cb805000-&gt;0x11150fef0, NoneFunctionCall], number of instructions = 3
Allocating another allocator region.
Phase CPS rethreading changed the IR.
Phase unification changed the IR.
Phase prediction injection changed the IR.
Phase backwards propagation changed the IR.
Phase prediction propagation changed the IR.
Phase fixup changed the IR.
Phase control flow analysis changed the IR.
Phase dead code elimination changed the IR.
Phase virtual register allocation changed the IR.
Graph after optimization:
DFG for foo#B0Pv4u:[0x7fa1cb805000-&gt;0x11150fef0, DFGFunctionCall]:
  Fixpoint state: FixpointConverged; Form: ThreadedCPS; Unification state: GloballyUnified; Ref count state: ExactRefCount
Block #0 (bc#0):  (OSR target)
  Predecessors:
  Phi Nodes:
  vars before: arg0:(Top, TOP, TOP, TOP) : 
  var links: arg0:@0 : 
   0:  skipped  &lt; 0:-&gt;	SetArgument(arg0(a), bc#0)
   1:           &lt; 1:0&gt;	JSConstant(JS|UseAsOther, $0 = Int32: 42, bc#1)
   2:           &lt;!0:-&gt;	Return(@1&lt;Int32&gt;, MustGen, bc#1)
  vars after: arg0:(None, 0:&lt;empty&gt;, [], []) : 
  var links: arg0:@0 : 
; ModuleID = &apos;B0Pv4u&apos;

define i64 @B0Pv4u(i64) {
  ret i64 -281474976710614
}
Generated JIT code for FTL entrypoint thunk for foo#B0Pv4u:[0x7fa1cb805000-&gt;0x11150fef0, DFGFunctionCall]:
    Code at [0x53d4efc013c0, 0x53d4efc01480):
      0x53d4efc013c0: pop %rcx
      0x53d4efc013c1: mov %rcx, -0x10(%r13)
      0x53d4efc013c5: mov $0x7fa1cb805000, %r11
      0x53d4efc013cf: mov %r11, -0x8(%r13)
      0x53d4efc013d3: lea 0x8(%r13), %rdx
      0x53d4efc013d7: mov $0x7fa1ca40ef90, %r11
      0x53d4efc013e1: cmp %rdx, (%r11)
      0x53d4efc013e4: jb 0x53d4efc01403
      0x53d4efc013ea: mov %r13, %rdi
      0x53d4efc013ed: mov $0x111570010, %rax
      0x53d4efc013f7: call %rax
      0x53d4efc013f9: mov -0x10(%r13), %rdx
      0x53d4efc013fd: mov -0x28(%r13), %r13
      0x53d4efc01401: push %rdx
      0x53d4efc01402: ret 
      0x53d4efc01403: mov %rsp, %rdi
      0x53d4efc01406: mov %r13, 0x58(%rsp)
      0x53d4efc0140b: mov $0x0, -0x2c(%r13)
      0x53d4efc01413: mov $0x10dc1b260, %r11
      0x53d4efc0141d: call %r11
      0x53d4efc01420: jmp 0x53d4efc013ea
      0x53d4efc01425: pop %rcx
      0x53d4efc01426: mov %rcx, -0x10(%r13)
      0x53d4efc0142a: mov $0x7fa1cb805000, %r11
      0x53d4efc01434: mov %r11, -0x8(%r13)
      0x53d4efc01438: mov -0x30(%r13), %edx
      0x53d4efc0143c: cmp $0x1, %edx
      0x53d4efc0143f: jae 0x53d4efc013d3
      0x53d4efc01445: mov %rsp, %rdi
      0x53d4efc01448: mov %r13, 0x58(%rsp)
      0x53d4efc0144d: mov $0x0, -0x2c(%r13)
      0x53d4efc01455: mov $0x10dc202b0, %r11
      0x53d4efc0145f: call %r11
      0x53d4efc01462: mov %rax, %r13
      0x53d4efc01465: jmp 0x53d4efc013d3
42
42
42</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866406</commentid>
    <comment_count>7</comment_count>
      <attachid>195806</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 14:58:16 -0700</bug_when>
    <thetext>Created attachment 195806
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866407</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 15:02:06 -0700</bug_when>
    <thetext>Attachment 195806 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/Configurations/JavaScriptCore.xcconfig&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/Operands.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUseKind.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLAbbreviations.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITCode.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLLVMHeaders.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/runtime/InitializeThreading.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/wtf/Platform.h&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/build-jsc&apos;, u&apos;Tools/Scripts/copy-webkitlibraries-to-product-directory&apos;, u&apos;Tools/Scripts/export-llvm-build&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLCompile.cpp:57:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:41:  _ftc_lowValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:42:  _ftc_highValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:43:  _ftc_typesPassedThrough is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/ftl/FTLLLVMHeaders.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:3011:  _dtc_source is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:3012:  _dtc_edge is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:3013:  _dtc_typesPassedThrough is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/JavaScriptCore/ftl/FTLJITCode.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 9 in 28 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>866415</commentid>
    <comment_count>9</comment_count>
      <attachid>195806</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-29 15:09:37 -0700</bug_when>
    <thetext>Comment on attachment 195806
the patch

Attachment 195806 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17372022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866416</commentid>
    <comment_count>10</comment_count>
      <attachid>195806</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-29 15:13:23 -0700</bug_when>
    <thetext>Comment on attachment 195806
the patch

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

Please file a bug for each fix me, and for the weak viable thingy, and for the &quot;use our executable allocator&quot; thingy.

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:3671
&gt; +			shellScript = &quot;exit 0\n\nif [ -f ../../Tools/Scripts/check-for-weak-vtables-and-externals ]; then\n    ../../Tools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi&quot;;

This needs a bug report.

&gt;&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:57
&gt;&gt; +    if (LLVMCreateJITCompilerForModule(&amp;engine, state.module, 2, &amp;error) != 0) {
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

Please fix.

&gt;&gt; Source/JavaScriptCore/ftl/FTLJITCode.h:33
&gt;&gt; +#include &quot;JITCode.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866435</commentid>
    <comment_count>11</comment_count>
      <attachid>195806</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-29 15:34:02 -0700</bug_when>
    <thetext>Comment on attachment 195806
the patch

Attachment 195806 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17294466</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866445</commentid>
    <comment_count>12</comment_count>
      <attachid>195806</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-29 16:00:13 -0700</bug_when>
    <thetext>Comment on attachment 195806
the patch

Attachment 195806 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17359066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866470</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 16:27:20 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147259</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866544</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 21:14:30 -0700</bug_when>
    <thetext>Follow-up fix landed in http://trac.webkit.org/changeset/147269</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195489</attachid>
            <date>2013-03-27 23:23:33 -0700</date>
            <delta_ts>2013-03-28 02:51:25 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13753</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitib29sIGNh
bkNvbXBpbGUoR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJbmRleCA9IGdyYXBoLm51bUNoaWxkcmVuKG5v
ZGUpOyBjaGlsZEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaC5jaGls
ZChub2RlLCBjaGlsZEluZGV4KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVu
dHlwZWRVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBP
Sy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5n
IGVsc2UuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICBjYXNl
IE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
IGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAg
IGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExDYXBhYmlsaXRpZXNfaAorI2RlZmluZSBGVExDYXBhYmlsaXRpZXNfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworYm9vbCBjYW5Db21w
aWxlKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQ2FwYWJpbGl0aWVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitKSVRD
b2RlOjpKSVRDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGZhc3RF
bnRyeXBvaW50LCBDb2RlUmVmIGFyaXR5Q2hlY2tFbnRyeXBvaW50KQorICAgIDogbV9lbmdpbmUo
ZW5naW5lKQorICAgICwgbV9mYXN0RW50cnlwb2ludChmYXN0RW50cnlwb2ludCkKKyAgICAsIG1f
YXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0VudHJ5cG9pbnQpCit7Cit9CisKK0pJVENv
ZGU6On5KSVRDb2RlKCkKK3sKKyAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2lu
ZSk7Cit9CisKK3ZvaWQqIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKK3sKKyAgICByZXR1cm4g
bV9mYXN0RW50cnlwb2ludC5jb2RlKCk7Cit9CisKK3ZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVB
ZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obV9mYXN0RW50cnlwb2ludC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkg
KyBvZmZzZXQ7Cit9CisKK3ZvaWQqIEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
KQoreworICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYgd2UgZGlk
LCBpdCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCisgICAgLy8gdGhyb3VnaCB0aGlz
IEFQSS4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit1bnNpZ25lZCBKSVRDb2RlOjpvZmZzZXRPZih2b2lkKikKK3sKKyAgICAvLyBXZSBjdXJy
ZW50bHkgZG9uJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIEZUTCBjb2RlLgorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBKSVRD
b2RlOjpzaXplKCkKK3sKKyAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIEZUTCBjb2Rl
LCB5ZXQuIE1ha2UgYSB3aWxkIGd1ZXNzLiBUaGlzIGlzIG1vc3RseSB1c2VkIGZvcgorICAgIC8v
IEdDIGxvYWQgZXN0aW1hdGVzLgorICAgIHJldHVybiAxMDAwOworfQorCitib29sIEpJVENvZGU6
OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCit7CisgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoYXQg
YWRkcmVzc2VzIHRoZSBGVEwgY29kZSBjb250YWlucywgeWV0LgorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMSklUQ29kZV9oCisjZGVmaW5lIEZUTEpJVENvZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKwor
I2luY2x1ZGUgPGxsdm0vQ29yZS5oPgorI2luY2x1ZGUgPGxsdm0vRXhlY3V0aW9uRW5naW5lLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSklUQ29kZSA6IHB1
YmxpYyBKU0M6OkpJVENvZGUgeworcHVibGljOgorICAgIEpJVENvZGUoTExWTUV4ZWN1dGlvbkVu
Z2luZVJlZiwgQ29kZVJlZiBmYXN0RW50cnlwb2ludCwgQ29kZVJlZiBhcml0eUNoZWNrRW50cnlw
b2ludCk7CisgICAgfkpJVENvZGUoKTsKKyAgICAKKyAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxs
KCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsK
KyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpOworICAgIHVuc2ln
bmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSk7CisgICAgc2l6ZV90IHNpemUoKTsK
KyAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgTExWTUV4ZWN1
dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsKKyAgICBDb2RlUmVmIG1fZmFzdEVudHJ5cG9pbnQ7Cisg
ICAgQ29kZVJlZiBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50OyAvLyBUaGlzIGlzbid0IGFjY2Vzc2li
bGU7IHdlJ3JlIGp1c3QgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGhvbGRpbmcgb250byB0aGUg
bWVtb3J5LgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZMVF9KSVQpCisKKyNlbmRpZiAvLyBGVExKSVRDb2RlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRlRMSklUQ29tcGlsZXJfaAorI2RlZmluZSBGVExKSVRDb21waWxlcl9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSklUQ29tcGlsZXIgeworICAgIHVzaW5nIG5hbWVz
cGFjZSBERkc7CisKK3B1YmxpYzoKKyAgICBKSVRDb21waWxlcihHcmFwaCYpOworICAgIH5KSVRD
b21waWxlcigpOworICAgIAorICAgIGJvb2wgY29tcGlsZUZ1bmN0aW9uKFJlZlB0cjxKSVRDb2Rl
PiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKworcHJp
dmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSklUQ29tcGls
ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihi
b29sLCB2YWxpZGF0ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFwaEF0
RWFjaFBoYXNlLCBmYWxzZSkgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZUV4cGVyaW1lbnRhbEZU
TCwgZmFsc2UpIFwKKyAgICBcCiAgICAgdihib29sLCBlbmFibGVQcm9maWxlciwgZmFsc2UpIFwK
ICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQsIDEwMDAwKSBcCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE0NzAxNCkK
KysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwOCw2ICs4
MDgsMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBDUFUoWDg2XzY0KSAmJiBQTEFURk9STShN
QUMpCisjZGVmaW5lIEVOQUJMRV9GVExfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgaml0IGlz
IG5vdCBhdmFpbGFibGUsIGVuYWJsZSB0aGUgTExJbnQgQyBMb29wOiAqLwogI2lmICFFTkFCTEUo
SklUKQogI3VuZGVmIEVOQUJMRV9MTElOVCAgICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195509</attachid>
            <date>2013-03-28 02:51:25 -0700</date>
            <delta_ts>2013-03-28 15:09:12 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29727</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKIAogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07
CiAKK2VudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6CkBAIC01OSw2ICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgT3RoZXJUcmFpdHM+Cisg
ICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVLCBP
dGhlclRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
bV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkxvY2Fs
cygpKTsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDcwMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDggQEAKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuaCIKKyNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJGVExKSVRDb21w
aWxlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAK
QEAgLTE1Myw2ICsxNTUsMTEgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21w
aWxlTQogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICB2YWxpZGF0ZShkZmcs
IG1vZGVGb3JGaW5hbFZhbGlkYXRlKTsKICAgICAKKyAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJp
bWVudGFsRlRMKCkKKyAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCisg
ICAgICAgICYmIEZUTDo6Y29tcGlsZUZ1bmN0aW9uKGRmZywgaml0Q29kZSwgKmppdENvZGVXaXRo
QXJpdHlDaGVjaykpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAogICAgIEpJVENvbXBpbGVy
IGRhdGFGbG93SklUKGRmZyk7CiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKGNvbXBpbGVNb2Rl
ID09IENvbXBpbGVGdW5jdGlvbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYmJyZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMQWJicmV2aWF0aW9uc19oCisjZGVmaW5lIEZUTEFiYnJldmlhdGlvbnNfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgPGxs
dm0vQ29yZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMg
ZmlsZSBjb250YWlucyBzaG9ydC1mb3JtIGNhbGxzIGludG8gdGhlIExMVk0gQyBBUEkuIEl0IGlz
IG1lYW50IHRvCisvLyBzYXZlIHR5cGluZyBhbmQgbWFrZSBjb2RlIGNsZWFyZXIuIElmIHdlIGV2
ZXIgY2FsbCBhbiBMTFZNIEMgQVBJIGZ1bmN0aW9uCisvLyBtb3JlIHRoYW4gb25jZSBpbiB0aGUg
RlRMLCB3ZSBzaG91bGQgYWRkIGEgc2hvcnRjdXQgZm9yIGl0IGhlcmUuCisKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorI2Vycm9yICJUaGUgRlRMIGJhY2tlbmQgYXNzdW1lcyB0aGF0IHBvaW50ZXJz
IGFyZSA2NC1iaXQuIgorI2VuZGlmCisKK3R5cGVkZWYgTExWTUJhc2ljQmxvY2tSZWYgTEJhc2lj
QmxvY2s7Cit0eXBlZGVmIExMVk1CdWlsZGVyUmVmIExCdWlsZGVyOwordHlwZWRlZiBMTFZNTW9k
dWxlUmVmIExNb2R1bGU7Cit0eXBlZGVmIExMVk1UeXBlUmVmIExUeXBlOwordHlwZWRlZiBMTFZN
VmFsdWVSZWYgTFZhbHVlOworCitzdGF0aWMgaW5saW5lIExUeXBlIGludDMyVHlwZSgpIHsgcmV0
dXJuIExMVk1JbnQzMlR5cGUoKTsgfQorc3RhdGljIGlubGluZSBMVHlwZSBpbnQ2NFR5cGUoKSB7
IHJldHVybiBMTFZNSW50NjRUeXBlKCk7IH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgaW50UHRyVHlw
ZSgpIHsgcmV0dXJuIExMVk1JbnQ2NFR5cGUoKTsgfQorCitzdGF0aWMgaW5saW5lIExUeXBlIHBv
aW50ZXJUeXBlKExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1Qb2ludGVyVHlwZSh0eXBlLCAwKTsg
fQorCitzdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRQYXJhbShMVmFsdWUgZnVuY3Rpb24sIHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBMTFZNR2V0UGFyYW0oZnVuY3Rpb24sIGluZGV4KTsgfQorCitz
dGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxvY2soTFZhbHVlIGZ1bmN0aW9u
KSB7IHJldHVybiBMTFZNQXBwZW5kQmFzaWNCbG9jayhmdW5jdGlvbiwgIiIpOyB9CitzdGF0aWMg
aW5saW5lIExCYXNpY0Jsb2NrIGluc2VydEJhc2ljQmxvY2tCZWZvcmUoTEJhc2ljQmxvY2sgYmFz
aWNCbG9jaykgeyByZXR1cm4gTExWTUluc2VydEJhc2ljQmxvY2tCZWZvcmUoYmFzaWNCbG9jaywg
IiIpOyB9CisKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWxsb2NhKExCdWlsZGVyIGJ1aWxk
ZXIsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZEFsbG9jYShidWlsZGVyLCB0eXBlLCAi
Iik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWRkKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZEFkZChidWlsZGVyLCBs
ZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZExvYWQoTEJ1aWxk
ZXIgYnVpbGRlciwgTFZhbHVlIHBvaW50ZXIpIHsgcmV0dXJuIExMVk1CdWlsZExvYWQoYnVpbGRl
ciwgcG9pbnRlciwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFN0b3JlKExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIpIHsgcmV0dXJuIExMVk1C
dWlsZFN0b3JlKGJ1aWxkZXIsIHZhbHVlLCBwb2ludGVyKTsgfQorc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRJbnRUb1B0cihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5
cGUpIHsgcmV0dXJuIExMVk1CdWlsZEludFRvUHRyKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7
IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUHRyVG9JbnQoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBMTFZNQnVpbGRQdHJUb0ludChidWls
ZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExC
dWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVp
bGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q29uZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRh
a2VuLCBMQmFzaWNCbG9jayBub3RUYWtlbikgeyByZXR1cm4gTExWTUJ1aWxkQ29uZEJyKGJ1aWxk
ZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuKTsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMOjpMTFZNCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TEFiYnJldmlhdGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNw
YWNlIERGRzsKKworYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKK3sKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJ
bmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSW5kZXggPSBn
cmFwaC5udW1DaGlsZHJlbihub2RlKTsgY2hpbGRJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoZ3JhcGguY2hpbGQobm9kZSwgY2hpbGRJbmRleCkudXNlS2luZCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50MzJV
c2U6CisgICAgICAgICAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgICAg
ICAgICAvLyBUaGVzZSBhcmUgT0suCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtub3cgaG93
IHRvIGhhbmRsZSBhbnl0aGluZyBlbHNlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSlNDb25zdGFu
dDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6CisgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFBo
YW50b206CisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgIC8v
IFRoZXNlIGFyZSBPSy4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5n
IGVsc2UuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMQ2FwYWJpbGl0aWVzX2gKKyNkZWZpbmUgRlRMQ2FwYWJpbGl0
aWVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK2Jvb2wgY2FuQ29tcGlsZShHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTENhcGFiaWxp
dGllc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
SklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKworSklUQ29kZTo6SklUQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVu
Z2luZSwgQ29kZVJlZiBmYXN0RW50cnlwb2ludCwgQ29kZVJlZiBhcml0eUNoZWNrRW50cnlwb2lu
dCkKKyAgICA6IG1fZW5naW5lKGVuZ2luZSkKKyAgICAsIG1fZmFzdEVudHJ5cG9pbnQoZmFzdEVu
dHJ5cG9pbnQpCisgICAgLCBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50KGFyaXR5Q2hlY2tFbnRyeXBv
aW50KQoreworfQorCitKSVRDb2RlOjp+SklUQ29kZSgpCit7CisgICAgTExWTURpc3Bvc2VFeGVj
dXRpb25FbmdpbmUobV9lbmdpbmUpOworfQorCit2b2lkKiBKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bCgpCit7CisgICAgcmV0dXJuIG1fZmFzdEVudHJ5cG9pbnQuY29kZSgpOworfQorCit2b2lkKiBK
SVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCit7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZmFzdEVudHJ5cG9pbnQuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpICsgb2Zmc2V0OworfQorCit2b2lkKiBKSVRDb2RlOjpkYXRhQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCkKK3sKKyAgICAvLyBXZSBjYW4ndCBwYXRjaCBGVEwgY29kZSwg
eWV0LiBFdmVuIGlmIHdlIGRpZCwgaXQncyBub3QgY2xlYXIgdGhhdCB3ZSB3b3VsZCBkbyBzbwor
ICAgIC8vIHRocm91Z2ggdGhpcyBBUEkuCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgSklUQ29kZTo6b2Zmc2V0T2Yodm9pZCop
Cit7CisgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRoZSBG
VEwgY29kZS4KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitzaXplX3QgSklUQ29kZTo6c2l6ZSgpCit7CisgICAgLy8gV2UgZG9uJ3Qga25vdyB0
aGUgc2l6ZSBvZiBGVEwgY29kZSwgeWV0LiBNYWtlIGEgd2lsZCBndWVzcy4gVGhpcyBpcyBtb3N0
bHkgdXNlZCBmb3IKKyAgICAvLyBHQyBsb2FkIGVzdGltYXRlcy4KKyAgICByZXR1cm4gMTAwMDsK
K30KKworYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQoreworICAgIC8vIFdl
IGhhdmUgbm8gaWRlYSB3aGF0IGFkZHJlc3NlcyB0aGUgRlRMIGNvZGUgY29udGFpbnMsIHlldC4K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTEpJVENvZGVfaAorI2RlZmluZSBGVExKSVRDb2RlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJKSVRDb2RlLmgiCisKKyNpbmNsdWRlIDxsbHZtL0NvcmUuaD4KKyNpbmNsdWRlIDxsbHZt
L0V4ZWN1dGlvbkVuZ2luZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K2NsYXNzIEpJVENvZGUgOiBwdWJsaWMgSlNDOjpKSVRDb2RlIHsKK3B1YmxpYzoKKyAgICBKSVRD
b2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYsIENvZGVSZWYgZmFzdEVudHJ5cG9pbnQsIENvZGVS
ZWYgYXJpdHlDaGVja0VudHJ5cG9pbnQpOworICAgIH5KSVRDb2RlKCk7CisgICAgCisgICAgQ29k
ZVB0ciBhZGRyZXNzRm9yQ2FsbCgpOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZz
ZXQoc2l6ZV90IG9mZnNldCk7CisgICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpOwor
ICAgIHNpemVfdCBzaXplKCk7CisgICAgYm9vbCBjb250YWlucyh2b2lkKik7CisgICAgCitwcml2
YXRlOgorICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CisgICAgQ29kZVJlZiBt
X2Zhc3RFbnRyeXBvaW50OworICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsgLy8g
VGhpcyBpc24ndCBhY2Nlc3NpYmxlOyB3ZSdyZSBqdXN0IHRoZSBvbmVzIHJlc3BvbnNpYmxlIGZv
ciBob2xkaW5nIG9udG8gdGhlIG1lbW9yeS4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGTFRfSklUKQorCisjZW5kaWYgLy8gRlRMSklUQ29kZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTEpJVENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkZUTE91dHB1dC5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcg
bmFtZXNwYWNlIERGRzsKKworY2xhc3MgSklUQ29tcGlsZXIgeworICAgIHVzaW5nIG5hbWVzcGFj
ZSBERkc7CisKK3B1YmxpYzoKKyAgICBKSVRDb21waWxlcihHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgZ3Jh
cGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczY0KE9w
ZXJhbmRzTGlrZSwgZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAg
LCBtX2xvY2Fsc1B0cihPcGVyYW5kc0xpa2UsIGdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNB
dEhlYWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+SklUQ29tcGlsZXIoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRnVuY3Rpb24oUmVmUHRyPEpJVENvZGU+JiBqaXRD
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaykKKyAgICB7
CisgICAgICAgIENTdHJpbmcgbmFtZSA9IHRvQ1N0cmluZyhjb2RlQmxvY2soKS0+aGFzaCgpKTsK
KyAgICAgICAgbV9tb2R1bGUgPSBMTFZNTW9kdWxlQ3JlYXRlV2l0aE5hbWUobmFtZS5kYXRhKCkp
OworICAgICAgICAKKyAgICAgICAgTFR5cGUgYXJndW1lbnRUeXBlc1tdID0geyBtX291dC50eXBl
UHRyIH07CisgICAgICAgIG1fZnVuY3Rpb24gPSBMTFZNQWRkRnVuY3Rpb24obV9tb2R1bGUsIG5h
bWUuZGF0YSgpLCBMTFZNRnVuY3Rpb25UeXBlKG1fb3V0LnR5cGU2NCwgYXJndW1lbnRUeXBlcywg
MSwgZmFsc2UpKTsKKyAgICAgICAgTExWTVNldEZ1bmN0aW9uQ2FsbENvbnYobV9mdW5jdGlvbiwg
TExWTUNDYWxsQ29udik7CisgICAgICAgIAorICAgICAgICBtX291dC5pbml0aWFsaXplKGZ1bmN0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fcHJvbG9ndWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1f
ZnVuY3Rpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IG1fbG9jYWxzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIG1fbG9jYWxzMzJbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBt
X291dC50eXBlMzIpOworICAgICAgICAgICAgbV9sb2NhbHM2NFtpbmRleF0gPSBidWlsZEFsbG9j
YShtX291dC5tX2J1aWxkZXIsIG1fb3V0LnR5cGU2NCk7CisgICAgICAgICAgICBtX2xvY2Fsc1B0
cltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LnR5cGVQdHIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF07CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgbV9ibG9ja3MuYWRkKGJsb2NrLCBhcHBlbmRCYXNpY0Jsb2NrKG1fZnVu
Y3Rpb24pKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChtX2Jsb2Nr
cy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXSkpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCbG9j
ayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBtX2hpZ2hCbG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghbV9oaWdoQmxvY2spCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2xvd0Jsb2NrID0gbV9ibG9j
a3MuZ2V0KG1faGlnaEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5leHRI
aWdoQmxvY2sgPSAwOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBi
bG9ja0luZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytuZXh0QmxvY2tJbmRleCkgeworICAgICAgICAgICAgbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbbmV4dEJsb2NrSW5kZXhdOworICAgICAgICAgICAgaWYgKG5leHRIaWdoQmxvY2sp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgTEJhc2ljQmxvY2sg
bmV4dExvd0Jsb2NrID0gbmV4dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChuZXh0SGlnaEJsb2Nr
KSA6IDA7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhtX2xvd0Jsb2NrLCBuZXh0
TG93QmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgCisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7
IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxv
Y2s7IH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBPdXRwdXQgbV9vdXQ7CisgICAg
CisgICAgTE1vZHVsZSBtX21vZHVsZTsKKyAgICBMVmFsdWUgbV9mdW5jdGlvbjsKKyAgICBMQmFz
aWNCbG9jayBtX3Byb2xvZ3VlOworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIExCYXNpY0Jsb2Nr
PiBtX2Jsb2NrczsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzMzI7CisgICAgT3BlcmFu
ZHM8TFZhbHVlPiBtX2xvY2FsczY0OworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNQdHI7
CisgICAgCisgICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CisgICAgTEJhc2ljQmxvY2sgbV9s
b3dCbG9jazsKK307CisKK0pJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYgZ3JhcGgpCisg
ICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitib29sIGNvbXBpbGVGdW5jdGlvbihHcmFwaCYg
Z3JhcGgsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkZUTCBCYWNrZW5kIik7CisgICAgCisgICAgaWYgKCFjYW5Db21waWxlKGdyYXBoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEpJVENvbXBpbGVyIGppdChncmFwaCk7Cisg
ICAgaml0LmNvbXBpbGVGdW5jdGlvbihqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSklU
Q29tcGlsZXJfaAorI2RlZmluZSBGVExKSVRDb21waWxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworYm9vbCBjb21waWxlRnVuY3Rpb24oREZHOjpHcmFwaCYsIFJlZlB0cjxKSVRDb2RlPiYsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAv
LyBGVExKSVRDb21waWxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPdXRwdXRfaAorI2RlZmluZSBG
VExPdXRwdXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCisvLyBJZGlvbWF0aWMgTExWTSBJUiBidWlsZGVyIHNwZWNpZmlj
YWxseSBkZXNpZ25lZCBmb3IgRlRMLiBUaGlzIHVzZXMgb3VyIG93biBsb3dlcmluZworLy8gdGVy
bWlub2xvZ3ksIGFuZCBoYXMgc29tZSBvZiBpdHMgb3duIG5vdGlvbnM6CisvLworLy8gV2Ugc2F5
IHRoYXQgYSAicmVmZXJlbmNlIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgInBvaW50
ZXIiLiBUaGF0IGlzLCBpdCBoYXMKKy8vIGFuIGVsZW1lbnQgdHlwZSBhbmQgY2FuIGJlIHBhc3Nl
ZCBkaXJlY3RseSB0byBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gTm90ZSB0aGF0CisvLyBi
cm9hZGx5IHNwZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6Ok91dHB1dCBzaG91bGQgb25seSB1c2Ug
cmVmZXJlbmNlcyBmb3IgYWxsb2NhJ2QKKy8vIHNsb3RzIGZvciBtdXRhYmxlIGxvY2FsIHZhcmlh
Ymxlcy4KKy8vCisvLyBXZSBzYXkgdGhhdCBhICJwb2ludGVyIiBpcyB3aGF0IExMVk0gY29uc2lk
ZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgorLy8KKy8vIFdlIHNheSB0aGF0ICJn
ZXQiIGFuZCAic2V0IiBhcmUgd2hhdCBMTFZNIGNvbnNpZGVycyB0byBiZSAibG9hZCIgYW5kICJz
dG9yZSIuIEdldAorLy8gYW5kIHNldCB0YWtlIHJlZmVyZW5jZXMuCisvLworLy8gV2Ugc2F5IHRo
YXQgImxvYWQiIGFuZCAic3RvcmUiIGFyZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBhIHBvaW50ZXIg
YW5kIGFuIG9mZnNldC4KKy8vIFRoZXNlIHRyYW5zbGF0ZSB0aGUgcG9pbnRlciArIG9mZnNldCBp
bnRvIGEgcmVmZXJlbmNlIChvciwgYSBwb2ludGVyIGluIExMVk0tc3BlYWspCisvLyBhbmQgdXNl
IGdldCBhbmQgc2V0IG9uIHRoZW0gKG9yLCBsb2FkIGFuZCBzdG9yZSBpbiBMTFZNLXNwZWFrKS4K
KworY2xhc3MgT3V0cHV0IHsKK3B1YmxpYzoKKyAgICBPdXRwdXQoKQorICAgICAgICA6IHR5cGUz
MihpbnQzMlR5cGUoKSkKKyAgICAgICAgLCB0eXBlNjQoaW50NjRUeXBlKCkpCisgICAgICAgICwg
dHlwZVB0cihpbnRQdHJUeXBlKCkpCisgICAgICAgICwgcmVmMzIocG9pbnRlclR5cGUodHlwZTMy
KSkKKyAgICAgICAgLCByZWY2NChwb2ludGVyVHlwZSh0eXBlNjQpKQorICAgICAgICAsIHJlZlB0
cihwb2ludGVyVHlwZSh0eXBlUHRyKSkKKyAgICAgICAgLCBtX2Z1bmN0aW9uKDApCisgICAgICAg
ICwgbV9idWlsZGVyKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgICAgICAsIG1fbmV4dEJs
b2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB+T3V0cHV0KCkKKyAgICB7CisgICAgICAg
IExMVk1EaXNwb3NlQnVpbGRlcihtX2J1aWxkZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGlu
aXRpYWxpemUoTFZhbHVlIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgbV9mdW5jdGlvbiA9IGZ1
bmN0aW9uOworICAgICAgICBtX2J1aWxkZXIgPSBMTFZNQ3JlYXRlQnVpbGRlcigpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9jayBu
ZXh0QmxvY2spCisgICAgeworICAgICAgICBtX25leHRCbG9jayA9IG5leHRCbG9jazsKKyAgICAg
ICAgCisgICAgICAgIGFwcGVuZFRvKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBl
bmRUbyhMQmFzaWNCbG9jayBibG9jaykKKyAgICB7CisgICAgICAgIG1fYmxvY2sgPSBibG9jazsK
KyAgICAgICAgCisgICAgICAgIExMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChtX2J1aWxkZXIsIGJs
b2NrKTsKKyAgICB9CisgICAgCisgICAgTEJhc2ljQmxvY2sgbmV3QmxvY2soKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX25leHRCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRCYXNpY0Js
b2NrKG1fZnVuY3Rpb24pOworICAgICAgICByZXR1cm4gaW5zZXJ0QmFzaWNCbG9ja0JlZm9yZSht
X25leHRCbG9jayk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBwYXJhbSh1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gZ2V0UGFyYW0obV9mdW5jdGlvbiwgaW5kZXgpOyB9CisgICAgCisgICAgTFZh
bHVlIGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFkZChtX2J1
aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIAorICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVy
ZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQorICAgIHZv
aWQgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyBidWlsZFN0b3JlKG1fYnVp
bGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZDMyKExWYWx1
ZSBwb2ludGVyLCBMVmFsdWUgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChidWls
ZEludFRvUHRyKG1fYnVpbGRlciwgYWRkKHBvaW50ZXIsIG9mZnNldCksIHJlZjMyKSk7CisgICAg
fQorICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBMVmFsdWUg
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRl
ciwgYWRkKHBvaW50ZXIsIG9mZnNldCksIHJlZjMyKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
anVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVpbGRlciwgZGVzdGlu
YXRpb24pOyB9CisgICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sg
dGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29u
ZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CisgICAgCisgICAgY29uc3QgTFR5cGUgdHlwZTMy
OworICAgIGNvbnN0IExUeXBlIHR5cGU2NDsKKyAgICBjb25zdCBMVHlwZSB0eXBlUHRyOworCisg
ICAgTFZhbHVlIG1fZnVuY3Rpb247CisgICAgTEJ1aWxkZXIgbV9idWlsZGVyOworICAgIExCYXNp
Y0Jsb2NrIG1fYmxvY2s7CisgICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2s7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTE91dHB1dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29sLCB2
YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNl
RXhwZXJpbWVudGFsRlRMLCBmYWxzZSkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVByb2Zp
bGVyLCBmYWxzZSkgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9u
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2
aXNpb24gMTQ3MDE0KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5
KQpAQCAtODA4LDYgKzgwOCwxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIENQVShYODZfNjQp
ICYmIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMQorI2VuZGlmCisKIC8q
IElmIHRoZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgZW5hYmxlIHRoZSBMTEludCBDIExvb3A6ICov
CiAjaWYgIUVOQUJMRShKSVQpCiAjdW5kZWYgRU5BQkxFX0xMSU5UICAgICAgICAvKiBVbmRlZiBz
byB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195653</attachid>
            <date>2013-03-28 15:09:12 -0700</date>
            <delta_ts>2013-03-28 16:09:57 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56880</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKIAogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07
CiAKK2VudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6CkBAIC01OSw2ICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgT3RoZXJUcmFpdHM+Cisg
ICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVLCBP
dGhlclRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
bV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkxvY2Fs
cygpKTsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQ3MDE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw2ICsxMTIsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXM7CiAgICAgfQogICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRzVHlw
ZUNoZWNrKGVkZ2Uubm9kZSgpLCB0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIH0KKyAgICAKKyAg
ICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CisgICAg
fQorICAgIAogICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFs
aXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRp
Y2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAgLy8gZXhlY3V0
aW9uLgpAQCAtMTg1LDE5ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZpbHRlckVkZ2VCeVVzZShOb2RlKiBub2RlLCBFZGdlJiBlZGdlKQogICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBLbm93bkludDMyVXNlOgotICAgICAgICBjYXNlIEtub3duTnVtYmVyVXNlOgot
ICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
LSAgICAgICAgICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJG
b3IoZWRnZS51c2VLaW5kKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VL
aW5kKCkpIHx8ICFuZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgIGZpbHRlckJ5VHlwZShu
b2RlLCBlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ3
MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSwxMCBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1
ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCisjaW5jbHVkZSAiRlRMUnVuQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9w
dGlvbnMuaCIKIApAQCAtMTUzLDYgKzE1NywxMyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZh
bGlkYXRlKGRmZywgbW9kZUZvckZpbmFsVmFsaWRhdGUpOwogICAgIAorICAgIGlmIChPcHRpb25z
Ojp1c2VFeHBlcmltZW50YWxGVEwoKQorICAgICAgICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxl
RnVuY3Rpb24KKyAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgRlRM
OjpydW5CYWNrZW5kKEZUTDo6bG93ZXJERkdUb0xMVk0oZGZnKSwgaml0Q29kZSwgKmppdENvZGVX
aXRoQXJpdHlDaGVjayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICBK
SVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChj
b21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjI0Niw3ICsyMjQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKICAgICAKICAgICAv
LyBIZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGlu
IHRoZSBnaXZlbiByZWdpc3RlcnMuCi0gICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2Us
IFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICBib29sIG5lZWRz
VHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7
IHJldHVybiBtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7
IH0KICAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1
bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
KTsKICAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CkBAIC0yODUxLDcgKzI4NTEsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IE51bWJlclVzZSB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBLbm93bk51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBSZWFs
TnVtYmVyVXNlKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAg
aWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KQEAg
LTI5MDAsNyArMjkwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAg
ICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQo
KSA9PSBDZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IGVk
Z2UudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmlu
Z09iamVjdFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdPclN0cmluZ09iamVjdFVzZSkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQpAQCAtMzAwNiw5ICszMDA2
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKIH0KIAogI2Rl
ZmluZSBERkdfVFlQRV9DSEVDSyhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVt
cFRvRmFpbCkgZG8geyBcCi0gICAgICAgIGlmICghbmVlZHNUeXBlQ2hlY2soKGVkZ2UpLCAodHlw
ZXNQYXNzZWRUaHJvdWdoKSkpICAgICAgICAgICAgICBcCisgICAgICAgIEpTVmFsdWVTb3VyY2Ug
X2R0Y19zb3VyY2UgPSAoc291cmNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIEVkZ2UgX2R0Y19lZGdlID0gKGVkZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9kdGNfdHlwZXNQYXNzZWRUaHJv
dWdoID0gdHlwZXNQYXNzZWRUaHJvdWdoOyAgICBcCisgICAgICAgIGlmICghbmVlZHNUeXBlQ2hl
Y2soX2R0Y19lZGdlLCBfZHRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpICAgICAgICBcCiAgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIHR5cGVDaGVjaygoc291cmNlKSwgKGVkZ2UpLCAodHlwZXNQYXNz
ZWRUaHJvdWdoKSwgKGp1bXBUb0ZhaWwpKTsgXAorICAgICAgICB0eXBlQ2hlY2soX2R0Y19zb3Vy
Y2UsIF9kdGNfZWRnZSwgX2R0Y190eXBlc1Bhc3NlZFRocm91Z2gsIChqdW1wVG9GYWlsKSk7IFwK
ICAgICB9IHdoaWxlICgwKQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTQ3MDE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDYgKzk1LDI1IEBAIEFMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckYKICAg
ICB9CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBzaG91bGROb3RIYXZlVHlwZUNoZWNrKFVzZUtp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6Cisg
ICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CisgICAgY2FzZSBLbm93blN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
QUxXQVlTX0lOTElORSBib29sIG1heUhhdmVUeXBlQ2hlY2soVXNlS2luZCBraW5kKQoreworICAg
IHJldHVybiAhc2hvdWxkTm90SGF2ZVR5cGVDaGVjayhraW5kKTsKK30KKwogQUxXQVlTX0lOTElO
RSBib29sIGlzTnVtZXJpY2FsKFVzZUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsK
QEAgLTEwOCw2ICsxMjcsMzQgQEAgQUxXQVlTX0lOTElORSBib29sIGlzTnVtZXJpY2FsKFVzZUtp
bmQgawogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIGlzRG91YmxlKFVzZUtpbmQga2lu
ZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAg
Y2FzZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitB
TFdBWVNfSU5MSU5FIGJvb2wgaXNDZWxsKFVzZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgY2Fz
ZSBPYmplY3RVc2U6CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgY2FzZSBLbm93blN0cmluZ1Vz
ZToKKyAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKKyAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2Jq
ZWN0VXNlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQWJicmV2aWF0
aW9uc19oCisjZGVmaW5lIEZUTEFiYnJldmlhdGlvbnNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgPGxsdm0vQ29yZS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgZmlsZSBjb250YWlu
cyBzaG9ydC1mb3JtIGNhbGxzIGludG8gdGhlIExMVk0gQyBBUEkuIEl0IGlzIG1lYW50IHRvCisv
LyBzYXZlIHR5cGluZyBhbmQgbWFrZSBjb2RlIGNsZWFyZXIuIElmIHdlIGV2ZXIgY2FsbCBhbiBM
TFZNIEMgQVBJIGZ1bmN0aW9uCisvLyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgRlRMLCB3ZSBzaG91
bGQgYWRkIGEgc2hvcnRjdXQgZm9yIGl0IGhlcmUuCisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
I2Vycm9yICJUaGUgRlRMIGJhY2tlbmQgYXNzdW1lcyB0aGF0IHBvaW50ZXJzIGFyZSA2NC1iaXQu
IgorI2VuZGlmCisKK3R5cGVkZWYgTExWTUJhc2ljQmxvY2tSZWYgTEJhc2ljQmxvY2s7Cit0eXBl
ZGVmIExMVk1CdWlsZGVyUmVmIExCdWlsZGVyOwordHlwZWRlZiBMTFZNSW50UHJlZGljYXRlIExJ
bnRQcmVkaWNhdGU7Cit0eXBlZGVmIExMVk1Nb2R1bGVSZWYgTE1vZHVsZTsKK3R5cGVkZWYgTExW
TVR5cGVSZWYgTFR5cGU7Cit0eXBlZGVmIExMVk1WYWx1ZVJlZiBMVmFsdWU7CisKK3N0YXRpYyBp
bmxpbmUgTFR5cGUgaW50MVR5cGUoKSB7IHJldHVybiBMTFZNSW50MVR5cGUoKTsgfQorc3RhdGlj
IGlubGluZSBMVHlwZSBpbnQzMlR5cGUoKSB7IHJldHVybiBMTFZNSW50MzJUeXBlKCk7IH0KK3N0
YXRpYyBpbmxpbmUgTFR5cGUgaW50NjRUeXBlKCkgeyByZXR1cm4gTExWTUludDY0VHlwZSgpOyB9
CitzdGF0aWMgaW5saW5lIExUeXBlIGludFB0clR5cGUoKSB7IHJldHVybiBMTFZNSW50NjRUeXBl
KCk7IH0KKworc3RhdGljIGlubGluZSBMVHlwZSBwb2ludGVyVHlwZShMVHlwZSB0eXBlKSB7IHJl
dHVybiBMTFZNUG9pbnRlclR5cGUodHlwZSwgMCk7IH0KKworc3RhdGljIGlubGluZSBMVmFsdWUg
Z2V0UGFyYW0oTFZhbHVlIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gTExWTUdl
dFBhcmFtKGZ1bmN0aW9uLCBpbmRleCk7IH0KKworZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0
ZW5kLCBTaWduRXh0ZW5kIH07CitzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludChMVHlwZSB0
eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJpdEV4dGVuc2lvbiBleHRlbnNpb24pIHsg
cmV0dXJuIExMVk1Db25zdEludCh0eXBlLCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQp
OyB9CisKK3N0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgYXBwZW5kQmFzaWNCbG9jayhMVmFsdWUg
ZnVuY3Rpb24pIHsgcmV0dXJuIExMVk1BcHBlbmRCYXNpY0Jsb2NrKGZ1bmN0aW9uLCAiIik7IH0K
K3N0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgaW5zZXJ0QmFzaWNCbG9ja0JlZm9yZShMQmFzaWNC
bG9jayBiYXNpY0Jsb2NrKSB7IHJldHVybiBMTFZNSW5zZXJ0QmFzaWNCbG9ja0JlZm9yZShiYXNp
Y0Jsb2NrLCAiIik7IH0KKworc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbGxvY2EoTEJ1aWxk
ZXIgYnVpbGRlciwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkQWxsb2NhKGJ1aWxkZXIs
IHR5cGUsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBZGQoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkQWRkKGJ1
aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQW5k
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExM
Vk1CdWlsZEFuZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZFhvcihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7IHJldHVybiBMTFZNQnVpbGRYb3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRMb2FkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBwb2lu
dGVyKSB7IHJldHVybiBMTFZNQnVpbGRMb2FkKGJ1aWxkZXIsIHBvaW50ZXIsICIiKTsgfQorc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRTdG9yZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFs
dWUsIExWYWx1ZSBwb2ludGVyKSB7IHJldHVybiBMTFZNQnVpbGRTdG9yZShidWlsZGVyLCB2YWx1
ZSwgcG9pbnRlcik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkWkV4dChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZFpFeHQo
YnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJ
bnRDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1
cm4gTExWTUJ1aWxkSW50Q2FzdChidWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KK3N0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkSW50VG9QdHIoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBM
VHlwZSB0eXBlKSB7IHJldHVybiBMTFZNQnVpbGRJbnRUb1B0cihidWlsZGVyLCB2YWx1ZSwgdHlw
ZSwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFB0clRvSW50KExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkUHRyVG9J
bnQoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRJQ21wKExCdWlsZGVyIGJ1aWxkZXIsIExJbnRQcmVkaWNhdGUgY29uZCwgTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkSUNtcChidWlsZGVyLCBjb25kLCBsZWZ0
LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNlbGVjdChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtl
bikgeyByZXR1cm4gTExWTUJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5v
dFRha2VuLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVp
bGRlciwgTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIExMVk1CdWlsZEJyKGJ1aWxk
ZXIsIGRlc3RpbmF0aW9uKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDb25kQnIoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExCYXNp
Y0Jsb2NrIG5vdFRha2VuKSB7IHJldHVybiBMTFZNQnVpbGRDb25kQnIoYnVpbGRlciwgY29uZGl0
aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFVucmVh
Y2hhYmxlKExCdWlsZGVyIGJ1aWxkZXIpIHsgcmV0dXJuIExMVk1CdWlsZFVucmVhY2hhYmxlKGJ1
aWxkZXIpOyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJicmV2aWF0aW9uc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJp
bGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitib29sIGNhbkNvbXBpbGUoR3Jh
cGgmIGdyYXBoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJbmRleCA9IGdyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBjaGlsZElu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaC5jaGlsZChub2RlLCBjaGls
ZEluZGV4KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6Cisg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRD
aGVjazoKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnQ6CisgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBr
bm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExDYXBhYmlsaXRp
ZXNfaAorI2RlZmluZSBGVExDYXBhYmlsaXRpZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworYm9vbCBjYW5Db21waWxlKEdyYXBoJik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisjZW5kaWYgLy8gRlRMQ2FwYWJpbGl0aWVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitKSVRDb2RlOjpKSVRDb2Rl
KExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGZhc3RFbnRyeXBvaW50LCBD
b2RlUmVmIGFyaXR5Q2hlY2tFbnRyeXBvaW50KQorICAgIDogbV9lbmdpbmUoZW5naW5lKQorICAg
ICwgbV9mYXN0RW50cnlwb2ludChmYXN0RW50cnlwb2ludCkKKyAgICAsIG1fYXJpdHlDaGVja0Vu
dHJ5cG9pbnQoYXJpdHlDaGVja0VudHJ5cG9pbnQpCit7Cit9CisKK0pJVENvZGU6On5KSVRDb2Rl
KCkKK3sKKyAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7Cit9CisKK3Zv
aWQqIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKK3sKKyAgICByZXR1cm4gbV9mYXN0RW50cnlw
b2ludC5jb2RlKCk7Cit9CisKK3ZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZz
ZXQoc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bV9mYXN0RW50cnlwb2ludC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7Cit9
CisKK3ZvaWQqIEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90KQoreworICAgIC8v
IFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYgd2UgZGlkLCBpdCdzIG5vdCBj
bGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCisgICAgLy8gdGhyb3VnaCB0aGlzIEFQSS4KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit1bnNpZ25l
ZCBKSVRDb2RlOjpvZmZzZXRPZih2b2lkKikKK3sKKyAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3Qg
aGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIEZUTCBjb2RlLgorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBKSVRDb2RlOjpzaXplKCkK
K3sKKyAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIEZUTCBjb2RlLCB5ZXQuIE1ha2Ug
YSB3aWxkIGd1ZXNzLiBUaGlzIGlzIG1vc3RseSB1c2VkIGZvcgorICAgIC8vIEdDIGxvYWQgZXN0
aW1hdGVzLgorICAgIHJldHVybiAxMDAwOworfQorCitib29sIEpJVENvZGU6OmNvbnRhaW5zKHZv
aWQqIGFkZHJlc3MpCit7CisgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoYXQgYWRkcmVzc2VzIHRo
ZSBGVEwgY29kZSBjb250YWlucywgeWV0LgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSklUQ29kZV9o
CisjZGVmaW5lIEZUTEpJVENvZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKworI2luY2x1ZGUgPGxs
dm0vQ29yZS5oPgorI2luY2x1ZGUgPGxsdm0vRXhlY3V0aW9uRW5naW5lLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSklUQ29kZSA6IHB1YmxpYyBKU0M6OkpJ
VENvZGUgeworcHVibGljOgorICAgIEpJVENvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29k
ZVJlZiBmYXN0RW50cnlwb2ludCwgQ29kZVJlZiBhcml0eUNoZWNrRW50cnlwb2ludCk7CisgICAg
fkpJVENvZGUoKTsKKyAgICAKKyAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCk7CisgICAgdm9p
ZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKKyAgICB2b2lkKiBk
YXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpOworICAgIHVuc2lnbmVkIG9mZnNldE9m
KHZvaWQqIHBvaW50ZXJJbnRvQ29kZSk7CisgICAgc2l6ZV90IHNpemUoKTsKKyAgICBib29sIGNv
bnRhaW5zKHZvaWQqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgTExWTUV4ZWN1dGlvbkVuZ2luZVJl
ZiBtX2VuZ2luZTsKKyAgICBDb2RlUmVmIG1fZmFzdEVudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBt
X2FyaXR5Q2hlY2tFbnRyeXBvaW50OyAvLyBUaGlzIGlzbid0IGFjY2Vzc2libGU7IHdlJ3JlIGp1
c3QgdGhlIG9uZXMgcmVzcG9uc2libGUgZm9yIGhvbGRpbmcgb250byB0aGUgbWVtb3J5LgorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQp
CisKKyNlbmRpZiAvLyBGVExKSVRDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xMVk0u
aCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBE
Rkc7CisKKy8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1
Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKKy8vIHNpZ25pZmljYW50bHkgbGVzcyBk
ZWFkIGNvZGUuCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5
cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCisgICAgICAgIExWYWx1ZSBf
ZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAoaGlnaFZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9mdGNfdHlwZXNQYXNz
ZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7ICBcCisgICAgICAgIGlmICghbV9zdGF0
ZS5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gp
KSBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVDaGVjayhfZnRjX2xvd1ZhbHVlLCBf
ZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gsIChmYWlsQ29uZGl0aW9uKSk7
IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworY2xhc3MgTG93ZXJERkdUb0xMVk0geworcHVibGlj
OgorICAgIExvd2VyREZHVG9MTFZNKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBoKGdy
YXBoKQorICAgICAgICAsIG1fc3RhdGUoJmdyYXBoKQorICAgICAgICAsIG1fbG9jYWxzQm9vbGVh
bihPcGVyYW5kc0xpa2UsIGdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCisgICAg
ICAgICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIGdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJs
ZXNBdEhlYWQpCisgICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIGdyYXBoLm1fYmxv
Y2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9zdGF0ZShncmFwaCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fQorCisgICAgdm9pZCBsb3dlcigpCisgICAgeworICAgICAgICBDU3RyaW5nIG5hbWUgPSB0b0NT
dHJpbmcoY29kZUJsb2NrKCktPmhhc2goKSk7CisgICAgICAgIG1fc3RhdGUubW9kdWxlID0gTExW
TU1vZHVsZUNyZWF0ZVdpdGhOYW1lKG5hbWUuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIExU
eXBlIGFyZ3VtZW50VHlwZXNbXSA9IHsgbV9vdXQuaW50UHRyIH07CisgICAgICAgIG1fc3RhdGUu
ZnVuY3Rpb24gPSBMTFZNQWRkRnVuY3Rpb24obV9zdGF0ZS5tb2R1bGUsIG5hbWUuZGF0YSgpLCBM
TFZNRnVuY3Rpb25UeXBlKG1fb3V0LmludDY0LCBhcmd1bWVudFR5cGVzLCAxLCBmYWxzZSkpOwor
ICAgICAgICBMTFZNU2V0RnVuY3Rpb25DYWxsQ29udihtX3N0YXRlLmZ1bmN0aW9uLCBMTFZNQ0Nh
bGxDb252KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9zdGF0ZS5mdW5j
dGlvbik7CisgICAgICAgIAorICAgICAgICBtX3Byb2xvZ3VlID0gYXBwZW5kQmFzaWNCbG9jayht
X3N0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBtX2xvY2Fscy5zaXplKCk7IGluZGV4LS07KSB7
CisgICAgICAgICAgICBtX2xvY2Fsc0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQu
bV9idWlsZGVyLCBtX291dC5ib29sZWFuKTsKKyAgICAgICAgICAgIG1fbG9jYWxzMzJbaW5kZXhd
ID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQzMik7CisgICAgICAgICAg
ICBtX2xvY2FsczY0W2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQu
aW50NjQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0
LnBhcmFtKDApOworICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRh
Z1R5cGVOdW1iZXIpOworICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01h
c2spOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
OworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIG1fYmxvY2tzLmFkZChibG9jaywgYXBwZW5kQmFzaWNCbG9jayhtX3N0YXRlLmZ1
bmN0aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBDaGVjayBh
cmd1bWVudCB0eXBlcyEKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0
KG1fZ3JhcGgubV9ibG9ja3NbMF0pKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpCisgICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIAorICAgIHZvaWQgY29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCkKKyAgICB7CisgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XTsKKyAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0
KG1faGlnaEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5leHRIaWdoQmxv
Y2sgPSAwOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0lu
ZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytuZXh0
QmxvY2tJbmRleCkgeworICAgICAgICAgICAgbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbbmV4dEJsb2NrSW5kZXhdOworICAgICAgICAgICAgaWYgKG5leHRIaWdoQmxvY2spCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgTEJhc2ljQmxvY2sgbmV4dExv
d0Jsb2NrID0gbmV4dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChuZXh0SGlnaEJsb2NrKSA6IDA7
CisgICAgICAgIAorICAgICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4
dCBibG9jayBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQorICAgICAgICAvLyBnZW5l
cmF0ZWQgSVIgaW4gcm91Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3Qg
dGhlIHBlcmZvcm1hbmNlCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ug
d2UgZXhwZWN0IExMVk0gdG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8v
IG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxv
d0Jsb2NrLCBuZXh0TG93QmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB0cmFjayB0aGUgT1NSIHNpdHVhdGlvbiBoZXJlLgorICAgICAgICAKKyAgICAgICAgbV9p
bnQzMlZhbHVlcy5jbGVhcigpOworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKKyAg
ICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5j
bGVhcigpOworICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5yZXNldCgpOworICAgICAgICBtX3N0
YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KQorICAgICAgICAgICAgY29tcGlsZU5vZGUobm9kZUluZGV4KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlTm9kZSh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBtX25vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5n
KG1fbm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSIG1hZ2ljIGhlcmUu
CisgICAgICAgIAorICAgICAgICBtX2RpcmVjdGlvbiA9IChtX2N1cnJlbnROb2RlLT5mbGFncygp
ICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1
bGF0aW9uOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICBjb21waWxlU2V0TG9jYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2hv
dWxkRXhlY3V0ZUVmZmVjdHMpCisgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5v
ZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUpTQ29uc3RhbnQoKQorICAg
IHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQorICAgIHsKKyAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlv
bigpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocHJlZGlj
dGlvbiA9PSBTcGVjTm9uZSkgeworICAgICAgICAgICAgdGVybWluYXRlKEluZGVxdWF0ZUNvdmVy
YWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHZhbHVlLmlzQ2xlYXIoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0
cmFwIGluc3RlYWQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMzgzCisgICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVy
YWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24odmFsdWUubV92YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1f
bm9kZSwgbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJs
ZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1w
bGVtZW50IGRvdWJsZXMgaW4gRlRMLgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IExvY2FscyB0aGF0IGFyZSBtYXJrZWQgc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkgdGhhdCBhcmVu
J3QgYWxzbyBmb3JjZWQgdG8KKyAgICAgICAgICAgIC8vIHVzZSBkb3VibGUgZm9ybWF0LCBhbmQg
dGhhdCBoYXZlIHRoZSByaWdodCBwcmVkaWN0aW9uLCB3aWxsIGFsd2F5cyBiZQorICAgICAgICAg
ICAgLy8gc3BlY3VsYXRlZCBvbiBTZXRMb2NhbCBhbmQgd2lsbCBhbHdheXMgYmUgc3RvcmVkIGlu
dG8gYW4gYXBwcm9wcmlhdGVseQorICAgICAgICAgICAgLy8gdHlwZWQgcmVmZXJlbmNlIExWYWx1
ZS4KKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2Fs
czMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBX
ZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVyZSBiZWNhdXNlIHRoYXQgZ2V0cyB0cmVhdGVkIGlkZW50
aWNhbGx5IHRvCisgICAgICAgICAgICAvLyBKU1ZhbHVlcywgc2luY2UgY2VsbHMgYXJlIHN0b3Jl
ZCB1bnRhZ2dlZC4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlKCk7
CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlv
bigpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3Ig
T1NSLgorICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2li
bGUoKSkgeworICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBGVEwu
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBt
X291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzMzIub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgIG1fb3V0LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fs
czY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUt
PmNoaWxkMSgpKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBt
X291dC5zdG9yZShsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzT2YodmFyaWFi
bGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9vdXQuc2V0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxz
NjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNw
ZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBMVmFsdWUgZmFpbENvbmRp
dGlvbikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UpOworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0LgorICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoRXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1Zh
bHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRp
dGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQg
dG8gZm9yd2FyZC4KKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQga2lu
ZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFsdWUsIGhpZ2hW
YWx1ZSwgZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJp
bmcgdGhlIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndhcmREaXJl
Y3Rpb24uCisgICAgfQorICAgIAorICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQpCisg
ICAgeworICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwg
RWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVl
IGZhaWxDb25kaXRpb24pCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hl
Y2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Cisg
ICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9k
ZSgpLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSku
ZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2Fy
ZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmlu
ZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgorICAgIH0KKyAgICAKKyAgICB2b2lkIHR5cGVDaGVj
ayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYmFja3dh
cmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWls
Q29uZGl0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1Ig
ZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgorICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAgeworICAgICAg
ICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2lu
ZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAg
IGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgYm94ZWRS
ZXN1bHQsIGVkZ2UsIFNwZWNJbnQzMiwgbV9vdXQuYmVsb3coYm94ZWRSZXN1bHQsIG1fdGFnVHlw
ZU51bWJlcikpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhc3RUb0ludDMy
KGJveGVkUmVzdWx0KTsKKyAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNJ
bnQzMikpOworICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4g
bV9vdXQuaW50MzJaZXJvOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Q2VsbChFZGdlIGVk
Z2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChM
VmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIHVuY2hlY2tl
ZFJlc3VsdCwgZWRnZSwgU3BlY0NlbGwsCisgICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblpl
cm82NCh1bmNoZWNrZWRSZXN1bHQsIG1fdGFnTWFzaykpOworICAgICAgICAgICAgcmV0dXJuIHVu
Y2hlY2tlZFJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKKyAgICAgICAg
dGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2Uu
dXNlS2luZCgpID09IEJvb2xlYW5Vc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1
bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgdW5jaGVja2VkUmVzdWx0
LCBlZGdlLCBTcGVjQm9vbGVhbiwKKyAgICAgICAgICAgICAgICBtX291dC50ZXN0Tm9uWmVybzY0
KAorICAgICAgICAgICAgICAgICAgICBtX291dC5iaXRYb3IodW5jaGVja2VkUmVzdWx0LCBtX291
dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQ2NCh+MSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2FudCB0byB1
c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IExMVk0ga25vd3MgdGhhdCBldmVuIHRoZSBp
bnRlZ2VyCisgICAgICAgICAgICAvLyB2YWx1ZSBpcyBqdXN0IDAgb3IgMS4gQnV0IGZvciBub3cg
d2UgZG8gaXQgdGhlIGR1bWIgd2F5LgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm8o
dW5jaGVja2VkUmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0Jvb2xlYW4pKTsKKyAg
ICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xl
YW5GYWxzZTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd0pTVmFsdWUoRWRnZSBlZGdlLCBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24p
CisgICAgeworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24g
fHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
TFZhbHVlIHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgdW5ib3hl
ZFJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5hZGQobV9vdXQuemVyb0V4dCh1bmJveGVkUmVzdWx0LCBtX291dC5pbnQ2NCks
IG1fdGFnVHlwZU51bWJlcik7CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRS
ZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5zZWxlY3QodW5ib3hlZFJlc3VsdCwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVRy
dWUpLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKKyAgICAgICAgCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgfQorICAgIExWYWx1ZSBwYXlsb2FkRm9yKExW
YWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGQo
YmFzZSwgbV9vdXQuY29uc3RJbnRQdHIob3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Cisg
ICAgfQorICAgIExWYWx1ZSB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOworICAgIH0KKyAgICBMVmFsdWUgYWRkcmVzc0ZvcihpbnQgb3Bl
cmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVy
YW5kKTsKKyAgICB9CisgICAgTFZhbHVlIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgewor
ICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CisgICAgfQor
ICAgIExWYWx1ZSB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdGFn
Rm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKCkgeyByZXR1cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7IH0KKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIE91dHB1dCBtX291
dDsKKyAgICAKKyAgICBMTW9kdWxlIG1fbW9kdWxlOworICAgIExWYWx1ZSBtX2Z1bmN0aW9uOwor
ICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJh
c2ljQmxvY2s+IG1fYmxvY2tzOworICAgIAorICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBM
VmFsdWUgbV90YWdUeXBlTnVtYmVyOworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9i
b29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVz
OworICAgIAorICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFuOworICAgIE9wZXJh
bmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKKyAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7
CisgICAgCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEJhc2ljQmxvY2sqIG1faGln
aEJsb2NrOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2Rp
cmVjdGlvbjsKK307CisKK1N0YXRlIGxvd2VyREZHVG9MTFZNKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBMb3dlckRGR1RvTExWTSBsb3dlcmluZyhncmFwaCk7CisgICAgbG93ZXJpbmcubG93ZXIoKTsK
KyAgICByZXR1cm4gbG93ZXJpbmcuc3RhdGUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTExvd2VyREZHVG9MTFZNX2gKKyNkZWZpbmUgRlRMTG93ZXJERkdU
b0xMVk1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitTdGF0ZSBsb3dlckRGR1RvRlRMKERGRzo6
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExMb3dlckRGR1RvTExWTV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExPdXRwdXRfaAorI2RlZmluZSBGVExPdXRwdXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBJZGlvbWF0aWMg
TExWTSBJUiBidWlsZGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgRlRMLiBUaGlzIHVzZXMg
b3VyIG93biBsb3dlcmluZworLy8gdGVybWlub2xvZ3ksIGFuZCBoYXMgc29tZSBvZiBpdHMgb3du
IG5vdGlvbnM6CisvLworLy8gV2Ugc2F5IHRoYXQgYSAicmVmZXJlbmNlIiBpcyB3aGF0IExMVk0g
Y29uc2lkZXJzIHRvIGJlIGEgInBvaW50ZXIiLiBUaGF0IGlzLCBpdCBoYXMKKy8vIGFuIGVsZW1l
bnQgdHlwZSBhbmQgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSB0byBtZW1vcnkgYWNjZXNzIGluc3Ry
dWN0aW9ucy4gTm90ZSB0aGF0CisvLyBicm9hZGx5IHNwZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6
Ok91dHB1dCBzaG91bGQgb25seSB1c2UgcmVmZXJlbmNlcyBmb3IgYWxsb2NhJ2QKKy8vIHNsb3Rz
IGZvciBtdXRhYmxlIGxvY2FsIHZhcmlhYmxlcy4KKy8vCisvLyBXZSBzYXkgdGhhdCBhICJwb2lu
dGVyIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2Vy
LgorLy8KKy8vIFdlIHNheSB0aGF0ICJnZXQiIGFuZCAic2V0IiBhcmUgd2hhdCBMTFZNIGNvbnNp
ZGVycyB0byBiZSAibG9hZCIgYW5kICJzdG9yZSIuIEdldAorLy8gYW5kIHNldCB0YWtlIHJlZmVy
ZW5jZXMuCisvLworLy8gV2Ugc2F5IHRoYXQgImxvYWQiIGFuZCAic3RvcmUiIGFyZSBvcGVyYXRp
b25zIHRoYXQgdGFrZSBhIHBvaW50ZXIgYW5kIGFuIG9mZnNldC4KKy8vIFRoZXNlIHRyYW5zbGF0
ZSB0aGUgcG9pbnRlciArIG9mZnNldCBpbnRvIGEgcmVmZXJlbmNlIChvciwgYSBwb2ludGVyIGlu
IExMVk0tc3BlYWspCisvLyBhbmQgdXNlIGdldCBhbmQgc2V0IG9uIHRoZW0gKG9yLCBsb2FkIGFu
ZCBzdG9yZSBpbiBMTFZNLXNwZWFrKS4KKworY2xhc3MgT3V0cHV0IHsKK3B1YmxpYzoKKyAgICBP
dXRwdXQoKQorICAgICAgICA6IGJvb2xlYW4oaW50MVR5cGUoKSkKKyAgICAgICAgLCBpbnQzMihp
bnQzMlR5cGUoKSkKKyAgICAgICAgLCBpbnQ2NChpbnQ2NFR5cGUoKSkKKyAgICAgICAgLCBpbnRQ
dHIoaW50UHRyVHlwZSgpKQorICAgICAgICAsIHJlZjMyKHBvaW50ZXJUeXBlKGludDMyKSkKKyAg
ICAgICAgLCByZWY2NChwb2ludGVyVHlwZShpbnQ2NCkpCisgICAgICAgICwgcmVmUHRyKHBvaW50
ZXJUeXBlKGludFB0cikpCisgICAgICAgICwgYm9vbGVhblRydWUoY29uc3RJbnQoYm9vbGVhbiwg
dHJ1ZSkpCisgICAgICAgICwgYm9vbGVhbkZhbHNlKGNvbnN0SW50KGJvb2xlYW4sIGZhbHNlKSkK
KyAgICAgICAgLCBpbnQzMlplcm8oY29uc3RJbnQoaW50MzIsIDApKQorICAgICAgICAsIGludDY0
WmVybyhjb25zdEludChpbnQ2NCwgMCkpCisgICAgICAgICwgaW50UHRyWmVybyhjb25zdEludChp
bnRQdHIsIDApKQorICAgICAgICAsIG1fZnVuY3Rpb24oMCkKKyAgICAgICAgLCBtX2J1aWxkZXIo
MCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgICAgICwgbV9uZXh0QmxvY2soMCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIH5PdXRwdXQoKQorICAgIHsKKyAgICAgICAgTExWTURpc3Bvc2VC
dWlsZGVyKG1fYnVpbGRlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZShMVmFs
dWUgZnVuY3Rpb24pCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uID0gZnVuY3Rpb247CisgICAg
ICAgIG1fYnVpbGRlciA9IExMVk1DcmVhdGVCdWlsZGVyKCk7CisgICAgfQorICAgIAorICAgIC8v
IFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSdyZSBzdGFydGluZyBjb2RlIGdlbmVyYXRpb24gZm9y
IGEgaGlnaC1sZXZlbAorICAgIC8vIGJhc2ljIGJsb2NrLgorICAgIHZvaWQgYXBwZW5kVG8oTEJh
c2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykKKyAgICB7CisgICAgICAgIG1f
bmV4dEJsb2NrID0gbmV4dEJsb2NrOworICAgICAgICAKKyAgICAgICAgYXBwZW5kVG8oYmxvY2sp
OworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgbmV3QmxvY2soKSBhbmQgYXBwZW5kVG8oKSBpZiB5
b3UncmUgc3BsaXR0aW5nIHRoZSBoaWdoLWxldmVsIGJhc2ljCisgICAgLy8gYmxvY2sgaW50byBt
dWx0aXBsZSBsb3ctbGV2ZWwgYmFzaWMgYmxvY2tzLgorICAgIHZvaWQgYXBwZW5kVG8oTEJhc2lj
QmxvY2sgYmxvY2spCisgICAgeworICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgICAgIAor
ICAgICAgICBMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQobV9idWlsZGVyLCBibG9jayk7CisgICAg
fQorICAgIExCYXNpY0Jsb2NrIG5ld0Jsb2NrKCkKKyAgICB7CisgICAgICAgIGlmICghbV9uZXh0
QmxvY2spCisgICAgICAgICAgICByZXR1cm4gYXBwZW5kQmFzaWNCbG9jayhtX2Z1bmN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIGluc2VydEJhc2ljQmxvY2tCZWZvcmUobV9uZXh0QmxvY2spOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgcGFyYW0odW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGdldFBh
cmFtKG1fZnVuY3Rpb24sIGluZGV4KTsgfQorICAgIExWYWx1ZSBjb25zdEJvb2woYm9vbCB2YWx1
ZSkgeyByZXR1cm4gY29uc3RJbnQoYm9vbGVhbiwgdmFsdWUpOyB9CisgICAgTFZhbHVlIGNvbnN0
SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50MzIsIHZhbHVlLCBTaWdu
RXh0ZW5kKTsgfQorICAgIExWYWx1ZSBjb25zdEludFB0cihpbnRwdHJfdCB2YWx1ZSkgeyByZXR1
cm4gY29uc3RJbnQoaW50UHRyLCB2YWx1ZSwgU2lnbkV4dGVuZCk7IH0KKyAgICBMVmFsdWUgY29u
c3RJbnQ2NChpbnQ2NF90IHZhbHVlKSB7IHJldHVybiBjb25zdEludChpbnQ2NCwgdmFsdWUsIFNp
Z25FeHRlbmQpOyB9CisgICAgCisgICAgTFZhbHVlIGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBidWlsZEFkZChtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExW
YWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRBbmQo
bV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYml0WG9yKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkWG9yKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQp
OyB9CisgICAgCisgICAgTFZhbHVlIHplcm9FeHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IHJldHVybiBidWlsZFpFeHQobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KKyAgICBMVmFsdWUg
aW50Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50Q2FzdCht
X2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQorICAgIExWYWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGludDMyKTsgfQorICAgIAorICAgIExWYWx1
ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVm
ZXJlbmNlKTsgfQorICAgIHZvaWQgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkg
eyBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KKyAgICAKKyAgICBM
VmFsdWUgbG9hZChMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCwgTFR5cGUgcmVmVHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIG9m
ZnNldCA/IGFkZChwb2ludGVyLCBjb25zdEludFB0cihvZmZzZXQpKSA6IHBvaW50ZXIsIHJlZlR5
cGUpKTsKKyAgICB9CisgICAgdm9pZCBzdG9yZShMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVy
LCBwdHJkaWZmX3Qgb2Zmc2V0LCBMVHlwZSByZWZUeXBlKQorICAgIHsKKyAgICAgICAgc2V0KHZh
bHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgb2Zmc2V0ID8gYWRkKHBvaW50ZXIsIGNvbnN0
SW50UHRyKG9mZnNldCkpIDogcG9pbnRlciwgcmVmVHlwZSkpOworICAgIH0KKyAgICBMVmFsdWUg
bG9hZDMyKExWYWx1ZSBwb2ludGVyLCBMVmFsdWUgb2Zmc2V0ID0gMCkgeyByZXR1cm4gbG9hZChw
b2ludGVyLCBvZmZzZXQsIHJlZjMyKTsgfQorICAgIExWYWx1ZSBsb2FkNjQoTFZhbHVlIHBvaW50
ZXIsIExWYWx1ZSBvZmZzZXQgPSAwKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIG9mZnNldCwgcmVm
NDYpOyB9CisgICAgTFZhbHVlIGxvYWRQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgb2Zmc2V0ID0g
MCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJlZlB0cik7IH0KKyAgICB2b2lkIHN0
b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgTFZhbHVlIG9mZnNldCA9IDApIHsg
c3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmMzIpOyB9CisgICAgdm9pZCBzdG9yZTY0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIsIExWYWx1ZSBvZmZzZXQgPSAwKSB7IHN0b3Jl
KHZhbHVlLCBwb2ludGVyLCBvZmZzZXQsIHJlZjY0KTsgfQorICAgIHZvaWQgc3RvcmVQdHIoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgTFZhbHVlIG9mZnNldCA9IDApIHsgc3RvcmUodmFs
dWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmUHRyKTsgfQorICAgIAorICAgIExWYWx1ZSBlcXVhbChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBM
TFZNSW50RVEsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50TkUs
IGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBhYm92ZShMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50VUdULCBsZWZ0LCByaWdo
dCk7IH0KKyAgICBMVmFsdWUgYWJvdmVPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRVR0UsIGxlZnQsIHJpZ2h0KTsg
fQorICAgIExWYWx1ZSBiZWxvdyhMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBi
dWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50VUxULCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFs
dWUgYmVsb3dPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxk
SUNtcChtX2J1aWxkZXIsIExMVk1JbnRVTEUsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBn
cmVhdGVyVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAo
bV9idWlsZGVyLCBMTFZNSW50U0dULCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgZ3JlYXRl
clRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNt
cChtX2J1aWxkZXIsIExMVk1JbnRTR0UsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBsZXNz
VGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWls
ZGVyLCBMTFZNSW50U0xULCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbGVzc1RoYW5PckVx
dWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxk
ZXIsIExMVk1JbnRTTEUsIGxlZnQsIHJpZ2h0KTsgfQorICAgIAorICAgIExWYWx1ZSBpc1plcm82
NChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGVxdWFsKHZhbHVlLCBpbnQ2NFplcm8pOyB9CisgICAg
TFZhbHVlIG5vdFplcm82NChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG5vdEVxdWFsKHZhbHVlLCBp
bnQ2NFplcm8pOyB9CisgICAgCisgICAgTFZhbHVlIHRlc3ROb25aZXJvNjQoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90WmVybzY0KGJpdEFuZCh2YWx1ZSwgbWFkaykpOyB9
CisgICAgCisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZh
bHVlIG5vdFRha2VuKSB7IHJldHVybiBidWlsZFNlbGVjdChtX2J1aWxkZXIsIHZhbHVlLCB0YWtl
biwgbm90VGFrZW4pOyB9CisgICAgCisgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrIGRlc3RpbmF0
aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KKyAgICB2b2lkIGJyYW5j
aChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgTEJhc2ljQmxvY2sgbm90VGFr
ZW4pIHsgYnVpbGRDb25kQnIobV9idWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbik7
IH0KKyAgICAKKyAgICB2b2lkIHVucmVhY2hhYmxlKCkgeyBidWlsZFVucmVhY2hhYmxlKG1fYnVp
bGRlcik7IH0KKyAgICAKKyAgICBjb25zdCBMVHlwZSBib29sZWFuOworICAgIGNvbnN0IExUeXBl
IGludDMyOworICAgIGNvbnN0IExUeXBlIGludDY0OworICAgIGNvbnN0IExUeXBlIGludFB0cjsK
KyAgICBjb25zdCBMVHlwZSByZWYzMjsKKyAgICBjb25zdCBMVHlwZSByZWY2NDsKKyAgICBjb25z
dCBMVHlwZSByZWZQdHI7CisgICAgY29uc3QgTFZhbHVlIGJvb2xlYW5UcnVlOworICAgIGNvbnN0
IExWYWx1ZSBib29sZWFuRmFsc2U7CisgICAgY29uc3QgTFZhbHVlIGludDMyWmVybzsKKyAgICBj
b25zdCBMVmFsdWUgaW50NjRaZXJvOworICAgIGNvbnN0IExWYWx1ZSBpbnRQdHJaZXJvOworCisg
ICAgTFZhbHVlIG1fZnVuY3Rpb247CisgICAgTEJ1aWxkZXIgbV9idWlsZGVyOworICAgIExCYXNp
Y0Jsb2NrIG1fYmxvY2s7CisgICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2s7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTE91dHB1dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
UnVuQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
UnVuQmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExSdW5CYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFJ1bkJhY2tl
bmRfaAorI2RlZmluZSBGVExSdW5CYWNrZW5kX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgcnVuQmFja2VuZChTdGF0ZSwgUmVm
UHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKworI2VuZGlmIC8vIEZUTFJ1bkJhY2tlbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExTdGF0ZV9o
CisjZGVmaW5lIEZUTFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkZUTEFi
YnJldmlhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1
Y3QgU3RhdGUgIHsKKyAgICBTdGF0ZShERkc6OkdyYXBoKiBncmFwaCkKKyAgICAgICAgOiBncmFw
aChncmFwaCkKKyAgICAgICAgLCBtb2R1bGUoMCkKKyAgICAgICAgLCBmdW5jdGlvbigwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkg
U3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICAgIC8vIEZUTCBwaGFzZXMgdG8g
cHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24u
CisgICAgREZHOjpHcmFwaCogZ3JhcGg7CisgICAgTE1vZHVsZSBtb2R1bGU7CisgICAgTFZhbHVl
IGZ1bmN0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NiArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZh
bHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCiAg
ICAgXAorICAgIHYoYm9vbCwgdXNlRXhwZXJpbWVudGFsRlRMLCBmYWxzZSkgXAorICAgIFwKICAg
ICB2KGJvb2wsIGVuYWJsZVByb2ZpbGVyLCBmYWxzZSkgXAogICAgIFwKICAgICB2KHVuc2lnbmVk
LCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApIFwK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTQ3MDE0KQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDYgKzgwOCwxMCBAQAogI2VuZGlmCiAjZW5k
aWYKIAorI2lmIENQVShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgRU5BQkxFX0ZU
TF9KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgZW5hYmxl
IHRoZSBMTEludCBDIExvb3A6ICovCiAjaWYgIUVOQUJMRShKSVQpCiAjdW5kZWYgRU5BQkxFX0xM
SU5UICAgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195668</attachid>
            <date>2013-03-28 16:09:57 -0700</date>
            <delta_ts>2013-03-28 17:04:21 -0700</delta_ts>
            <desc>lowering is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>63234</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKIAogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07
CiAKK2VudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6CkBAIC01OSw2ICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgT3RoZXJUcmFpdHM+Cisg
ICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVLCBP
dGhlclRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
bV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkxvY2Fs
cygpKTsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQ3MDE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw2ICsxMTIsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXM7CiAgICAgfQogICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRzVHlw
ZUNoZWNrKGVkZ2Uubm9kZSgpLCB0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIH0KKyAgICAKKyAg
ICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CisgICAg
fQorICAgIAogICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFs
aXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRp
Y2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAgLy8gZXhlY3V0
aW9uLgpAQCAtMTg1LDE5ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZpbHRlckVkZ2VCeVVzZShOb2RlKiBub2RlLCBFZGdlJiBlZGdlKQogICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBLbm93bkludDMyVXNlOgotICAgICAgICBjYXNlIEtub3duTnVtYmVyVXNlOgot
ICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
LSAgICAgICAgICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJG
b3IoZWRnZS51c2VLaW5kKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VL
aW5kKCkpIHx8ICFuZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgIGZpbHRlckJ5VHlwZShu
b2RlLCBlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ3
MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSwxMCBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1
ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCisjaW5jbHVkZSAiRlRMUnVuQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9w
dGlvbnMuaCIKIApAQCAtMTUzLDYgKzE1NywxMyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBp
bGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZh
bGlkYXRlKGRmZywgbW9kZUZvckZpbmFsVmFsaWRhdGUpOwogICAgIAorICAgIGlmIChPcHRpb25z
Ojp1c2VFeHBlcmltZW50YWxGVEwoKQorICAgICAgICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxl
RnVuY3Rpb24KKyAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgRlRM
OjpydW5CYWNrZW5kKEZUTDo6bG93ZXJERkdUb0xMVk0oZGZnKSwgaml0Q29kZSwgKmppdENvZGVX
aXRoQXJpdHlDaGVjayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICBK
SVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChj
b21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDcwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgzNSw3ICsxODM1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwot
ICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNQcm9maXRhYmxlVG9VbmJveCgpKQor
ICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNDYsNyArMjI0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgRWRn
ZSk7CiAgICAgCiAgICAgLy8gSGVscGVycyBmb3IgcGVyZm9ybWluZyB0eXBlIGNoZWNrcyBvbiBh
biBlZGdlIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gcmVnaXN0ZXJzLgotICAgIGJvb2wgbmVlZHNUeXBl
Q2hlY2soRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpIHsgcmV0
dXJuIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOyB9
CisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVz
UGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBl
c1Bhc3NlZFRocm91Z2gpOyB9CiAgICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjayhKU1ZhbHVlU291
cmNlLCBFZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgdHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Us
IEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3Vy
Y2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYpOwpAQCAtMjg1MSw3ICsy
ODUxLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25OdW1iZXJVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUs
IG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzRG91YmxlKGVkZ2UudXNlS2lu
ZCgpKSk7CiAgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCiAgICAgICAgICAgICBm
cHIoKTsKICAgICB9CkBAIC0yOTAwLDcgKzI5MDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX2ppdCk7CiAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8
fCAoZWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNl
bGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8IGVkZ2UudXNlS2luZCgpID09
IFN0cmluZ1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBTdHJpbmdPYmplY3RVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nT3JT
dHJpbmdPYmplY3RVc2UpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKICAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0K
QEAgLTMwMDYsOSArMzAwNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJp
bmdPYmplCiB9CiAKICNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291cmNlLCBlZGdlLCB0eXBlc1Bh
c3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAotICAgICAgICBpZiAoIW5lZWRzVHlwZUNo
ZWNrKChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAgICAgICAgICAgXAorICAgICAg
ICBKU1ZhbHVlU291cmNlIF9kdGNfc291cmNlID0gKHNvdXJjZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBFZGdlIF9kdGNfZWRnZSA9IChlZGdlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZHRj
X3R5cGVzUGFzc2VkVGhyb3VnaCA9IHR5cGVzUGFzc2VkVGhyb3VnaDsgICAgXAorICAgICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKF9kdGNfZWRnZSwgX2R0Y190eXBlc1Bhc3NlZFRocm91Z2gpKSAg
ICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0eXBlQ2hlY2soKHNvdXJjZSksIChl
ZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCksIChqdW1wVG9GYWlsKSk7IFwKKyAgICAgICAgdHlw
ZUNoZWNrKF9kdGNfc291cmNlLCBfZHRjX2VkZ2UsIF9kdGNfdHlwZXNQYXNzZWRUaHJvdWdoLCAo
anVtcFRvRmFpbCkpOyBcCiAgICAgfSB3aGlsZSAoMCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9u
IDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw2ICs5NSwyNSBAQCBBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBl
IHR5cGVGaWx0ZXJGCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkTm90SGF2
ZVR5cGVDaGVjayhVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToKKyAgICBjYXNlIEtub3duTnVt
YmVyVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgIGNhc2UgS25vd25TdHJpbmdVc2U6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBtYXlIYXZlVHlwZUNoZWNrKFVzZUtp
bmQga2luZCkKK3sKKyAgICByZXR1cm4gIXNob3VsZE5vdEhhdmVUeXBlQ2hlY2soa2luZCk7Cit9
CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCiB7CiAgICAg
c3dpdGNoIChraW5kKSB7CkBAIC0xMDgsNiArMTI3LDM0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBp
c051bWVyaWNhbChVc2VLaW5kIGsKICAgICB9CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBpc0Rv
dWJsZShVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBLbm93
bkludDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICBjYXNlIE51bWJlclVzZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworQUxXQVlTX0lOTElORSBib29sIGlzQ2VsbChVc2VLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDZWxsVXNlOgorICAgIGNhc2UgS25vd25D
ZWxsVXNlOgorICAgIGNhc2UgT2JqZWN0VXNlOgorICAgIGNhc2UgU3RyaW5nVXNlOgorICAgIGNh
c2UgS25vd25TdHJpbmdVc2U6CisgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBT
dHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTEFiYnJldmlhdGlvbnNfaAorI2RlZmluZSBGVExBYmJyZXZpYXRpb25zX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
IDxsbHZtL0NvcmUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBU
aGlzIGZpbGUgY29udGFpbnMgc2hvcnQtZm9ybSBjYWxscyBpbnRvIHRoZSBMTFZNIEMgQVBJLiBJ
dCBpcyBtZWFudCB0bworLy8gc2F2ZSB0eXBpbmcgYW5kIG1ha2UgY29kZSBjbGVhcmVyLiBJZiB3
ZSBldmVyIGNhbGwgYW4gTExWTSBDIEFQSSBmdW5jdGlvbgorLy8gbW9yZSB0aGFuIG9uY2UgaW4g
dGhlIEZUTCwgd2Ugc2hvdWxkIGFkZCBhIHNob3J0Y3V0IGZvciBpdCBoZXJlLgorCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyNlcnJvciAiVGhlIEZUTCBiYWNrZW5kIGFzc3VtZXMgdGhhdCBwb2lu
dGVycyBhcmUgNjQtYml0LiIKKyNlbmRpZgorCit0eXBlZGVmIExMVk1CYXNpY0Jsb2NrUmVmIExC
YXNpY0Jsb2NrOwordHlwZWRlZiBMTFZNQnVpbGRlclJlZiBMQnVpbGRlcjsKK3R5cGVkZWYgTExW
TUludFByZWRpY2F0ZSBMSW50UHJlZGljYXRlOwordHlwZWRlZiBMTFZNTW9kdWxlUmVmIExNb2R1
bGU7Cit0eXBlZGVmIExMVk1UeXBlUmVmIExUeXBlOwordHlwZWRlZiBMTFZNVmFsdWVSZWYgTFZh
bHVlOworCitzdGF0aWMgaW5saW5lIExUeXBlIGludDFUeXBlKCkgeyByZXR1cm4gTExWTUludDFU
eXBlKCk7IH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgaW50MzJUeXBlKCkgeyByZXR1cm4gTExWTUlu
dDMyVHlwZSgpOyB9CitzdGF0aWMgaW5saW5lIExUeXBlIGludDY0VHlwZSgpIHsgcmV0dXJuIExM
Vk1JbnQ2NFR5cGUoKTsgfQorc3RhdGljIGlubGluZSBMVHlwZSBpbnRQdHJUeXBlKCkgeyByZXR1
cm4gTExWTUludDY0VHlwZSgpOyB9CisKK3N0YXRpYyBpbmxpbmUgTFR5cGUgcG9pbnRlclR5cGUo
TFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTVBvaW50ZXJUeXBlKHR5cGUsIDApOyB9CisKK3N0YXRp
YyBpbmxpbmUgTFZhbHVlIGdldFBhcmFtKExWYWx1ZSBmdW5jdGlvbiwgdW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIExMVk1HZXRQYXJhbShmdW5jdGlvbiwgaW5kZXgpOyB9CisKK2VudW0gQml0RXh0
ZW5zaW9uIHsgWmVyb0V4dGVuZCwgU2lnbkV4dGVuZCB9Oworc3RhdGljIGlubGluZSBMVmFsdWUg
Y29uc3RJbnQoTFR5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlLCBCaXRFeHRlbnNp
b24gZXh0ZW5zaW9uKSB7IHJldHVybiBMTFZNQ29uc3RJbnQodHlwZSwgdmFsdWUsIGV4dGVuc2lv
biA9PSBTaWduRXh0ZW5kKTsgfQorCitzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJh
c2ljQmxvY2soTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBMTFZNQXBwZW5kQmFzaWNCbG9jayhm
dW5jdGlvbiwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGluc2VydEJhc2ljQmxv
Y2tCZWZvcmUoTEJhc2ljQmxvY2sgYmFzaWNCbG9jaykgeyByZXR1cm4gTExWTUluc2VydEJhc2lj
QmxvY2tCZWZvcmUoYmFzaWNCbG9jaywgIiIpOyB9CisKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkQWxsb2NhKExCdWlsZGVyIGJ1aWxkZXIsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWls
ZEFsbG9jYShidWlsZGVyLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
QWRkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJu
IExMVk1CdWlsZEFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZEFuZChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBMTFZNQnVpbGRBbmQoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQor
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkWG9yKGJ1aWxkZXIsIGxlZnQsIHJp
Z2h0LCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkTG9hZChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgcG9pbnRlcikgeyByZXR1cm4gTExWTUJ1aWxkTG9hZChidWlsZGVyLCBwb2lu
dGVyLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU3RvcmUoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlcikgeyByZXR1cm4gTExWTUJ1aWxkU3Rv
cmUoYnVpbGRlciwgdmFsdWUsIHBvaW50ZXIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZFpFeHQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVy
biBMTFZNQnVpbGRaRXh0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkSW50Q2FzdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZEludENhc3QoYnVpbGRlciwgdmFsdWUsIHR5cGUp
OyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEludFRvUHRyKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkSW50VG9QdHIoYnVp
bGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQdHJU
b0ludChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJu
IExMVk1CdWlsZFB0clRvSW50KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkSUNtcChMQnVpbGRlciBidWlsZGVyLCBMSW50UHJlZGljYXRlIGNv
bmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZElDbXAoYnVp
bGRlciwgY29uZCwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2Vu
LCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIExMVk1CdWlsZFNlbGVjdChidWlsZGVyLCBjb25k
aXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBM
TFZNQnVpbGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ29uZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Js
b2NrIHRha2VuLCBMQmFzaWNCbG9jayBub3RUYWtlbikgeyByZXR1cm4gTExWTUJ1aWxkQ29uZEJy
KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuKTsgfQorc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRSZXQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlKSB7IHJldHVybiBM
TFZNQnVpbGRSZXQoYnVpbGRlciwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZFVucmVhY2hhYmxlKExCdWlsZGVyIGJ1aWxkZXIpIHsgcmV0dXJuIExMVk1CdWlsZFVucmVhY2hh
YmxlKGJ1aWxkZXIpOyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJicmV2aWF0aW9uc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
Q2FwYWJpbGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitib29sIGNhbkNvbXBp
bGUoR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJbmRleCA9IGdyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBj
aGlsZEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaC5jaGlsZChub2Rl
LCBjaGlsZEluZGV4KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVudHlwZWRV
c2U6CisgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICBjYXNl
IEtub3duSW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5nIGVsc2Uu
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CisgICAgICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgICAgICAgICAv
LyBUaGVzZSBhcmUgT0suCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIC8vIERvbid0IGtub3cgaG93IHRvIGhhbmRsZSBhbnl0aGlu
ZyBlbHNlLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTENhcGFiaWxpdGllc19oCisjZGVmaW5lIEZUTENhcGFiaWxp
dGllc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitib29sIGNhbkNvbXBpbGUoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExDYXBhYmls
aXRpZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEpJVENvZGUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK0pJVENvZGU6OkpJVENvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBl
bmdpbmUsIENvZGVSZWYgZmFzdEVudHJ5cG9pbnQsIENvZGVSZWYgYXJpdHlDaGVja0VudHJ5cG9p
bnQpCisgICAgOiBtX2VuZ2luZShlbmdpbmUpCisgICAgLCBtX2Zhc3RFbnRyeXBvaW50KGZhc3RF
bnRyeXBvaW50KQorICAgICwgbV9hcml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrRW50cnlw
b2ludCkKK3sKK30KKworSklUQ29kZTo6fkpJVENvZGUoKQoreworICAgIExMVk1EaXNwb3NlRXhl
Y3V0aW9uRW5naW5lKG1fZW5naW5lKTsKK30KKwordm9pZCogSklUQ29kZTo6YWRkcmVzc0ZvckNh
bGwoKQoreworICAgIHJldHVybiBtX2Zhc3RFbnRyeXBvaW50LmNvZGUoKTsKK30KKwordm9pZCog
SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQoreworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2Zhc3RFbnRyeXBvaW50LmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKK30KKwordm9pZCogSklUQ29kZTo6ZGF0YUFk
ZHJlc3NBdE9mZnNldChzaXplX3QpCit7CisgICAgLy8gV2UgY2FuJ3QgcGF0Y2ggRlRMIGNvZGUs
IHlldC4gRXZlbiBpZiB3ZSBkaWQsIGl0J3Mgbm90IGNsZWFyIHRoYXQgd2Ugd291bGQgZG8gc28K
KyAgICAvLyB0aHJvdWdoIHRoaXMgQVBJLgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQq
KQoreworICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUg
RlRMIGNvZGUuCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworc2l6ZV90IEpJVENvZGU6OnNpemUoKQoreworICAgIC8vIFdlIGRvbid0IGtub3cg
dGhlIHNpemUgb2YgRlRMIGNvZGUsIHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9z
dGx5IHVzZWQgZm9yCisgICAgLy8gR0MgbG9hZCBlc3RpbWF0ZXMuCisgICAgcmV0dXJuIDEwMDA7
Cit9CisKK2Jvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCogYWRkcmVzcykKK3sKKyAgICAvLyBX
ZSBoYXZlIG5vIGlkZWEgd2hhdCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQu
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExKSVRDb2RlX2gKKyNkZWZpbmUgRlRMSklUQ29kZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiSklUQ29kZS5oIgorCisjaW5jbHVkZSA8bGx2bS9Db3JlLmg+CisjaW5jbHVkZSA8bGx2
bS9FeGVjdXRpb25FbmdpbmUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
CitjbGFzcyBKSVRDb2RlIDogcHVibGljIEpTQzo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgSklU
Q29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmLCBDb2RlUmVmIGZhc3RFbnRyeXBvaW50LCBDb2Rl
UmVmIGFyaXR5Q2hlY2tFbnRyeXBvaW50KTsKKyAgICB+SklUQ29kZSgpOworICAgIAorICAgIENv
ZGVQdHIgYWRkcmVzc0ZvckNhbGwoKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpOworICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90
IG9mZnNldCk7CisgICAgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKTsK
KyAgICBzaXplX3Qgc2l6ZSgpOworICAgIGJvb2wgY29udGFpbnModm9pZCopOworICAgIAorcHJp
dmF0ZToKKyAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOworICAgIENvZGVSZWYg
bV9mYXN0RW50cnlwb2ludDsKKyAgICBDb2RlUmVmIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7IC8v
IFRoaXMgaXNuJ3QgYWNjZXNzaWJsZTsgd2UncmUganVzdCB0aGUgb25lcyByZXNwb25zaWJsZSBm
b3IgaG9sZGluZyBvbnRvIHRoZSBtZW1vcnkuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8vIEZUTEpJVENvZGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjI3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworLy8gVXNpbmcgdGhpcyBpbnN0
ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBj
cmVhdGluZworLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KKyNkZWZpbmUgRlRMX1RZ
UEVfQ0hFQ0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29u
ZGl0aW9uKSBkbyB7IFwKKyAgICAgICAgTFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRWRnZSBfZnRjX2hpZ2hW
YWx1ZSA9IChoaWdoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQYXNzZWRU
aHJvdWdoKTsgIFwKKyAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGln
aFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgdHlwZUNoZWNrKF9mdGNfbG93VmFsdWUsIF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVz
UGFzc2VkVGhyb3VnaCwgKGZhaWxDb25kaXRpb24pKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQor
CitjbGFzcyBMb3dlckRGR1RvTExWTSB7CitwdWJsaWM6CisgICAgTG93ZXJERkdUb0xMVk0oR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9zdGF0ZSgm
Z3JhcGgpCisgICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgZ3JhcGgubV9i
bG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRz
TGlrZSwgZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xv
Y2FsczY0KE9wZXJhbmRzTGlrZSwgZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkK
KyAgICAgICAgLCBtX3N0YXRlKGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIGxvd2VyKCkKKyAg
ICB7CisgICAgICAgIENTdHJpbmcgbmFtZSA9IHRvQ1N0cmluZyhjb2RlQmxvY2soKS0+aGFzaCgp
KTsKKyAgICAgICAgbV9zdGF0ZS5tb2R1bGUgPSBMTFZNTW9kdWxlQ3JlYXRlV2l0aE5hbWUobmFt
ZS5kYXRhKCkpOworICAgICAgICAKKyAgICAgICAgTFR5cGUgYXJndW1lbnRUeXBlc1tdID0geyBt
X291dC5pbnRQdHIgfTsKKyAgICAgICAgbV9zdGF0ZS5mdW5jdGlvbiA9IExMVk1BZGRGdW5jdGlv
bihtX3N0YXRlLm1vZHVsZSwgbmFtZS5kYXRhKCksIExMVk1GdW5jdGlvblR5cGUobV9vdXQuaW50
NjQsIGFyZ3VtZW50VHlwZXMsIDEsIGZhbHNlKSk7CisgICAgICAgIExMVk1TZXRGdW5jdGlvbkNh
bGxDb252KG1fc3RhdGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuaW5pdGlhbGl6ZShtX3N0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IG1fcHJvbG9ndWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fc3RhdGUuZnVuY3Rpb24pOworICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IG1fbG9jYWxzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fbG9jYWxzQm9v
bGVhbltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmJvb2xlYW4p
OworICAgICAgICAgICAgbV9sb2NhbHMzMltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1
aWxkZXIsIG1fb3V0LmludDMyKTsKKyAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVp
bGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucGFyYW0oMCk7CisgICAgICAgIG1fdGFn
VHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CisgICAgICAgIG1f
dGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgICAgIGlmICghbV9ibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2Jsb2NrLCBh
cHBlbmRCYXNpY0Jsb2NrKG1fc3RhdGUuZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGFkZEZsdXNo
ZWRMb2NhbE9wUm9vdHMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xvc2VPdmVy
Rmx1c2hlZExvY2FsT3BzKCk7CisgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9j
a3NbMF0pKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCisg
ICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3BSb290cygpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0Lmxhc3QoKTsKKyAgICAg
ICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19OT0RFX1RPX1RPX0NISUxEUkVOKG1fZ3Jh
cGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlm
IChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNoZWRM
b2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICB2b2lkIGFkZEZsdXNoZWRM
b2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2Nh
bE9wKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cmFuc2ZlckFuZENoZWNr
QXJndW1lbnRzKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9y
eSBoZXJlLgorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLmNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZSgp
OworICAgICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xsIGJlIGFjY2Vzc2lu
ZyBpdCB0aHJvdWdoIGxvYWRzIGFuZCBzdG9yZXMKKyAgICAgICAgICAgIC8vIGFueXdheSAtIHRo
ZXJlJ3Mgbm8gcG9pbnQgaW4gdHJhbnNmZXJpbmcgaXQgb3V0LgorICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KHBheWxvYWRG
b3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJp
YWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hlY2tOb3RJbnQzMihq
c1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFs
dWUpLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2Rl
LCBjaGVja05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQo
anNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hlY2tOb3RC
b29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9v
bGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwg
bV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAg
IHsKKyAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOwor
ICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2sp
OworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogbmV4dEhpZ2hCbG9jayA9IDA7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0
QmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK25leHRCbG9ja0luZGV4KSB7
CisgICAgICAgICAgICBuZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tuZXh0QmxvY2tJ
bmRleF07CisgICAgICAgICAgICBpZiAobmV4dEhpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBMQmFzaWNCbG9jayBuZXh0TG93QmxvY2sgPSBuZXh0
SGlnaEJsb2NrID8gbV9ibG9ja3MuZ2V0KG5leHRIaWdoQmxvY2spIDogMDsKKyAgICAgICAgCisg
ICAgICAgIC8vIEFsbCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVz
IHVzIHRoZSBhYmlsaXR5IHRvIGtlZXAgdGhlCisgICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiBy
b3VnaGx5IHByb2dyYW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFu
Y2UKKyAgICAgICAgLy8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExW
TSB0byByZW9yZGVyIHRoaW5ncykgYnV0IGl0IHdpbGwKKyAgICAgICAgLy8gbWFrZSBJUiBkdW1w
cyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG5leHRM
b3dCbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYWNrIHRo
ZSBPU1Igc2l0dWF0aW9uIGhlcmUuCisgICAgICAgIAorICAgICAgICBtX2ludDMyVmFsdWVzLmNs
ZWFyKCk7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX2Jvb2xl
YW5WYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7CisgICAg
ICAgIAorICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CisgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKG1faGlnaEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
CisgICAgICAgICAgICBjb21waWxlTm9kZShub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIG1fbm9k
ZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBz
aG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
IHJldHVybjsgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4KKyAgICAgICAgCisg
ICAgICAgIG1fZGlyZWN0aW9uID0gKG1fY3VycmVudE5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNG
b3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0
YW50OgorICAgICAgICAgICAgY29tcGlsZUpTQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY29tcGlsZUdldExvY2FsKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAg
IGNvbXBpbGVTZXRMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW92
SGludEFuZENoZWNrOgorICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGNvbXBp
bGVQaGFudG9tKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAg
ICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgICAgICBjb21waWxl
UmV0dXJuKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQorICAg
ICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVKU0NvbnN0YW50KCkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtX2dyYXBo
LnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZUdldExvY2FsKCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZShJbmRlcXVhdGVDb3ZlcmFnZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJhcCBpbnN0ZWFkLgorICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MworICAg
ICAgICAgICAgdGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUp
KQorICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDMy
KHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQ2NChhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJs
ZSgpKSB7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBkb3VibGVzIGluIEZUTC4K
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBMb2NhbHMgdGhhdCBhcmUgbWFya2Vk
IHNob3VsZFVuYm94SWZQb3NzaWJsZSgpIHRoYXQgYXJlbid0IGFsc28gZm9yY2VkIHRvCisgICAg
ICAgICAgICAvLyB1c2UgZG91YmxlIGZvcm1hdCwgYW5kIHRoYXQgaGF2ZSB0aGUgcmlnaHQgcHJl
ZGljdGlvbiwgd2lsbCBhbHdheXMgYmUKKyAgICAgICAgICAgIC8vIHNwZWN1bGF0ZWQgb24gU2V0
TG9jYWwgYW5kIHdpbGwgYWx3YXlzIGJlIHN0b3JlZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkKKyAg
ICAgICAgICAgIC8vIHR5cGVkIHJlZmVyZW5jZSBMVmFsdWUuCisgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAg
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29s
ZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV2Ugc2tpcCB0aGUgQ2VsbCBjYXNlIGhl
cmUgYmVjYXVzZSB0aGF0IGdldHMgdHJlYXRlZCBpZGVudGljYWxseSB0bworICAgICAgICAgICAg
Ly8gSlNWYWx1ZXMsIHNpbmNlIGNlbGxzIGFyZSBzdG9yZWQgdW50YWdnZWQuCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQo
bV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVTZXRMb2NhbCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZSgpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgYm9vbCBuZWVk
c0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KKyAgICAgICAg
CisgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZh
bHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUo
dmFsdWUsIHBheWxvYWRPZih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2Fs
czY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAobmVl
ZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWUsIGFkZHJl
c3NPZih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkgeworICAgICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAg
ICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgICAgICBtX291dC5z
dG9yZShsb3dKU3ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzT2YodmFyaWFibGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAg
ICAgICBtX291dC5zdG9yZSh2YWx1ZSwgYWRkcmVzc09mKHZhcmlhYmxlLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnNl
dCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
IGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWUsIGFkZHJl
c3NPZih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVN
b3ZIaW50QW5kQ2hlY2soKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92
SGludCBmb3IgT1NSLgorICAgICAgICBzcGVjdWxhdGUobm9kZS0+Y2hpbGQxKCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVQaGFudG9tKCkKKyAgICB7CisgICAgICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgc3BlY3VsYXRlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBoYXZl
IGEgcmVhbCBlcGlsb2d1ZSB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBvdXIgY2FsbGluZyBjb252
ZW50aW9uLgorICAgICAgICBtX291dC5yZXQobG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUs
IE5vZGUqLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5j
aChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZmFpbENhc2UpOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0
LgorICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoRXhp
dEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWls
Q29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFs
dWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KKyAgICB9CisgICAgCisgICAgdm9p
ZCBzcGVjdWxhdGUoRXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFs
dWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlQmFja3dh
cmQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgdGhlIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1f
ZGlyZWN0aW9uID09IEZvcndhcmREaXJlY3Rpb24uCisgICAgfQorICAgIAorICAgIHZvaWQgdGVy
bWluYXRlKEV4aXRLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwg
MCwgbV9vdXQuYm9vbGVhblRydWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJhY2t3YXJkVHlw
ZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgeworICAgICAgICBp
ZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayho
aWdoVmFsdWUudXNlS2luZCgpKSk7CisgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgbV9z
dGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWls
Q29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgorICAgIH0K
KyAgICAKKyAgICB2b2lkIHR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQorICAgIHsKKyAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwg
dHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9
PSBGb3J3YXJkRGlyZWN0aW9uLgorICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93SW50MzIoRWRn
ZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3Bl
Y3VsYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgp
ID09IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0
ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
Ym94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNJbnQzMiwgY2hlY2tOb3RJbnQzMihib3hlZFJlc3VsdCkp
OworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1bHQpOwor
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0ludDMyKSk7CisgICAgICAg
IHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dDZWxsKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChl
ZGdlLnVzZUtpbmQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRS
ZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAg
RlRMX1RZUEVfQ0hFQ0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwgY2hlY2tOb3RD
ZWxsKHVuY2hlY2tlZFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRl
LmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKKyAgICAgICAgdGVybWluYXRlKFVu
Y291bnRhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgfQorICAg
IAorICAgIExWYWx1ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9k
ZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IEJvb2xlYW5Vc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0
ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKHVuYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNCb29sZWFuLCBjaGVja05vdEJvb2xl
YW4odW5ib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHVuYm94Qm9vbGVhbih1bmNo
ZWNrZWRSZXN1bHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VS
VCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjQm9vbGVhbikpOworICAgICAg
ICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZh
bHNlOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93SlNWYWx1ZShFZGdlIGVkZ2UsIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFs
dWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVz
dWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJu
IGJveEludDMyKHVuYm94ZWRSZXN1bHQpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1
bmJveGVkUmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAg
ICAgICByZXR1cm4gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgY2hlY2tOb3RJbnQzMihMVmFsdWUganNWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX291dC5iZWxvdyhqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOworICAg
IH0KKyAgICBMVmFsdWUgdW5ib3hJbnQzMihMVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX291dC5jYXN0VG9JbnQzMihib3hlZFJlc3VsdCk7CisgICAgfQorICAgIExWYWx1
ZSBib3hJbnQzMihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRk
KG1fb3V0Lnplcm9FeHQodmFsdWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIGNoZWNrTm90Q2VsbChMVmFsdWUganNWYWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBjaGVja05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NCgKKyAgICAgICAgICAg
IG1fb3V0LmJpdFhvcih1bmNoZWNrZWRSZXN1bHQsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxz
ZSkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCh+MSkpOworICAgIH0KKyAgICBMVmFs
dWUgdW5ib3hCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2Fu
dCB0byB1c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IExMVk0ga25vd3MgdGhhdCBldmVu
IHRoZSBpbnRlZ2VyCisgICAgICAgIC8vIHZhbHVlIGlzIGp1c3QgMCBvciAxLiBCdXQgZm9yIG5v
dyB3ZSBkbyBpdCB0aGUgZHVtYiB3YXkuCisgICAgICAgIHJldHVybiBtX291dC5ub3RaZXJvKGpz
VmFsdWUpOworICAgIH0KKyAgICBMVmFsdWUgYm94Qm9vbGVhbihMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgdW5ib3hlZFJlc3Vs
dCwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVRydWUpLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFs
c2UpKTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZShFZGdlIGVkZ2UpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAg
ICAgICBBU1NFUlQoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soZWRnZSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3Bl
Y3VsYXRlKEVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIGxvd0ludDMyKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9vdXQuYWRkKGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisgICAgfQorICAgIExWYWx1ZSBwYXlsb2FkRm9yKExWYWx1ZSBiYXNl
LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGQoYmFzZSwgbV9v
dXQuY29uc3RJbnRQdHIob3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgfQorICAg
IExWYWx1ZSB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSkpOworICAgIH0KKyAgICBMVmFsdWUgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAg
ICB9CisgICAgTFZhbHVlIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBy
ZXR1cm4gcGF5bG9hZEZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CisgICAgfQorICAgIExWYWx1
ZSB0YWdGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKCkgeyByZXR1cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7IH0KKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIE91dHB1dCBtX291dDsKKyAgICAK
KyAgICBMTW9kdWxlIG1fbW9kdWxlOworICAgIExWYWx1ZSBtX2Z1bmN0aW9uOworICAgIExCYXNp
Y0Jsb2NrIG1fcHJvbG9ndWU7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+
IG1fYmxvY2tzOworICAgIAorICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBMVmFsdWUgbV90
YWdUeXBlTnVtYmVyOworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAgSGFzaFNldDxO
b2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2Nh
bE9wV29ya2xpc3Q7CisgICAgCisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFs
dWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhh
c2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIAorICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9s
b2NhbHNCb29sZWFuOworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKKyAgICBPcGVy
YW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7CisgICAgCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRl
OworICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKK307CisKK1N0YXRlIGxvd2VyREZHVG9M
TFZNKEdyYXBoJiBncmFwaCkKK3sKKyAgICBMb3dlckRGR1RvTExWTSBsb3dlcmluZyhncmFwaCk7
CisgICAgbG93ZXJpbmcubG93ZXIoKTsKKyAgICByZXR1cm4gbG93ZXJpbmcuc3RhdGUoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExvd2VyREZHVG9MTFZN
X2gKKyNkZWZpbmUgRlRMTG93ZXJERkdUb0xMVk1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitT
dGF0ZSBsb3dlckRGR1RvRlRMKERGRzo6R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExMb3dlckRG
R1RvTExWTV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPdXRwdXRfaAorI2RlZmluZSBGVExPdXRwdXRf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCisvLyBJZGlvbWF0aWMgTExWTSBJUiBidWlsZGVyIHNwZWNpZmljYWxseSBkZXNp
Z25lZCBmb3IgRlRMLiBUaGlzIHVzZXMgb3VyIG93biBsb3dlcmluZworLy8gdGVybWlub2xvZ3ks
IGFuZCBoYXMgc29tZSBvZiBpdHMgb3duIG5vdGlvbnM6CisvLworLy8gV2Ugc2F5IHRoYXQgYSAi
cmVmZXJlbmNlIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgInBvaW50ZXIiLiBUaGF0
IGlzLCBpdCBoYXMKKy8vIGFuIGVsZW1lbnQgdHlwZSBhbmQgY2FuIGJlIHBhc3NlZCBkaXJlY3Rs
eSB0byBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gTm90ZSB0aGF0CisvLyBicm9hZGx5IHNw
ZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6Ok91dHB1dCBzaG91bGQgb25seSB1c2UgcmVmZXJlbmNl
cyBmb3IgYWxsb2NhJ2QKKy8vIHNsb3RzIGZvciBtdXRhYmxlIGxvY2FsIHZhcmlhYmxlcy4KKy8v
CisvLyBXZSBzYXkgdGhhdCBhICJwb2ludGVyIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJl
IGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgorLy8KKy8vIFdlIHNheSB0aGF0ICJnZXQiIGFuZCAi
c2V0IiBhcmUgd2hhdCBMTFZNIGNvbnNpZGVycyB0byBiZSAibG9hZCIgYW5kICJzdG9yZSIuIEdl
dAorLy8gYW5kIHNldCB0YWtlIHJlZmVyZW5jZXMuCisvLworLy8gV2Ugc2F5IHRoYXQgImxvYWQi
IGFuZCAic3RvcmUiIGFyZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBhIHBvaW50ZXIgYW5kIGFuIG9m
ZnNldC4KKy8vIFRoZXNlIHRyYW5zbGF0ZSB0aGUgcG9pbnRlciArIG9mZnNldCBpbnRvIGEgcmVm
ZXJlbmNlIChvciwgYSBwb2ludGVyIGluIExMVk0tc3BlYWspCisvLyBhbmQgdXNlIGdldCBhbmQg
c2V0IG9uIHRoZW0gKG9yLCBsb2FkIGFuZCBzdG9yZSBpbiBMTFZNLXNwZWFrKS4KKworY2xhc3Mg
T3V0cHV0IHsKK3B1YmxpYzoKKyAgICBPdXRwdXQoKQorICAgICAgICA6IGJvb2xlYW4oaW50MVR5
cGUoKSkKKyAgICAgICAgLCBpbnQzMihpbnQzMlR5cGUoKSkKKyAgICAgICAgLCBpbnQ2NChpbnQ2
NFR5cGUoKSkKKyAgICAgICAgLCBpbnRQdHIoaW50UHRyVHlwZSgpKQorICAgICAgICAsIHJlZjMy
KHBvaW50ZXJUeXBlKGludDMyKSkKKyAgICAgICAgLCByZWY2NChwb2ludGVyVHlwZShpbnQ2NCkp
CisgICAgICAgICwgcmVmUHRyKHBvaW50ZXJUeXBlKGludFB0cikpCisgICAgICAgICwgYm9vbGVh
blRydWUoY29uc3RJbnQoYm9vbGVhbiwgdHJ1ZSkpCisgICAgICAgICwgYm9vbGVhbkZhbHNlKGNv
bnN0SW50KGJvb2xlYW4sIGZhbHNlKSkKKyAgICAgICAgLCBpbnQzMlplcm8oY29uc3RJbnQoaW50
MzIsIDApKQorICAgICAgICAsIGludDY0WmVybyhjb25zdEludChpbnQ2NCwgMCkpCisgICAgICAg
ICwgaW50UHRyWmVybyhjb25zdEludChpbnRQdHIsIDApKQorICAgICAgICAsIG1fZnVuY3Rpb24o
MCkKKyAgICAgICAgLCBtX2J1aWxkZXIoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgICAg
ICwgbV9uZXh0QmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5PdXRwdXQoKQorICAg
IHsKKyAgICAgICAgTExWTURpc3Bvc2VCdWlsZGVyKG1fYnVpbGRlcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZShMVmFsdWUgZnVuY3Rpb24pCisgICAgeworICAgICAgICBtX2Z1
bmN0aW9uID0gZnVuY3Rpb247CisgICAgICAgIG1fYnVpbGRlciA9IExMVk1DcmVhdGVCdWlsZGVy
KCk7CisgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSdyZSBzdGFy
dGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIGEgaGlnaC1sZXZlbAorICAgIC8vIGJhc2ljIGJsb2Nr
LgorICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2NrIG5leHRC
bG9jaykKKyAgICB7CisgICAgICAgIG1fbmV4dEJsb2NrID0gbmV4dEJsb2NrOworICAgICAgICAK
KyAgICAgICAgYXBwZW5kVG8oYmxvY2spOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgbmV3Qmxv
Y2soKSBhbmQgYXBwZW5kVG8oKSBpZiB5b3UncmUgc3BsaXR0aW5nIHRoZSBoaWdoLWxldmVsIGJh
c2ljCisgICAgLy8gYmxvY2sgaW50byBtdWx0aXBsZSBsb3ctbGV2ZWwgYmFzaWMgYmxvY2tzLgor
ICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCisgICAgeworICAgICAgICBtX2Js
b2NrID0gYmxvY2s7CisgICAgICAgIAorICAgICAgICBMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQo
bV9idWlsZGVyLCBibG9jayk7CisgICAgfQorICAgIExCYXNpY0Jsb2NrIG5ld0Jsb2NrKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9uZXh0QmxvY2spCisgICAgICAgICAgICByZXR1cm4gYXBwZW5k
QmFzaWNCbG9jayhtX2Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGluc2VydEJhc2ljQmxvY2tC
ZWZvcmUobV9uZXh0QmxvY2spOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgcGFyYW0odW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIGdldFBhcmFtKG1fZnVuY3Rpb24sIGluZGV4KTsgfQorICAgIExW
YWx1ZSBjb25zdEJvb2woYm9vbCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoYm9vbGVhbiwgdmFs
dWUpOyB9CisgICAgTFZhbHVlIGNvbnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gY29u
c3RJbnQoaW50MzIsIHZhbHVlLCBTaWduRXh0ZW5kKTsgfQorICAgIExWYWx1ZSBjb25zdEludFB0
cihpbnRwdHJfdCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50UHRyLCB2YWx1ZSwgU2lnbkV4
dGVuZCk7IH0KKyAgICBMVmFsdWUgY29uc3RJbnQ2NChpbnQ2NF90IHZhbHVlKSB7IHJldHVybiBj
b25zdEludChpbnQ2NCwgdmFsdWUsIFNpZ25FeHRlbmQpOyB9CisgICAgCisgICAgTFZhbHVlIGFk
ZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFkZChtX2J1aWxkZXIs
IGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gYnVpbGRBbmQobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICBM
VmFsdWUgYml0WG9yKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkWG9y
KG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9CisgICAgCisgICAgTFZhbHVlIHplcm9FeHQoTFZh
bHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFpFeHQobV9idWlsZGVyLCB2YWx1
ZSwgdHlwZSk7IH0KKyAgICBMVmFsdWUgaW50Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUp
IHsgcmV0dXJuIGJ1aWxkSW50Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQorICAgIExW
YWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGlu
dDMyKTsgfQorICAgIAorICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4g
YnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQorICAgIHZvaWQgc2V0KExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJl
ZmVyZW5jZSk7IH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZChMVmFsdWUgcG9pbnRlciwgcHRyZGlm
Zl90IG9mZnNldCwgTFR5cGUgcmVmVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoYnVp
bGRJbnRUb1B0cihtX2J1aWxkZXIsIG9mZnNldCA/IGFkZChwb2ludGVyLCBjb25zdEludFB0cihv
ZmZzZXQpKSA6IHBvaW50ZXIsIHJlZlR5cGUpKTsKKyAgICB9CisgICAgdm9pZCBzdG9yZShMVmFs
dWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0LCBMVHlwZSByZWZUeXBl
KQorICAgIHsKKyAgICAgICAgc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgb2Zm
c2V0ID8gYWRkKHBvaW50ZXIsIGNvbnN0SW50UHRyKG9mZnNldCkpIDogcG9pbnRlciwgcmVmVHlw
ZSkpOworICAgIH0KKyAgICBMVmFsdWUgbG9hZDMyKExWYWx1ZSBwb2ludGVyLCBMVmFsdWUgb2Zm
c2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJlZjMyKTsgfQorICAgIExW
YWx1ZSBsb2FkNjQoTFZhbHVlIHBvaW50ZXIsIExWYWx1ZSBvZmZzZXQgPSAwKSB7IHJldHVybiBs
b2FkKHBvaW50ZXIsIG9mZnNldCwgcmVmNDYpOyB9CisgICAgTFZhbHVlIGxvYWRQdHIoTFZhbHVl
IHZhbHVlLCBMVmFsdWUgb2Zmc2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQs
IHJlZlB0cik7IH0KKyAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRl
ciwgTFZhbHVlIG9mZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVm
MzIpOyB9CisgICAgdm9pZCBzdG9yZTY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIsIExW
YWx1ZSBvZmZzZXQgPSAwKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVyLCBvZmZzZXQsIHJlZjY0KTsg
fQorICAgIHZvaWQgc3RvcmVQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgTFZhbHVl
IG9mZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmUHRyKTsgfQor
ICAgIAorICAgIExWYWx1ZSBlcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50RVEsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExW
YWx1ZSBub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElD
bXAobV9idWlsZGVyLCBMTFZNSW50TkUsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBhYm92
ZShMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVy
LCBMTFZNSW50VUdULCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYWJvdmVPckVxdWFsKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExM
Vk1JbnRVR0UsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiZWxvdyhMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50VUxULCBs
ZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYmVsb3dPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRVTEUsIGxlZnQs
IHJpZ2h0KTsgfQorICAgIExWYWx1ZSBncmVhdGVyVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50U0dULCBsZWZ0LCByaWdo
dCk7IH0KKyAgICBMVmFsdWUgZ3JlYXRlclRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRTR0UsIGxlZnQsIHJp
Z2h0KTsgfQorICAgIExWYWx1ZSBsZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBidWlsZElDbXAobV9idWlsZGVyLCBMTFZNSW50U0xULCBsZWZ0LCByaWdodCk7IH0K
KyAgICBMVmFsdWUgbGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsg
cmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRTTEUsIGxlZnQsIHJpZ2h0KTsgfQor
ICAgIAorICAgIExWYWx1ZSBpc1plcm82NChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGVxdWFsKHZh
bHVlLCBpbnQ2NFplcm8pOyB9CisgICAgTFZhbHVlIG5vdFplcm82NChMVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIG5vdEVxdWFsKHZhbHVlLCBpbnQ2NFplcm8pOyB9CisgICAgCisgICAgTFZhbHVlIHRl
c3ROb25aZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90WmVybzY0
KGJpdEFuZCh2YWx1ZSwgbWFkaykpOyB9CisgICAgCisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUg
dmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBidWlsZFNlbGVj
dChtX2J1aWxkZXIsIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CisgICAgCisgICAgdm9pZCBq
dW1wKExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5h
dGlvbik7IH0KKyAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0
YWtlbiwgTEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgYnVpbGRDb25kQnIobV9idWlsZGVyLCBjb25k
aXRpb24sIHRha2VuLCBub3RUYWtlbik7IH0KKyAgICB2b2lkIHJldChMVmFsdWUgdmFsdWUpIHsg
YnVpbGRSZXQobV9idWlsZGVyLCB2YWx1ZSk7IH0KKyAgICAKKyAgICB2b2lkIHVucmVhY2hhYmxl
KCkgeyBidWlsZFVucmVhY2hhYmxlKG1fYnVpbGRlcik7IH0KKyAgICAKKyAgICBjb25zdCBMVHlw
ZSBib29sZWFuOworICAgIGNvbnN0IExUeXBlIGludDMyOworICAgIGNvbnN0IExUeXBlIGludDY0
OworICAgIGNvbnN0IExUeXBlIGludFB0cjsKKyAgICBjb25zdCBMVHlwZSByZWYzMjsKKyAgICBj
b25zdCBMVHlwZSByZWY2NDsKKyAgICBjb25zdCBMVHlwZSByZWZQdHI7CisgICAgY29uc3QgTFZh
bHVlIGJvb2xlYW5UcnVlOworICAgIGNvbnN0IExWYWx1ZSBib29sZWFuRmFsc2U7CisgICAgY29u
c3QgTFZhbHVlIGludDMyWmVybzsKKyAgICBjb25zdCBMVmFsdWUgaW50NjRaZXJvOworICAgIGNv
bnN0IExWYWx1ZSBpbnRQdHJaZXJvOworCisgICAgTFZhbHVlIG1fZnVuY3Rpb247CisgICAgTEJ1
aWxkZXIgbV9idWlsZGVyOworICAgIExCYXNpY0Jsb2NrIG1fYmxvY2s7CisgICAgTEJhc2ljQmxv
Y2sgbV9uZXh0QmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE91dHB1dF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUnVuQmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUnVuQmFja2VuZC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSdW5CYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTFJ1bkJhY2tlbmRfaAorI2RlZmluZSBGVExSdW5CYWNrZW5kX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3ZvaWQgcnVuQmFja2VuZChTdGF0ZSwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFJ1bkJhY2tl
bmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGVExTdGF0ZV9oCisjZGVmaW5lIEZUTFN0YXRlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgU3RhdGUgIHsKKyAgICBTdGF0ZShERkc6Okdy
YXBoKiBncmFwaCkKKyAgICAgICAgOiBncmFwaChncmFwaCkKKyAgICAgICAgLCBtb2R1bGUoMCkK
KyAgICAgICAgLCBmdW5jdGlvbigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gTm9uZSBv
ZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0
eSBvZgorICAgIC8vIEZUTCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUg
b2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24uCisgICAgREZHOjpHcmFwaCogZ3JhcGg7CisgICAg
TE1vZHVsZSBtb2R1bGU7CisgICAgTFZhbHVlIGZ1bmN0aW9uOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0ZUdy
YXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlRXhwZXJpbWVu
dGFsRlRMLCBmYWxzZSkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVByb2ZpbGVyLCBmYWxz
ZSkgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTQ3
MDE0KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA4
LDYgKzgwOCwxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIENQVShYODZfNjQpICYmIFBMQVRG
T1JNKE1BQykKKyNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBq
aXQgaXMgbm90IGF2YWlsYWJsZSwgZW5hYmxlIHRoZSBMTEludCBDIExvb3A6ICovCiAjaWYgIUVO
QUJMRShKSVQpCiAjdW5kZWYgRU5BQkxFX0xMSU5UICAgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdl
IGNhbiByZWRlZmluZSBpdC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195682</attachid>
            <date>2013-03-28 17:04:21 -0700</date>
            <delta_ts>2013-03-29 14:58:16 -0700</delta_ts>
            <desc>done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69891</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKIAogZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07
CiAKK2VudW0gT3BlcmFuZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6CkBAIC01OSw2ICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgT3RoZXJUcmFpdHM+Cisg
ICAgZXhwbGljaXQgT3BlcmFuZHMoT3BlcmFuZHNMaWtlVGFnLCBjb25zdCBPcGVyYW5kczxVLCBP
dGhlclRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
bV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBvdGhlci5udW1iZXJPZkxvY2Fs
cygpKTsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mTG9jYWxz
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTQ3MDE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw2ICsxMTIsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXM7CiAgICAgfQogICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soTm9kZSogbm9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiB+dHlwZXNQYXNzZWRUaHJvdWdoOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5lZWRzVHlw
ZUNoZWNrKGVkZ2Uubm9kZSgpLCB0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIH0KKyAgICAKKyAg
ICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZWVkc1R5cGVDaGVjayhlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CisgICAg
fQorICAgIAogICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFs
aXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRp
Y2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAgLy8gZXhlY3V0
aW9uLgpAQCAtMTg1LDE5ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGZpbHRlckVkZ2VCeVVzZShOb2RlKiBub2RlLCBFZGdlJiBlZGdlKQogICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBLbm93bkludDMyVXNlOgotICAgICAgICBjYXNlIEtub3duTnVtYmVyVXNlOgot
ICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
LSAgICAgICAgICAgIEFTU0VSVCghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJG
b3IoZWRnZS51c2VLaW5kKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soZWRnZS51c2VL
aW5kKCkpIHx8ICFuZWVkc1R5cGVDaGVjayhlZGdlKSk7CiAgICAgICAgIGZpbHRlckJ5VHlwZShu
b2RlLCBlZGdlLCB0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ3
MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSwxMCBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1
ZGUgIkZUTENvbXBpbGUuaCIKKyNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5oIgorI2luY2x1
ZGUgIkZUTFN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIApAQCAtMTUzLDYgKzE1NywxNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVN
b2RlIGNvbXBpbGVNCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZhbGlk
YXRlKGRmZywgbW9kZUZvckZpbmFsVmFsaWRhdGUpOwogICAgIAorICAgIGlmIChPcHRpb25zOjp1
c2VFeHBlcmltZW50YWxGVEwoKQorICAgICAgICAmJiBjb21waWxlTW9kZSA9PSBDb21waWxlRnVu
Y3Rpb24KKyAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgRlRMOjpT
dGF0ZSBzdGF0ZShkZmcpOworICAgICAgICBGVEw6Omxvd2VyREZHVG9MTFZNKHN0YXRlKTsKKyAg
ICAgICAgRlRMOjpjb21waWxlKHN0YXRlLCBqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBjYXNlIHdo
ZXJlIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwogICAgIGJvb2wg
cmVzdWx0OwogICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNSw3ICsxODM1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNQcm9m
aXRhYmxlVG9VbmJveCgpKQorICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+c2hvdWxk
VW5ib3hJZlBvc3NpYmxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNDYsNyArMjI0Niw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5k
LCBKU1ZhbHVlUmVncywgRWRnZSk7CiAgICAgCiAgICAgLy8gSGVscGVycyBmb3IgcGVyZm9ybWlu
ZyB0eXBlIGNoZWNrcyBvbiBhbiBlZGdlIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gcmVnaXN0ZXJzLgot
ICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gpIHsgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlw
ZXNQYXNzZWRUaHJvdWdoOyB9CisgICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5uZWVkc1R5
cGVDaGVjayhlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gpOyB9CiAgICAgdm9pZCBiYWNrd2FyZFR5
cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgdHlwZUNo
ZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3Vn
aCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CiAgICAgdm9pZCBmb3J3YXJkVHlw
ZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVy
eSYpOwpAQCAtMjg1MSw3ICsyODUxLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZnByT3JJbnZh
bGlkKEludmFsaWRGUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8
IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25O
dW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlz
RG91YmxlKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUo
KSkpCiAgICAgICAgICAgICBmcHIoKTsKICAgICB9CkBAIC0yOTAwLDcgKzI5MDAsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93blN0
cmluZ1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdPYmplY3RVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gU3RyaW5nT3JTdHJpbmdPYmplY3RVc2UpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51
c2VLaW5kKCkpKTsKICAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAg
ICAgIGdwcigpOwogICAgIH0KQEAgLTMwMDYsOSArMzAwNiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiB9CiAKICNkZWZpbmUgREZHX1RZUEVfQ0hFQ0soc291
cmNlLCBlZGdlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGp1bXBUb0ZhaWwpIGRvIHsgXAotICAgICAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCkpKSAgICAg
ICAgICAgICAgXAorICAgICAgICBKU1ZhbHVlU291cmNlIF9kdGNfc291cmNlID0gKHNvdXJjZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFZGdlIF9kdGNfZWRnZSA9IChl
ZGdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBT
cGVjdWxhdGVkVHlwZSBfZHRjX3R5cGVzUGFzc2VkVGhyb3VnaCA9IHR5cGVzUGFzc2VkVGhyb3Vn
aDsgICAgXAorICAgICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKF9kdGNfZWRnZSwgX2R0Y190eXBl
c1Bhc3NlZFRocm91Z2gpKSAgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0eXBl
Q2hlY2soKHNvdXJjZSksIChlZGdlKSwgKHR5cGVzUGFzc2VkVGhyb3VnaCksIChqdW1wVG9GYWls
KSk7IFwKKyAgICAgICAgdHlwZUNoZWNrKF9kdGNfc291cmNlLCBfZHRjX2VkZ2UsIF9kdGNfdHlw
ZXNQYXNzZWRUaHJvdWdoLCAoanVtcFRvRmFpbCkpOyBcCiAgICAgfSB3aGlsZSAoMCkKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwyNSBAQCBBTFdBWVNfSU5M
SU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5F
IGJvb2wgc2hvdWxkTm90SGF2ZVR5cGVDaGVjayhVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNo
IChraW5kKSB7CisgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgIGNhc2UgS25vd25JbnQzMlVzZToK
KyAgICBjYXNlIEtub3duTnVtYmVyVXNlOgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgIGNh
c2UgS25vd25TdHJpbmdVc2U6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBtYXlI
YXZlVHlwZUNoZWNrKFVzZUtpbmQga2luZCkKK3sKKyAgICByZXR1cm4gIXNob3VsZE5vdEhhdmVU
eXBlQ2hlY2soa2luZCk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VL
aW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChraW5kKSB7CkBAIC0xMDgsNiArMTI3LDM0IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGsKICAgICB9CiB9CiAKK0FMV0FZ
U19JTkxJTkUgYm9vbCBpc0RvdWJsZShVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAg
ICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSBib29sIGlzQ2Vs
bChVc2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDZWxsVXNl
OgorICAgIGNhc2UgS25vd25DZWxsVXNlOgorICAgIGNhc2UgT2JqZWN0VXNlOgorICAgIGNhc2Ug
U3RyaW5nVXNlOgorICAgIGNhc2UgS25vd25TdHJpbmdVc2U6CisgICAgY2FzZSBTdHJpbmdPYmpl
Y3RVc2U6CisgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEFiYnJldmlhdGlvbnNfaAorI2RlZmluZSBGVExBYmJy
ZXZpYXRpb25zX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlIDxsbHZtLWMvQ29yZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgZmlsZSBjb250YWlucyBzaG9ydC1mb3JtIGNhbGxzIGlu
dG8gdGhlIExMVk0gQyBBUEkuIEl0IGlzIG1lYW50IHRvCisvLyBzYXZlIHR5cGluZyBhbmQgbWFr
ZSB0aGUgbG93ZXJpbmcgY29kZSBjbGVhcmVyLiBJZiB3ZSBldmVyIGNhbGwgYW4gTExWTSBDIEFQ
SQorLy8gZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UgaW4gdGhlIEZUTCBsb3dlcmluZyBjb2RlLCB3
ZSBzaG91bGQgYWRkIGEgc2hvcnRjdXQgZm9yCisvLyBpdCBoZXJlLgorCisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyNlcnJvciAiVGhlIEZUTCBiYWNrZW5kIGFzc3VtZXMgdGhhdCBwb2ludGVycyBh
cmUgNjQtYml0LiIKKyNlbmRpZgorCit0eXBlZGVmIExMVk1CYXNpY0Jsb2NrUmVmIExCYXNpY0Js
b2NrOwordHlwZWRlZiBMTFZNQnVpbGRlclJlZiBMQnVpbGRlcjsKK3R5cGVkZWYgTExWTUludFBy
ZWRpY2F0ZSBMSW50UHJlZGljYXRlOwordHlwZWRlZiBMTFZNTW9kdWxlUmVmIExNb2R1bGU7Cit0
eXBlZGVmIExMVk1UeXBlUmVmIExUeXBlOwordHlwZWRlZiBMTFZNVmFsdWVSZWYgTFZhbHVlOwor
CitzdGF0aWMgaW5saW5lIExUeXBlIGludDFUeXBlKCkgeyByZXR1cm4gTExWTUludDFUeXBlKCk7
IH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgaW50MzJUeXBlKCkgeyByZXR1cm4gTExWTUludDMyVHlw
ZSgpOyB9CitzdGF0aWMgaW5saW5lIExUeXBlIGludDY0VHlwZSgpIHsgcmV0dXJuIExMVk1JbnQ2
NFR5cGUoKTsgfQorc3RhdGljIGlubGluZSBMVHlwZSBpbnRQdHJUeXBlKCkgeyByZXR1cm4gTExW
TUludDY0VHlwZSgpOyB9CisKK3N0YXRpYyBpbmxpbmUgTFR5cGUgcG9pbnRlclR5cGUoTFR5cGUg
dHlwZSkgeyByZXR1cm4gTExWTVBvaW50ZXJUeXBlKHR5cGUsIDApOyB9CisKK3N0YXRpYyBpbmxp
bmUgTFZhbHVlIGdldFBhcmFtKExWYWx1ZSBmdW5jdGlvbiwgdW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIExMVk1HZXRQYXJhbShmdW5jdGlvbiwgaW5kZXgpOyB9CisKK2VudW0gQml0RXh0ZW5zaW9u
IHsgWmVyb0V4dGVuZCwgU2lnbkV4dGVuZCB9Oworc3RhdGljIGlubGluZSBMVmFsdWUgY29uc3RJ
bnQoTFR5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlLCBCaXRFeHRlbnNpb24gZXh0
ZW5zaW9uKSB7IHJldHVybiBMTFZNQ29uc3RJbnQodHlwZSwgdmFsdWUsIGV4dGVuc2lvbiA9PSBT
aWduRXh0ZW5kKTsgfQorCitzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxv
Y2soTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBMTFZNQXBwZW5kQmFzaWNCbG9jayhmdW5jdGlv
biwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGluc2VydEJhc2ljQmxvY2tCZWZv
cmUoTEJhc2ljQmxvY2sgYmFzaWNCbG9jaykgeyByZXR1cm4gTExWTUluc2VydEJhc2ljQmxvY2tC
ZWZvcmUoYmFzaWNCbG9jaywgIiIpOyB9CisKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWxs
b2NhKExCdWlsZGVyIGJ1aWxkZXIsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZEFsbG9j
YShidWlsZGVyLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWRkKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1C
dWlsZEFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZEFuZChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBMTFZNQnVpbGRBbmQoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkWG9yKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAi
Iik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkTG9hZChMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgcG9pbnRlcikgeyByZXR1cm4gTExWTUJ1aWxkTG9hZChidWlsZGVyLCBwb2ludGVyLCAi
Iik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU3RvcmUoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlcikgeyByZXR1cm4gTExWTUJ1aWxkU3RvcmUoYnVp
bGRlciwgdmFsdWUsIHBvaW50ZXIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFpFeHQo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBMTFZN
QnVpbGRaRXh0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkSW50Q2FzdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5
cGUpIHsgcmV0dXJuIExMVk1CdWlsZEludENhc3QoYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9Citz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEludFRvUHRyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkSW50VG9QdHIoYnVpbGRlciwg
dmFsdWUsIHR5cGUsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQdHJUb0ludChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1C
dWlsZFB0clRvSW50KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkSUNtcChMQnVpbGRlciBidWlsZGVyLCBMSW50UHJlZGljYXRlIGNvbmQsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZElDbXAoYnVpbGRlciwg
Y29uZCwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxl
Y3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFs
dWUgbm90VGFrZW4pIHsgcmV0dXJuIExMVk1CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24s
IHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExC
dWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVp
bGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q29uZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRh
a2VuLCBMQmFzaWNCbG9jayBub3RUYWtlbikgeyByZXR1cm4gTExWTUJ1aWxkQ29uZEJyKGJ1aWxk
ZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRSZXQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlKSB7IHJldHVybiBMTFZNQnVp
bGRSZXQoYnVpbGRlciwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFVucmVh
Y2hhYmxlKExCdWlsZGVyIGJ1aWxkZXIpIHsgcmV0dXJuIExMVk1CdWlsZFVucmVhY2hhYmxlKGJ1
aWxkZXIpOyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJicmV2aWF0aW9uc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJp
bGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitib29sIGNhbkNvbXBpbGUoR3Jh
cGgmIGdyYXBoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJbmRleCA9IGdyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBjaGlsZElu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaC5jaGlsZChub2RlLCBjaGls
ZEluZGV4KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6Cisg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICBjYXNlIEtub3du
SW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRD
aGVjazoKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnQ6CisgICAgICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgICAgICAgICAvLyBUaGVz
ZSBhcmUgT0suCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIC8vIERvbid0IGtub3cgaG93IHRvIGhhbmRsZSBhbnl0aGluZyBlbHNl
LgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTENhcGFiaWxpdGllc19oCisjZGVmaW5lIEZUTENhcGFiaWxpdGllc19o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
Citib29sIGNhbkNvbXBpbGUoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExDYXBhYmlsaXRpZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExDb21w
aWxlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgor
CisjaW5jbHVkZSA8bGx2bS1jL0FuYWx5c2lzLmg+CisjaW5jbHVkZSA8bGx2bS1jL1RhcmdldC5o
PgorI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zvcm1zL1NjYWxhci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKCpHZW5lcmF0ZWRGdW5jdGlvbikoRXhlY1N0YXRlKik7CisKK3N0YXRpYyB2
b2lkIGNvbXBpbGVFbnRyeShDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAg
aml0LmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihzdGF0ZS5ncmFwaC5tX2NvZGVC
bG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsKK30KKwordm9pZCBjb21waWxlKFN0YXRlIHN0YXRl
LCBSZWZQdHI8SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJp
dHlDaGVjaykKK3sKKyAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZTsKKyAgICBjaGFy
KiBlcnJvciA9IDA7CisgICAgCisgICAgaWYgKExMVk1DcmVhdGVKSVRDb21waWxlckZvck1vZHVs
ZSgmZW5naW5lLCBzdGF0ZS5tb2R1bGUsIDIsICZlcnJvcikgIT0gMCkgeworICAgICAgICBkYXRh
TG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVy
cm9yLCAiXG4iKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgTExWTVBhc3NN
YW5hZ2VyUmVmIHBhc3MgPSBMTFZNQ3JlYXRlUGFzc01hbmFnZXIoKTsKKyAgICBMTFZNQWRkVGFy
Z2V0RGF0YShMTFZNR2V0RXhlY3V0aW9uRW5naW5lVGFyZ2V0RGF0YShlbmdpbmUpLCBwYXNzKTsK
KyAgICBMTFZNQWRkQ29uc3RhbnRQcm9wYWdhdGlvblBhc3MocGFzcyk7CisgICAgTExWTUFkZElu
c3RydWN0aW9uQ29tYmluaW5nUGFzcyhwYXNzKTsKKyAgICBMTFZNQWRkUHJvbW90ZU1lbW9yeVRv
UmVnaXN0ZXJQYXNzKHBhc3MpOworICAgIExMVk1BZGRHVk5QYXNzKHBhc3MpOworICAgIExMVk1B
ZGRDRkdTaW1wbGlmaWNhdGlvblBhc3MocGFzcyk7CisgICAgTExWTVJ1blBhc3NNYW5hZ2VyKHBh
c3MsIHN0YXRlLm1vZHVsZSk7CisgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkg
fHwgREZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgIExMVk1EdW1wTW9k
dWxlKHN0YXRlLm1vZHVsZSk7CisgICAgCisgICAgR2VuZXJhdGVkRnVuY3Rpb24gZnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPihMTFZNR2V0UG9pbnRlclRvR2xv
YmFsKGVuZ2luZSwgc3RhdGUuZnVuY3Rpb24pKTsKKyAgICBMTFZNRGlzcG9zZVBhc3NNYW5hZ2Vy
KHBhc3MpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4KKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hvdWxkIGp1c3QgdXNlIG91ciBjYWxs
aW5nIGNvbnZlbnRpb24uCisgICAgQ0NhbGxIZWxwZXJzIGppdChzdGF0ZS5ncmFwaC5tX2dsb2Jh
bERhdGEsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgY29tcGlsZUVu
dHJ5KGppdCk7CisgICAgICAgIAorICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBm
b3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KKyAgICAg
ICAgCisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgp
OworICAgICAgICAKKyAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBp
cyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MQorICAgIGppdC5hZGRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVt
cCBzdGFja0NoZWNrID0gaml0LmJyYW5jaFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxv
dywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV9n
bG9iYWxEYXRhLT5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAg
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21TdGFja0NoZWNr
ID0gaml0LmxhYmVsKCk7CisgICAgICAgIAorICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0
ZSgpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihmdW5jdGlvbiks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5Q
QywgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
IGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgaml0LnJldCgpOworICAgICAgICAKKyAgICBzdGFja0NoZWNrLmxpbmsoJmppdCk7CisgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBqaXQucG9rZSgKKyAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsCisgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2Fs
bEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICAKKyAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgVHJ1c3RlZEltbTMyKDApLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsKKyAgICAvLyBG
SVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5k
bGluZyBzb21laG93LgorICAgIGppdC5qdW1wKGZyb21TdGFja0NoZWNrKTsKKyAgICAgICAgCisg
ICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgY29t
cGlsZUVudHJ5KGppdCk7CisgICAgaml0LmxvYWQzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpw
YXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmJyYW5jaDMyKAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkwKSkKKyAgICAgICAgLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgJmppdCk7Cisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucG9rZSgKKyAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCisgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Y2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgIGppdC5zdG9yZTMyKAorICAgICAgICBU
cnVzdGVkSW1tMzIoMCksCisgICAgICAgIENDYWxsSGVsZXByczo6dGFnRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOworICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNv
bWVob3cuCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICBqaXQuanVtcChmcm9tQXJpdHlDaGVjayk7CisgICAgICAgIAorICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX2dsb2JhbERhdGEsICZqaXQsIHN0YXRl
LmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1
ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBtX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8g
Y3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrLCBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKKyAg
ICAgICAgCisgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGFyaXR5Q2hlY2spOworICAgIGppdENvZGUgPSBhZG9wdFB0cihuZXcgSklUQ29kZSgKKyAgICAg
ICAgZW5naW5lLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIsCisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSkuZGF0YSgpKSkpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTENvbXBpbGVf
aAorI2RlZmluZSBGVExDb21waWxlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgY29tcGlsZShTdGF0ZSwgUmVmUHRyPEpJVENv
ZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwor
I2VuZGlmIC8vIEZUTENvbXBpbGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pJVENvZGU6OkpJVENvZGUoTExWTUV4ZWN1
dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENvZGVSZWYgZW50cnlwb2ludCkKKyAgICA6IG1fZW5naW5l
KGVuZ2luZSkKKyAgICAsIG1fZW50cnlwb2ludChlbnRyeXBvaW50KQoreworfQorCitKSVRDb2Rl
Ojp+SklUQ29kZSgpCit7CisgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUp
OworfQorCit2b2lkKiBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgpCit7CisgICAgcmV0dXJuIG1f
ZW50cnlwb2ludC5jb2RlKCk7Cit9CisKK3ZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obV9lbnRyeXBvaW50LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsK
K30KKwordm9pZCogSklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCit7CisgICAg
Ly8gV2UgY2FuJ3QgcGF0Y2ggRlRMIGNvZGUsIHlldC4gRXZlbiBpZiB3ZSBkaWQsIGl0J3Mgbm90
IGNsZWFyIHRoYXQgd2Ugd291bGQgZG8gc28KKyAgICAvLyB0aHJvdWdoIHRoaXMgQVBJLgorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2ln
bmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQoreworICAgIC8vIFdlIGN1cnJlbnRseSBkb24n
dCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUgRlRMIGNvZGUuCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IEpJVENvZGU6OnNpemUo
KQoreworICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUsIHlldC4gTWFr
ZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yCisgICAgLy8gR0MgbG9hZCBl
c3RpbWF0ZXMuCisgICAgcmV0dXJuIDEwMDA7Cit9CisKK2Jvb2wgSklUQ29kZTo6Y29udGFpbnMo
dm9pZCogYWRkcmVzcykKK3sKKyAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hhdCBhZGRyZXNzZXMg
dGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQuCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKSVRDb2Rl
X2gKKyNkZWZpbmUgRlRMSklUQ29kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorCisjaW5jbHVkZSA8
bGx2bS1jL0NvcmUuaD4KKyNpbmNsdWRlIDxsbHZtLWMvRXhlY3V0aW9uRW5naW5lLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSklUQ29kZSA6IHB1YmxpYyBK
U0M6OkpJVENvZGUgeworcHVibGljOgorICAgIEpJVENvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJl
ZiwgQ29kZVJlZiBlbnRyeXBvaW50KTsKKyAgICB+SklUQ29kZSgpOworICAgIAorICAgIENvZGVQ
dHIgYWRkcmVzc0ZvckNhbGwoKTsKKyAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0
KHNpemVfdCBvZmZzZXQpOworICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCk7CisgICAgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKTsKKyAg
ICBzaXplX3Qgc2l6ZSgpOworICAgIGJvb2wgY29udGFpbnModm9pZCopOworICAgIAorcHJpdmF0
ZToKKyAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOworICAgIENvZGVSZWYgbV9l
bnRyeXBvaW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZMVF9KSVQpCisKKyNlbmRpZiAvLyBGVExKSVRDb2RlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
TG93ZXJERkdUb0xMVk0uaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBERkc7CisKKy8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2so
KSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKKy8vIHNpZ25p
ZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVl
LCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCisg
ICAgICAgIExWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAoaGlnaFZhbHVl
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7ICBcCisgICAg
ICAgIGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBl
c1Bhc3NlZFRocm91Z2gpKSBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGVDaGVjayhf
ZnRjX2xvd1ZhbHVlLCBfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gsIChm
YWlsQ29uZGl0aW9uKSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworY2xhc3MgTG93ZXJERkdU
b0xMVk0geworcHVibGljOgorICAgIExvd2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKKyAgICAg
ICAgOiBtX2dyYXBoKHN0YXRlLmdyYXBoKQorICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCisgICAg
ICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgZ3JhcGgubV9ibG9ja3NbMF0tPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgZ3JhcGgu
bV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJh
bmRzTGlrZSwgZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBt
X3N0YXRlKGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RhdGUgc3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIGxvd2VyKCkKKyAgICB7CisgICAgICAg
IENTdHJpbmcgbmFtZSA9IHRvQ1N0cmluZyhjb2RlQmxvY2soKS0+aGFzaCgpKTsKKyAgICAgICAg
bV9zdGF0ZS5tb2R1bGUgPSBMTFZNTW9kdWxlQ3JlYXRlV2l0aE5hbWUobmFtZS5kYXRhKCkpOwor
ICAgICAgICAKKyAgICAgICAgTFR5cGUgYXJndW1lbnRUeXBlc1tdID0geyBtX291dC5pbnRQdHIg
fTsKKyAgICAgICAgbV9zdGF0ZS5mdW5jdGlvbiA9IExMVk1BZGRGdW5jdGlvbihtX3N0YXRlLm1v
ZHVsZSwgbmFtZS5kYXRhKCksIExMVk1GdW5jdGlvblR5cGUobV9vdXQuaW50NjQsIGFyZ3VtZW50
VHlwZXMsIDEsIGZhbHNlKSk7CisgICAgICAgIExMVk1TZXRGdW5jdGlvbkNhbGxDb252KG1fc3Rh
dGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuaW5p
dGlhbGl6ZShtX3N0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fcHJvbG9ndWUg
PSBhcHBlbmRCYXNpY0Jsb2NrKG1fc3RhdGUuZnVuY3Rpb24pOworICAgICAgICBtX291dC5hcHBl
bmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1fbG9jYWxz
LnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fbG9jYWxzQm9vbGVhbltpbmRleF0g
PSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmJvb2xlYW4pOworICAgICAgICAg
ICAgbV9sb2NhbHMzMltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0
LmludDMyKTsKKyAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9v
dXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fY2FsbEZyYW1lID0gbV9vdXQucGFyYW0oMCk7CisgICAgICAgIG1fdGFnVHlwZU51bWJlciA9
IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CisgICAgICAgIG1fdGFnTWFzayA9IG1f
b3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XTsKKyAgICAgICAgICAgIGlmICghbV9ibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2Jsb2NrLCBhcHBlbmRCYXNpY0Js
b2NrKG1fc3RhdGUuZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wUm9v
dHMoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2Fs
T3BzKCk7CisgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0pKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCisgICAgICAgICAgICBj
b21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIAorICAgIHZv
aWQgYWRkRmx1c2hlZExvY2FsT3BSb290cygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IG1fYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCFt
X2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIERGR19OT0RFX1RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFk
ZEZsdXNoZWRMb2NhbEVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRk
Rmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRM
b2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9m
bHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xp
c3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9k
ZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9yeSBoZXJlLgorICAg
ICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgu
bV9hcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZSgpOworICAgICAgICAg
ICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xsIGJlIGFjY2Vzc2luZyBpdCB0aHJvdWdo
IGxvYWRzIGFuZCBzdG9yZXMKKyAgICAgICAgICAgIC8vIGFueXdheSAtIHRoZXJlJ3Mgbm8gcG9p
bnQgaW4gdHJhbnNmZXJpbmcgaXQgb3V0LgorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KHBheWxvYWRGb3IodmFyaWFibGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGlj
dGlvbigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFj
a3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hlY2tOb3RJbnQzMihqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFsdWUpLCBtX2xvY2Fs
czMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBjaGVja05vdENl
bGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9s
b2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hlY2tOb3RCb29sZWFuKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVl
KSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAg
bV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAo
IW1faGlnaEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOworICAgICAgICAK
KyAgICAgICAgQmFzaWNCbG9jayogbmV4dEhpZ2hCbG9jayA9IDA7CisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK25leHRCbG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBuZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tuZXh0QmxvY2tJbmRleF07CisgICAg
ICAgICAgICBpZiAobmV4dEhpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBMQmFzaWNCbG9jayBuZXh0TG93QmxvY2sgPSBuZXh0SGlnaEJsb2NrID8g
bV9ibG9ja3MuZ2V0KG5leHRIaWdoQmxvY2spIDogMDsKKyAgICAgICAgCisgICAgICAgIC8vIEFs
bCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmls
aXR5IHRvIGtlZXAgdGhlCisgICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dy
YW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKKyAgICAgICAg
Ly8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVy
IHRoaW5ncykgYnV0IGl0IHdpbGwKKyAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIgdG8g
cmVhZC4KKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG5leHRMb3dCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYWNrIHRoZSBPU1Igc2l0dWF0
aW9uIGhlcmUuCisgICAgICAgIAorICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7CisgICAg
ICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuY2xl
YXIoKTsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIAorICAgICAg
ICBtX3N0YXRlLnJlc2V0KCk7CisgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGln
aEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCisgICAgICAgICAg
ICBjb21waWxlTm9kZShub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVO
b2RlKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIG1fbm9kZSA9IG1faGlnaEJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRl
RWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsgLy8g
RklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4KKyAgICAgICAgCisgICAgICAgIG1fZGly
ZWN0aW9uID0gKG1fY3VycmVudE5vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZv
cndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CisgICAgICAgIAorICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAg
ICAgICAgY29tcGlsZUpTQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAgICAgY29tcGlsZUdldExvY2FsKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgIGNvbXBpbGVTZXRM
b2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNr
OgorICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgIGNvbXBpbGVQaGFudG9tKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CisgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQorICAgICAgICAgICAgbV9z
dGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVKU0NvbnN0YW50KCkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KG1fbm9kZSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldExvY2Fs
KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZShJbmRlcXVhdGVDb3ZlcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgdHJhcCBpbnN0ZWFkLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MworICAgICAgICAgICAgdGVy
bWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAg
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUpKQorICAgICAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDMyKHBheWxvYWRGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlh
YmxlLT5sb2NhbCgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBkb3VibGVzIGluIEZUTC4KKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBMb2NhbHMgdGhhdCBhcmUgbWFya2VkIHNob3VsZFVuYm94
SWZQb3NzaWJsZSgpIHRoYXQgYXJlbid0IGFsc28gZm9yY2VkIHRvCisgICAgICAgICAgICAvLyB1
c2UgZG91YmxlIGZvcm1hdCwgYW5kIHRoYXQgaGF2ZSB0aGUgcmlnaHQgcHJlZGljdGlvbiwgd2ls
bCBhbHdheXMgYmUKKyAgICAgICAgICAgIC8vIHNwZWN1bGF0ZWQgb24gU2V0TG9jYWwgYW5kIHdp
bGwgYWx3YXlzIGJlIHN0b3JlZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgIC8v
IHR5cGVkIHJlZmVyZW5jZSBMVmFsdWUuCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5nZXQobV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIG1fYm9v
bGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gV2Ugc2tpcCB0aGUgQ2VsbCBjYXNlIGhlcmUgYmVjYXVzZSB0
aGF0IGdldHMgdHJlYXRlZCBpZGVudGljYWxseSB0bworICAgICAgICAgICAgLy8gSlNWYWx1ZXMs
IHNpbmNlIGNlbGxzIGFyZSBzdG9yZWQgdW50YWdnZWQuCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHM2NC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVTZXRMb2NhbCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbV9ub2RlLT52YXJpYWJsZSgpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgYm9vbCBuZWVkc0ZsdXNoaW5nID0g
bV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KKyAgICAgICAgCisgICAgICAgIGlm
ICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2Fs
czMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAobmVl
ZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWUsIHBheWxv
YWRPZih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkg
eworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWUsIGFkZHJlc3NPZih2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAg
ICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fs
c0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZShsb3dKU3Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzT2YodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBtX291dC5z
dG9yZSh2YWx1ZSwgYWRkcmVzc09mKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9s
b2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKQorICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWUsIGFkZHJlc3NPZih2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hl
Y2soKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NS
LgorICAgICAgICBzcGVjdWxhdGUobm9kZS0+Y2hpbGQxKCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVQaGFudG9tKCkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKG1fZ3JhcGgsIG1fbm9kZSwgc3BlY3VsYXRlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlUmV0dXJuKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBoYXZlIGEgcmVhbCBlcGls
b2d1ZSB3aGVuIHdlIHN3aXRjaCB0byB1c2luZyBvdXIgY2FsbGluZyBjb252ZW50aW9uLgorICAg
ICAgICBtX291dC5yZXQobG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBMVmFs
dWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0
aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFp
bENhc2UpOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0LgorICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoRXhpdEtpbmQga2luZCwg
TFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQor
ICAgIHsKKyAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1
ZSwgZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcg
b2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGUo
RXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBm
YWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93
VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgcmV3aXJpbmcgdGhlIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09
IEZvcndhcmREaXJlY3Rpb24uCisgICAgfQorICAgIAorICAgIHZvaWQgdGVybWluYXRlKEV4aXRL
aW5kIGtpbmQpCisgICAgeworICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwgMCwgbV9vdXQuYm9v
bGVhblRydWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKExWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUu
bmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNl
S2luZCgpKSk7CisgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGxvd1ZhbHVlLCBo
aWdoVmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgbV9zdGF0ZS5mb3JOb2Rl
KGhpZ2hWYWx1ZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZm9yd2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQor
ICAgIHsKKyAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgorICAgIH0KKyAgICAKKyAgICB2
b2lkIHR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAg
ICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdp
cmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGly
ZWN0aW9uLgorICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVy
YW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisg
ICAgeworICAgICAgICBBU1NFUlQobW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwg
KGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50
MzJVc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQzMlZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soYm94ZWRSZXN1bHQs
IGVkZ2UsIFNwZWNJbnQzMiwgY2hlY2tOb3RJbnQzMihib3hlZFJlc3VsdCkpOworICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1bHQpOworICAgICAgICAgICAg
bV9pbnQzMlZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRl
LmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0ludDMyKSk7CisgICAgICAgIHRlcm1pbmF0ZShV
bmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CisgICAgfQorICAg
IAorICAgIExWYWx1ZSBsb3dDZWxsKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQo
KSkpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hF
Q0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwgY2hlY2tOb3RDZWxsKHVuY2hlY2tl
ZFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRn
ZSkubV90eXBlICYgU3BlY0NlbGwpKTsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2Up
OworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKHVu
Ym94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNCb29sZWFuLCBjaGVja05vdEJvb2xlYW4odW5ib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHVuYm94Qm9vbGVhbih1bmNoZWNrZWRSZXN1bHQp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fc3RhdGUu
Zm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjQm9vbGVhbikpOworICAgICAgICB0ZXJtaW5hdGUo
VW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgbG93SlNWYWx1ZShFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlv
bk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAg
IEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQz
MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGJveEludDMyKHVu
Ym94ZWRSZXN1bHQpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0
ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm4g
Ym94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgY2hlY2tOb3RJbnQzMihMVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX291dC5iZWxvdyhqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICBMVmFs
dWUgdW5ib3hJbnQzMihMVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291
dC5jYXN0VG9JbnQzMihib3hlZFJlc3VsdCk7CisgICAgfQorICAgIExWYWx1ZSBib3hJbnQzMihM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKG1fb3V0Lnplcm9F
eHQodmFsdWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIGNoZWNrTm90Q2VsbChMVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7CisgICAgfQorICAg
IAorICAgIExWYWx1ZSBjaGVja05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NCgKKyAgICAgICAgICAgIG1fb3V0LmJpdFhv
cih1bmNoZWNrZWRSZXN1bHQsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NCh+MSkpOworICAgIH0KKyAgICBMVmFsdWUgdW5ib3hCb29s
ZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gV2Ugd2FudCB0byB1c2UgYSBj
YXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IExMVk0ga25vd3MgdGhhdCBldmVuIHRoZSBpbnRlZ2Vy
CisgICAgICAgIC8vIHZhbHVlIGlzIGp1c3QgMCBvciAxLiBCdXQgZm9yIG5vdyB3ZSBkbyBpdCB0
aGUgZHVtYiB3YXkuCisgICAgICAgIHJldHVybiBtX291dC5ub3RaZXJvKGpzVmFsdWUpOworICAg
IH0KKyAgICBMVmFsdWUgYm94Qm9vbGVhbihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgdW5ib3hlZFJlc3VsdCwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZVRydWUpLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKKyAgICB9
CisKKyAgICB2b2lkIHNwZWN1bGF0ZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgICAgICBBU1NFUlQo
IW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soZWRnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlZGdlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNw
ZWN1bGF0ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlKEVkZ2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIGxvd0ludDMyKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gbV9v
dXQuYWRkKGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CisgICAgfQorICAgIExWYWx1ZSBwYXlsb2FkRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFu
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGQoYmFzZSwgbV9vdXQuY29uc3RJbnRQ
dHIob3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgfQorICAgIExWYWx1ZSB0YWdG
b3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwor
ICAgIH0KKyAgICBMVmFsdWUgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKG1fY2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAgICB9CisgICAgTFZh
bHVlIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gcGF5bG9h
ZEZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CisgICAgfQorICAgIExWYWx1ZSB0YWdGb3IoaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdGFnRm9yKG1fY2FsbEZyYW1lLCBvcGVy
YW5kKTsKKyAgICB9CisgICAgCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKCkgeyByZXR1
cm4gbV9ncmFwaC5tX2dsb2JhbERhdGE7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsg
cmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsK
KyAgICBTdGF0ZSBtX3N0YXRlOworICAgIE91dHB1dCBtX291dDsKKyAgICAKKyAgICBMTW9kdWxl
IG1fbW9kdWxlOworICAgIExWYWx1ZSBtX2Z1bmN0aW9uOworICAgIExCYXNpY0Jsb2NrIG1fcHJv
bG9ndWU7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwor
ICAgIAorICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVy
OworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAgSGFzaFNldDxOb2RlKj4gbV9mbHVz
aGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7
CisgICAgCisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOworICAgIEhh
c2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9z
dG9yYWdlVmFsdWVzOworICAgIAorICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFu
OworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKKyAgICBPcGVyYW5kczxMVmFsdWU+
IG1fbG9jYWxzNjQ7CisgICAgCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEJhc2lj
QmxvY2sqIG1faGlnaEJsb2NrOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBtX2RpcmVjdGlvbjsKK307CisKK3ZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0
YXRlKQoreworICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRlKTsKKyAgICBsb3dlcmlu
Zy5sb3dlcigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
TG93ZXJERkdUb0xMVk1faAorI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3ZvaWQgbG93ZXJERkdUb0ZUTChTdGF0ZSYpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TExvd2VyREZHVG9MTFZNX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE91dHB1dF9oCisjZGVmaW5lIEZU
TE91dHB1dF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExf
SklUKQorCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKKy8vIElkaW9tYXRpYyBMTFZNIElSIGJ1aWxkZXIgc3BlY2lmaWNh
bGx5IGRlc2lnbmVkIGZvciBGVEwuIFRoaXMgdXNlcyBvdXIgb3duIGxvd2VyaW5nCisvLyB0ZXJt
aW5vbG9neSwgYW5kIGhhcyBzb21lIG9mIGl0cyBvd24gbm90aW9uczoKKy8vCisvLyBXZSBzYXkg
dGhhdCBhICJyZWZlcmVuY2UiIGlzIHdoYXQgTExWTSBjb25zaWRlcnMgdG8gYmUgYSAicG9pbnRl
ciIuIFRoYXQgaXMsIGl0IGhhcworLy8gYW4gZWxlbWVudCB0eXBlIGFuZCBjYW4gYmUgcGFzc2Vk
IGRpcmVjdGx5IHRvIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zLiBOb3RlIHRoYXQKKy8vIGJy
b2FkbHkgc3BlYWtpbmcgdGhlIHVzZXJzIG9mIEZUTDo6T3V0cHV0IHNob3VsZCBvbmx5IHVzZSBy
ZWZlcmVuY2VzIGZvciBhbGxvY2EnZAorLy8gc2xvdHMgZm9yIG11dGFibGUgbG9jYWwgdmFyaWFi
bGVzLgorLy8KKy8vIFdlIHNheSB0aGF0IGEgInBvaW50ZXIiIGlzIHdoYXQgTExWTSBjb25zaWRl
cnMgdG8gYmUgYSBwb2ludGVyLXdpZHRoIGludGVnZXIuCisvLworLy8gV2Ugc2F5IHRoYXQgImdl
dCIgYW5kICJzZXQiIGFyZSB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlICJsb2FkIiBhbmQgInN0
b3JlIi4gR2V0CisvLyBhbmQgc2V0IHRha2UgcmVmZXJlbmNlcy4KKy8vCisvLyBXZSBzYXkgdGhh
dCAibG9hZCIgYW5kICJzdG9yZSIgYXJlIG9wZXJhdGlvbnMgdGhhdCB0YWtlIGEgcG9pbnRlciBh
bmQgYW4gb2Zmc2V0LgorLy8gVGhlc2UgdHJhbnNsYXRlIHRoZSBwb2ludGVyICsgb2Zmc2V0IGlu
dG8gYSByZWZlcmVuY2UgKG9yLCBhIHBvaW50ZXIgaW4gTExWTS1zcGVhaykKKy8vIGFuZCB1c2Ug
Z2V0IGFuZCBzZXQgb24gdGhlbSAob3IsIGxvYWQgYW5kIHN0b3JlIGluIExMVk0tc3BlYWspLgor
CitjbGFzcyBPdXRwdXQgeworcHVibGljOgorICAgIE91dHB1dCgpCisgICAgICAgIDogYm9vbGVh
bihpbnQxVHlwZSgpKQorICAgICAgICAsIGludDMyKGludDMyVHlwZSgpKQorICAgICAgICAsIGlu
dDY0KGludDY0VHlwZSgpKQorICAgICAgICAsIGludFB0cihpbnRQdHJUeXBlKCkpCisgICAgICAg
ICwgcmVmMzIocG9pbnRlclR5cGUoaW50MzIpKQorICAgICAgICAsIHJlZjY0KHBvaW50ZXJUeXBl
KGludDY0KSkKKyAgICAgICAgLCByZWZQdHIocG9pbnRlclR5cGUoaW50UHRyKSkKKyAgICAgICAg
LCBib29sZWFuVHJ1ZShjb25zdEludChib29sZWFuLCB0cnVlKSkKKyAgICAgICAgLCBib29sZWFu
RmFsc2UoY29uc3RJbnQoYm9vbGVhbiwgZmFsc2UpKQorICAgICAgICAsIGludDMyWmVybyhjb25z
dEludChpbnQzMiwgMCkpCisgICAgICAgICwgaW50NjRaZXJvKGNvbnN0SW50KGludDY0LCAwKSkK
KyAgICAgICAgLCBpbnRQdHJaZXJvKGNvbnN0SW50KGludFB0ciwgMCkpCisgICAgICAgICwgbV9m
dW5jdGlvbigwKQorICAgICAgICAsIG1fYnVpbGRlcihMTFZNQ3JlYXRlQnVpbGRlcigpKQorICAg
ICAgICAsIG1fYmxvY2soMCkKKyAgICAgICAgLCBtX25leHRCbG9jaygwKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgfk91dHB1dCgpCisgICAgeworICAgICAgICBMTFZNRGlzcG9zZUJ1aWxkZXIo
bV9idWlsZGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKExWYWx1ZSBmdW5j
dGlvbikKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgICB9CisgICAg
CisgICAgLy8gVXNlIHRoaXMgbWV0aG9kIHdoZW4geW91J3JlIHN0YXJ0aW5nIGNvZGUgZ2VuZXJh
dGlvbiBmb3IgYSBoaWdoLWxldmVsCisgICAgLy8gYmFzaWMgYmxvY2suCisgICAgdm9pZCBhcHBl
bmRUbyhMQmFzaWNCbG9jayBibG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQorICAgIHsKKyAg
ICAgICAgbV9uZXh0QmxvY2sgPSBuZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBhcHBlbmRU
byhibG9jayk7CisgICAgfQorICAgIAorICAgIC8vIFVzZSBuZXdCbG9jaygpIGFuZCBhcHBlbmRU
bygpIGlmIHlvdSdyZSBzcGxpdHRpbmcgdGhlIGhpZ2gtbGV2ZWwgYmFzaWMKKyAgICAvLyBibG9j
ayBpbnRvIG11bHRpcGxlIGxvdy1sZXZlbCBiYXNpYyBibG9ja3MuCisgICAgdm9pZCBhcHBlbmRU
byhMQmFzaWNCbG9jayBibG9jaykKKyAgICB7CisgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAg
ICAgICAgCisgICAgICAgIExMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChtX2J1aWxkZXIsIGJsb2Nr
KTsKKyAgICB9CisgICAgTEJhc2ljQmxvY2sgbmV3QmxvY2soKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX25leHRCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBhcHBlbmRCYXNpY0Jsb2NrKG1fZnVu
Y3Rpb24pOworICAgICAgICByZXR1cm4gaW5zZXJ0QmFzaWNCbG9ja0JlZm9yZShtX25leHRCbG9j
ayk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBwYXJhbSh1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gZ2V0UGFyYW0obV9mdW5jdGlvbiwgaW5kZXgpOyB9CisgICAgTFZhbHVlIGNvbnN0Qm9vbChi
b29sIHZhbHVlKSB7IHJldHVybiBjb25zdEludChib29sZWFuLCB2YWx1ZSk7IH0KKyAgICBMVmFs
dWUgY29uc3RJbnQzMihpbnQzMl90IHZhbHVlKSB7IHJldHVybiBjb25zdEludChpbnQzMiwgdmFs
dWUsIFNpZ25FeHRlbmQpOyB9CisgICAgTFZhbHVlIGNvbnN0SW50UHRyKGludHB0cl90IHZhbHVl
KSB7IHJldHVybiBjb25zdEludChpbnRQdHIsIHZhbHVlLCBTaWduRXh0ZW5kKTsgfQorICAgIExW
YWx1ZSBjb25zdEludDY0KGludDY0X3QgdmFsdWUpIHsgcmV0dXJuIGNvbnN0SW50KGludDY0LCB2
YWx1ZSwgU2lnbkV4dGVuZCk7IH0KKyAgICAKKyAgICBMVmFsdWUgYWRkKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkQWRkKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9
CisgICAgTFZhbHVlIGJpdEFuZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBi
dWlsZEFuZChtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiaXRYb3IoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRYb3IobV9idWlsZGVyLCBsZWZ0
LCByaWdodCk7IH0KKyAgICAKKyAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBl
IHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQorICAg
IExWYWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJ
bnRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CisgICAgTFZhbHVlIGNhc3RUb0ludDMy
KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gaW50Q2FzdCh2YWx1ZSwgaW50MzIpOyB9CisgICAgCisg
ICAgTFZhbHVlIGdldChMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZExvYWQobV9idWls
ZGVyLCByZWZlcmVuY2UpOyB9CisgICAgdm9pZCBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVm
ZXJlbmNlKSB7IGJ1aWxkU3RvcmUobV9idWlsZGVyLCB2YWx1ZSwgcmVmZXJlbmNlKTsgfQorICAg
IAorICAgIExWYWx1ZSBsb2FkKExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0LCBMVHlw
ZSByZWZUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldChidWlsZEludFRvUHRyKG1fYnVp
bGRlciwgb2Zmc2V0ID8gYWRkKHBvaW50ZXIsIGNvbnN0SW50UHRyKG9mZnNldCkpIDogcG9pbnRl
ciwgcmVmVHlwZSkpOworICAgIH0KKyAgICB2b2lkIHN0b3JlKExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQsIExUeXBlIHJlZlR5cGUpCisgICAgeworICAgICAg
ICBzZXQodmFsdWUsIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCBvZmZzZXQgPyBhZGQocG9pbnRl
ciwgY29uc3RJbnRQdHIob2Zmc2V0KSkgOiBwb2ludGVyLCByZWZUeXBlKSk7CisgICAgfQorICAg
IExWYWx1ZSBsb2FkMzIoTFZhbHVlIHBvaW50ZXIsIExWYWx1ZSBvZmZzZXQgPSAwKSB7IHJldHVy
biBsb2FkKHBvaW50ZXIsIG9mZnNldCwgcmVmMzIpOyB9CisgICAgTFZhbHVlIGxvYWQ2NChMVmFs
dWUgcG9pbnRlciwgTFZhbHVlIG9mZnNldCA9IDApIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgb2Zm
c2V0LCByZWY0Nik7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBv
ZmZzZXQgPSAwKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIG9mZnNldCwgcmVmUHRyKTsgfQorICAg
IHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBMVmFsdWUgb2Zmc2V0
ID0gMCkgeyBzdG9yZSh2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0LCByZWYzMik7IH0KKyAgICB2b2lk
IHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pbnRlciwgTFZhbHVlIG9mZnNldCA9IDAp
IHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIG9mZnNldCwgcmVmNjQpOyB9CisgICAgdm9pZCBzdG9y
ZVB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBMVmFsdWUgb2Zmc2V0ID0gMCkgeyBz
dG9yZSh2YWx1ZSwgcG9pbnRlciwgb2Zmc2V0LCByZWZQdHIpOyB9CisgICAgCisgICAgTFZhbHVl
IGVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1
aWxkZXIsIExMVk1JbnRFUSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIG5vdEVxdWFsKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExM
Vk1JbnRORSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGFib3ZlKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRVR1QsIGxl
ZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBhYm92ZU9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludFVHRSwgbGVmdCwg
cmlnaHQpOyB9CisgICAgTFZhbHVlIGJlbG93KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsg
cmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRVTFQsIGxlZnQsIHJpZ2h0KTsgfQor
ICAgIExWYWx1ZSBiZWxvd09yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludFVMRSwgbGVmdCwgcmlnaHQpOyB9CisgICAg
TFZhbHVlIGdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1
aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRTR1QsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1
ZSBncmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
YnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludFNHRSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZh
bHVlIGxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNt
cChtX2J1aWxkZXIsIExMVk1JbnRTTFQsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBsZXNz
VGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21w
KG1fYnVpbGRlciwgTExWTUludFNMRSwgbGVmdCwgcmlnaHQpOyB9CisgICAgCisgICAgTFZhbHVl
IGlzWmVybzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gZXF1YWwodmFsdWUsIGludDY0WmVybyk7
IH0KKyAgICBMVmFsdWUgbm90WmVybzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90RXF1YWwo
dmFsdWUsIGludDY0WmVybyk7IH0KKyAgICAKKyAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFs
dWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBt
YWRrKSk7IH0KKyAgICAKKyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRh
a2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFs
dWUsIHRha2VuLCBub3RUYWtlbik7IH0KKyAgICAKKyAgICB2b2lkIGp1bXAoTEJhc2ljQmxvY2sg
ZGVzdGluYXRpb24pIHsgYnVpbGRCcihtX2J1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQorICAgIHZv
aWQgYnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBMQmFzaWNCbG9j
ayBub3RUYWtlbikgeyBidWlsZENvbmRCcihtX2J1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5v
dFRha2VuKTsgfQorICAgIHZvaWQgcmV0KExWYWx1ZSB2YWx1ZSkgeyBidWlsZFJldChtX2J1aWxk
ZXIsIHZhbHVlKTsgfQorICAgIAorICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IGJ1aWxkVW5yZWFj
aGFibGUobV9idWlsZGVyKTsgfQorICAgIAorICAgIGNvbnN0IExUeXBlIGJvb2xlYW47CisgICAg
Y29uc3QgTFR5cGUgaW50MzI7CisgICAgY29uc3QgTFR5cGUgaW50NjQ7CisgICAgY29uc3QgTFR5
cGUgaW50UHRyOworICAgIGNvbnN0IExUeXBlIHJlZjMyOworICAgIGNvbnN0IExUeXBlIHJlZjY0
OworICAgIGNvbnN0IExUeXBlIHJlZlB0cjsKKyAgICBjb25zdCBMVmFsdWUgYm9vbGVhblRydWU7
CisgICAgY29uc3QgTFZhbHVlIGJvb2xlYW5GYWxzZTsKKyAgICBjb25zdCBMVmFsdWUgaW50MzJa
ZXJvOworICAgIGNvbnN0IExWYWx1ZSBpbnQ2NFplcm87CisgICAgY29uc3QgTFZhbHVlIGludFB0
clplcm87CisKKyAgICBMVmFsdWUgbV9mdW5jdGlvbjsKKyAgICBMQnVpbGRlciBtX2J1aWxkZXI7
CisgICAgTEJhc2ljQmxvY2sgbV9ibG9jazsKKyAgICBMQmFzaWNCbG9jayBtX25leHRCbG9jazsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCisjZW5kaWYgLy8gRlRMT3V0cHV0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU3RhdGVfaAorI2Rl
ZmluZSBGVExTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJGVExBYmJyZXZp
YXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgU3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFN0YXRlKTsKKyAgICAKK3B1YmxpYzoKKyAgICBTdGF0ZShERkc6OkdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBncmFwaChncmFwaCkKKyAgICAgICAgLCBtb2R1bGUoMCkKKyAgICAgICAgLCBm
dW5jdGlvbigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGlu
Z3MgaXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICAgIC8v
IEZUTCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVs
ZSBhbmQgZnVuY3Rpb24uCisgICAgREZHOjpHcmFwaCogZ3JhcGg7CisgICAgTE1vZHVsZSBtb2R1
bGU7CisgICAgTFZhbHVlIGZ1bmN0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTdGF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE0
NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIHZh
bGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhh
c2UsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlRXhwZXJpbWVudGFsRlRMLCBmYWxz
ZSkgXAorICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZVByb2ZpbGVyLCBmYWxzZSkgXAogICAgIFwK
ICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25D
b3VudCwgMTAwMDApIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTQ3MDE0KQorKysgU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA4LDYgKzgwOCwxMCBA
QAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIENQVShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykKKyNk
ZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBqaXQgaXMgbm90IGF2
YWlsYWJsZSwgZW5hYmxlIHRoZSBMTEludCBDIExvb3A6ICovCiAjaWYgIUVOQUJMRShKSVQpCiAj
dW5kZWYgRU5BQkxFX0xMSU5UICAgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmlu
ZSBpdC4gKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195806</attachid>
            <date>2013-03-29 14:58:16 -0700</date>
            <delta_ts>2013-03-29 16:00:13 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>107964</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MjUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwOCBA
QAorMjAxMy0wMy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBKSVQgc2hvdWxkIGJlIGFibGUgcnVuIHNvbWUgc2ltcGxlIGZ1bmN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM0
ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgRlRMIEpJVCAoRm91cnRoIFRp
ZXIgTExWTSBKSVQpLgorICAgICAgICBJdCBpbmNsdWRlcyBhIGxvd2VyaW5nIGZyb20gdGhlIERG
RyBJUiB0byBMTFZNIElSIChGVEw6Omxvd2VyREZHVG9MTFZNKQorICAgICAgICBhbmQgYSAiYmFj
a2VuZCIgc3RlcCB0aGF0IGludm9rZXMgdGhlIExMVk0gYW5kIHdyYXBzIHRoZSByZXN1bHRpbmcK
KyAgICAgICAgZnVuY3Rpb24gaW4gYSB0aHVuayAoRlRMOjpjb21waWxlKS4KKyAgICAgICAgCisg
ICAgICAgIEFsbCBMTFZNIElSIGJ1aWxkaW5nIGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCB1cCBpbnRv
IGEgbmljZXIgRlRMIEFQSS4KKyAgICAgICAgRmlyc3QgdGhleSdyZSB3cmFwcGVkIGluIGFuIGFi
YnJldmlhdGVkIEFQSSAoRlRMQWJicmV2aWF0aW9ucy5oKSBhbmQKKyAgICAgICAgdGhlbiBhZ2Fp
biBpbnRvIGFuIG9iamVjdC1vcmllbnRlZCBJUiBidWlsZGVyIChGVExPdXRwdXQuaCkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJ1bnMgdGhpbmdzLiBJIGRvbid0IGtub3cgaG93IGZhc3QgaXQg
cnVucyB0aGluZ3MuIEFuZCBJIGRvbid0CisgICAgICAgIG1ha2UgYW55IGNsYWltcyBvZiBzdGFi
aWxpdHkuIFRoZSBGVEwgaXMgcnVudGltZS1kaXNhYmxlZCBieSBkZWZhdWx0OworICAgICAgICB5
b3Ugd2lsbCBlbmFibGUgaXQgYnkgZG9pbmcgLS11c2VFeHBlcmltZW50YWxGVEw9dHJ1ZS4gUHJv
YmFibHkgaWYgeW91CisgICAgICAgIGRvIHRoaXMsIHlvdSB3aWxsIHJ1biBzbG93ZXIsIGJlY2F1
c2Ugb2YgdGhlIGhlYXZ5IHRodW5raW5nIHdlIGRvLCB0aGUKKyAgICAgICAgZmFjdCB0aGF0IHdl
IGRvbid0IGhhdmUgYW55dGhpbmcgcmVzZW1ibGluZyBhIHNlbnNpYmxlIHRpZXJpbmcgc3Rvcnks
CisgICAgICAgIGFuZCBiZWNhdXNlIHdlIG9ubHkgY29tcGlsZSByaWRpY3Vsb3VzbHkgdGlueSBm
dW5jdGlvbnMuCisgICAgICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBzdGlsbCByZXF1
aXJlcyBhIGN1c3RvbSBzZXQgb2YgTExWTSBoZWFkZXJzIHRvIGJ1aWxkLgorICAgICAgICBJIGFt
IHdvcmtpbmcgb24gZ2V0dGluZyB0aGF0IHVwLXN0cmVhbWVkIHRvIExMVk0sIGFuZCBzZXBhcmF0
ZWx5IEknbGwKKyAgICAgICAgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGJ1aWxkIGNoZWNrZWQg
aW50byB0aGlzIGJyYW5jaC4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0phdmFTY3JpcHRD
b3JlLnhjY29uZmlnOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKE9wZXJh
bmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Ok9wZXJhbmRzKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om5l
ZWRzVHlwZUNoZWNrKToKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmZpbHRlckVkZ2VCeVVzZSk6CisgICAgICAgICogZGZnL0RGR0Ry
aXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bmVlZHNUeXBlQ2hlY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OlNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpTcGVjdWxh
dGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5k
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2hvdWxkTm90SGF2ZVR5cGVDaGVjayk6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1heUhhdmVUeXBlQ2hlY2spOgorICAgICAgICAo
SlNDOjpERkc6OmlzRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGwpOgorICAgICAg
ICAqIGZ0bDogQWRkZWQuCisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDogQWRkZWQu
CisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OmludDFUeXBlKToKKyAgICAgICAg
KEpTQzo6RlRMOjppbnQzMlR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OmludDY0VHlwZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6aW50UHRyVHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6cG9pbnRl
clR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OmdldFBhcmFtKToKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb25zdEludCk6CisgICAgICAgIChKU0M6OkZUTDo6YXBwZW5kQmFzaWNCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6aW5zZXJ0QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6YnVp
bGRBbGxvY2EpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQWRkKToKKyAgICAgICAgKEpTQzo6
RlRMOjpidWlsZEFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRYb3IpOgorICAgICAgICAo
SlNDOjpGVEw6OmJ1aWxkTG9hZCk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRTdG9yZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6YnVpbGRaRXh0KToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZElu
dENhc3QpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkSW50VG9QdHIpOgorICAgICAgICAoSlND
OjpGVEw6OmJ1aWxkUHRyVG9JbnQpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkSUNtcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6YnVpbGRTZWxlY3QpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxk
QnIpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkQ29uZEJyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpidWlsZFJldCk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRVbnJlYWNoYWJsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0
aWVzLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5j
cHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRW50
cnkpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5j
cHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpK
SVRDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjp+SklUQ29kZSk6CisgICAgICAg
IChKU0M6OkZUTDo6SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENv
ZGU6Om9mZnNldE9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpzaXplKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpjb250YWlucyk6CisgICAgICAgICogZnRsL0ZUTEpJVENv
ZGUuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSklUQ29kZSk6CisgICAgICAg
ICogZnRsL0ZUTExMVk1IZWFkZXJzLmg6IEFkZGVkLgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKExvd2VyREZHVG9M
TFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6TG93ZXJERkdUb0xMVk0p
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEZsdXNoZWRMb2NhbE9wUm9vdHMpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphZGRGbHVzaGVkTG9jYWxPcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEZsdXNoZWRMb2NhbEVkZ2UpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSlNDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2spOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhhbnRvbSk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVSZXR1cm4pOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjp0ZXJtaW5hdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpiYWNr
d2FyZFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZvcndh
cmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6bG93SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNoZWNrTm90SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp1
bmJveEludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Ym94SW50MzIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja05vdENlbGwpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja05vdEJvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp1bmJveEJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjphZGRyZXNzRm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6cGF5bG9hZEZvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnRhZ0Zv
cik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb2RlQmxvY2spOgorICAgICAgICAoSlND
OjpGVEw6Omxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0u
aDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDogQWRk
ZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpPdXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp+T3V0cHV0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6YXBwZW5kVG8pOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bmV3Qmxv
Y2spOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6cGFyYW0pOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6Y29uc3RCb29sKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNvbnN0
SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29uc3RJbnRQdHIpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29uc3RJbnQ2NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0QW5kKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp6
ZXJvRXh0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludENhc3QpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6Y2FzdFRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6Z2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNldCk6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN0b3JlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQzMik6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0Ojpsb2FkNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZFB0cik6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzdG9yZTMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OnN0b3JlNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3RvcmVQdHIpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6bm90RXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWJvdmUpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWJvdmVPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpPdXRwdXQ6OmJlbG93KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJlbG93T3JFcXVh
bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpncmVhdGVyVGhhbik6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpncmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6bGVzc1RoYW4pOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bGVzc1RoYW5P
ckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzY0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6Om5vdFplcm82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojp0ZXN0Tm9uWmVybzY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNlbGVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpqdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6OmJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpyZXQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6dW5yZWFjaGFibGUpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgorCiAyMDEzLTAzLTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogSklUQ29k
ZSBzaG91bGQgYWJzdHJhY3QgZXhhY3RseSBob3cgdGhlIEpJVCBjb2RlIGlzIHN0cnVjdHVyZWQg
YW5kIHdoZXJlIGl0IHdhcyBhbGxvY2F0ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
b25maWd1cmF0aW9ucy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvSmF2YVNjcmlwdENvcmUueGNjb25maWcJ
KHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9u
cy9KYXZhU2NyaXB0Q29yZS54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEy
IEBAIEpTVkFMVUVfTU9ERUxfeDg2XzY0ID0gNjQ7CiAKIC8vIFByZXZlbnQgQysrIHN0YW5kYXJk
IGxpYnJhcnkgb3BlcmF0b3IgbmV3LCBkZWxldGUgYW5kIHRoZWlyIHJlbGF0ZWQgZXhjZXB0aW9u
IHR5cGVzIGZyb20gYmVpbmcgZXhwb3J0ZWQgYXMgd2VhayBzeW1ib2xzLgogT1RIRVJfTERGTEFH
U19ISURFX1NZTUJPTFMgPSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUSVN0OWJhZF9h
bGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUSVN0OWV4Y2VwdGlvbiAtV2wsLXVu
ZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUU1N0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3lt
Ym9sIC1XbCxfX1pUU1N0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pk
bFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19abndtUHYgLVdsLC1hbGxfbG9hZDsK
K09USEVSX0xERkxBR1NfTExWTSA9IC1scHRocmVhZCAtbG0gLWxndGVzdF9tYWluIC1sZ3Rlc3Qg
LWxMTFZNVGFibGVHZW4gLWxMTFZNRGVidWdJbmZvIC1sTExWTU9wdGlvbiAtbExMVk1YODZEaXNh
c3NlbWJsZXIgLWxMTFZNWDg2QXNtUGFyc2VyIC1sTExWTVg4NkNvZGVHZW4gLWxMTFZNU2VsZWN0
aW9uREFHIC1sTExWTUFzbVByaW50ZXIgLWxMTFZNWDg2RGVzYyAtbExMVk1YODZJbmZvIC1sTExW
TVg4NkFzbVByaW50ZXIgLWxMTFZNWDg2VXRpbHMgLWxMTFZNSVJSZWFkZXIgLWxMTFZNQXNtUGFy
c2VyIC1sTExWTU1DRGlzYXNzZW1ibGVyIC1sTExWTU1DUGFyc2VyIC1sTExWTUluc3RydW1lbnRh
dGlvbiAtbExMVk1BcmNoaXZlIC1sTExWTUJpdFJlYWRlciAtbExMVk1JbnRlcnByZXRlciAtbExM
Vk1pcG8gLWxMTFZNVmVjdG9yaXplIC1sTExWTUxpbmtlciAtbExMVk1CaXRXcml0ZXIgLWxMTFZN
TUNKSVQgLWxMTFZNSklUIC1sTExWTUNvZGVHZW4gLWxMTFZNT2JqQ0FSQ09wdHMgLWxMTFZNU2Nh
bGFyT3B0cyAtbExMVk1JbnN0Q29tYmluZSAtbExMVk1UcmFuc2Zvcm1VdGlscyAtbExMVk1pcGEg
LWxMTFZNQW5hbHlzaXMgLWxMTFZNUnVudGltZUR5bGQgLWxMTFZNRXhlY3V0aW9uRW5naW5lIC1s
TExWTVRhcmdldCAtbExMVk1NQyAtbExMVk1PYmplY3QgLWxMTFZNQ29yZSAtbExMVk1TdXBwb3J0
OwogT1RIRVJfTERGTEFHU19CQVNFID0gLWxvYmpjIC1XbCwtWSwzICQoT1RIRVJfTERGTEFHU19I
SURFX1NZTUJPTFMpOwogT1RIRVJfTERGTEFHUyA9ICQoT1RIRVJfTERGTEFHU18kKFBMQVRGT1JN
X05BTUUpKTsKIE9USEVSX0xERkxBR1NfaXBob25lb3MgPSAkKE9USEVSX0xERkxBR1NfQkFTRSk7
CiBPVEhFUl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoT1RIRVJfTERGTEFHU19pcGhvbmVv
cyk7Ci1PVEhFUl9MREZMQUdTX21hY29zeCA9ICQoT1RIRVJfTERGTEFHU19CQVNFKSAtc3ViX2xp
YnJhcnkgbGlib2JqYyAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlczsKK09USEVSX0xERkxBR1NfbWFj
b3N4ID0gJChPVEhFUl9MREZMQUdTX0JBU0UpICQoT1RIRVJfTERGTEFHU19MTFZNKSAtc3ViX2xp
YnJhcnkgbGlib2JqYyAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlczsKIEdDQ19QUkVGSVhfSEVBREVS
ID0gSmF2YVNjcmlwdENvcmVQcmVmaXguaDsKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogSEVBREVSX1NFQVJDSF9QQVRIUyA9ICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUiICQoSEVBREVSX1NFQVJDSF9QQVRIUyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ3MDE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTI4MCw2ICsyODAsMTggQEAKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1
RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQz
NkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4
RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OworCQkwRkVBMEEwODE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFi
YnJldmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkVBMEEwOTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZFMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuY3BwICovOyB9OworCQkwRkVBMEEwQTE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMDAxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovOyB9OworCQkwRkVBMEEwQzE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkVBMEEwRDE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklU
Q29kZS5jcHAgKi87IH07CisJCTBGRUEwQTBFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEw
MzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
Y3BwICovOyB9OworCQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xM
Vk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTExMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkVBMEExMjE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA3MTcwNTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTE0
MTcwNjM2MzYwMEJCNzIyQyAvKiBGVExMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMTMxNzA2MzYzNjAwQkI3MjJDIC8qIEZU
TExMVk1IZWFkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VD
QjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuY3BwICovOyB9OwpAQCAtMTE5Niw2ICsxMjA4LDE4IEBACiAJCTBGRERCRkIzMTY2NkVF
RDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGlvbnMuaDsgcGF0
aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUEwOUZFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9
IGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVBMDlGRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTENhcGFiaWxpdGllcy5oOyBwYXRoID0gZnRsL0ZUTENh
cGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVBMEEwMDE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExDb21waWxlLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TENvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQ29tcGlsZS5o
OyBwYXRoID0gZnRsL0ZUTENvbXBpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSklUQ29kZS5jcHA7IHBhdGggPSBmdGwvRlRMSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTAzMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTEpJVENvZGUuaDsgcGF0aCA9IGZ0bC9GVExKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb3dlckRGR1Rv
TExWTS5jcHA7IHBhdGggPSBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdU
b0xMVk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG93ZXJERkdUb0xM
Vk0uaDsgcGF0aCA9IGZ0bC9GVExMb3dlckRGR1RvTExWTS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE91dHB1dC5oOyBwYXRoID0gZnRsL0ZUTE91
dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVBMEEwNzE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
U3RhdGUuaDsgcGF0aCA9IGZ0bC9GVExTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVBMEExMzE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRlcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTExWTUhlYWRlcnMuaDsgcGF0aCA9IGZ0bC9G
VExMTFZNSGVhZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDQjE2
MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3
RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODk4LDYgKzE5MjIsNyBAQAogCQkJCTE0ODBEQjlBMEREQzIyMzEwMDNDRkRGMiAv
KiBkZWJ1Z2dlciAqLywKIAkJCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1i
bGVyICovLAogCQkJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8sCisJCQkJMEZF
QTA5RkMxNzA1MTM3RjAwQkI3MjJDIC8qIGZ0bCAqLywKIAkJCQkxNDJFMzEyQTEzNEZGMEE2MDBB
RkFEQjUgLyogaGVhcCAqLywKIAkJCQkxNDI5RDc3QTBFRDIwRDczMDBCODk2MTkgLyogaW50ZXJw
cmV0ZXIgKi8sCiAJCQkJMTQyOUQ5MkMwRUQyMkQ3MDAwQjg5NjE5IC8qIGppdCAqLywKQEAgLTE5
NjEsNiArMTk4NiwyNSBAQAogCQkJbmFtZSA9IGxsaW50OwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJMEZFQTA5RkMxNzA1MTM3RjAwQkI3MjJDIC8qIGZ0bCAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQTA5RkQxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLywKKwkJCQkwRkVBMDlGRTE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCAqLywKKwkJCQkwRkVBMDlGRjE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmggKi8sCisJCQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTENvbXBpbGUuY3BwICovLAorCQkJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExDb21waWxlLmggKi8sCisJCQkJMEZFQTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJ
VENvZGUuY3BwICovLAorCQkJCTBGRUEwQTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2Rl
LmggKi8sCisJCQkJMEZFQTBBMTMxNzA2MzYzNjAwQkI3MjJDIC8qIEZUTExMVk1IZWFkZXJzLmgg
Ki8sCisJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKKwkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKKwkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJ
CQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCisJCQkpOworCQkJ
bmFtZSA9IGZ0bDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJF
MTU4RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3NlbWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjk5MSw2ICszMDM1LDcgQEAKIAkJCQkwRjIxQzI3RDE0
QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwQjgzQTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9u
U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMTIsNiArMzA1
Nyw3IEBACiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3Rh
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyogRGF0
ZUluc3RhbmNlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUEwQTEyMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEMwRTE3MTM1RTAw
MkM3RTgyIC8qIERhdGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwM0U4MEUx
NzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKQEAg
LTMwMjgsNiArMzA3NCw3IEBACiAJCQkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jh
c2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAv
KiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
QTBBMTExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEg
LyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QTE0QzNDRDI5
MDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTUsNiAr
MzE2Miw3IEBACiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVBMEEwRTE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RjhCQ0UxNTc1NDRBOTAw
MjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OTkxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTMxMjMsNiArMzE3MSw3IEBACiAJCQkJOTY5QTA3OTkwRUQxRDNBRTAw
RjFGNjgxIC8qIEluc3RydWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5
QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
OUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0
Q29yZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjM2LDcgKzMyODUsOSBAQAogCQkJCTg2QUU2NEE5
MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExMb3dlckRGR1RvTExWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVBMEExNDE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJs
b2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTMzOTQsNiArMzQ0NSw3IEBACiAJCQkJOTY4OENC
MTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTYsNyArMzY2OCw3IEBACiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCQlzaGVsbFBhdGggPSAvYmlu
L3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiaWYgWyAtZiAuLi8uLi9Ub29scy9TY3JpcHRzL2NoZWNr
LWZvci13ZWFrLXZ0YWJsZXMtYW5kLWV4dGVybmFscyBdOyB0aGVuXG4gICAgLi4vLi4vVG9vbHMv
U2NyaXB0cy9jaGVjay1mb3Itd2Vhay12dGFibGVzLWFuZC1leHRlcm5hbHMgfHwgZXhpdCAkP1xu
ZmkiOworCQkJc2hlbGxTY3JpcHQgPSAiZXhpdCAwXG5cbmlmIFsgLWYgLi4vLi4vVG9vbHMvU2Ny
aXB0cy9jaGVjay1mb3Itd2Vhay12dGFibGVzLWFuZC1leHRlcm5hbHMgXTsgdGhlblxuICAgIC4u
Ly4uL1Rvb2xzL1NjcmlwdHMvY2hlY2stZm9yLXdlYWstdnRhYmxlcy1hbmQtZXh0ZXJuYWxzIHx8
IGV4aXQgJD9cbmZpIjsKIAkJfTsKIAkJNUQyRjdDRjkwQzY4NzVCQjAwQjVCNzJCIC8qIFVwZGF0
ZSBJbmZvLnBsaXN0IHdpdGggdmVyc2lvbiBpbmZvcm1hdGlvbiAqLyA9IHsKIAkJCWlzYSA9IFBC
WFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKQEAgLTM3ODgsNiArMzg0MCw3IEBACiAJCQkJMTQyODA4
MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMzEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM0MTA3RUMzNzYwMDQyN0E0
OCAvKiBEYXRlQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNTEwN0VD
Mzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzg2OCw2
ICszOTIxLDcgQEAKIAkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2Fs
bFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNFMTA3RUMzNzYwMDQy
N0E0OCAvKiBJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUEwQTBEMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNE
MTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMTc4NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM5MDcsNiArMzk2MSw3IEBACiAJCQkJRTE4RTNB
NTkwREY5Mjc4QzAwRDkwQjM0IC8qIEpTR2xvYmFsRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VD
MTNFMDAxM0U3QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVF
QkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3
MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTQwNDIsNiArNDA5Nyw3IEBACiAJCQkJQTc2RjI3OTQxNUYxM0M5NjAwNTE3RDY3IC8qIFVu
bGlua2VkQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEEzMzFGMTVCRDJFMDcw
MDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0
MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQTBBMDkxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFu
ZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTQ3MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDgg
QEAgc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAKIGVudW0gT3BlcmFuZEtpbmQgeyBBcmd1
bWVudE9wZXJhbmQsIExvY2FsT3BlcmFuZCB9OwogCitlbnVtIE9wZXJhbmRzTGlrZVRhZyB7IE9w
ZXJhbmRzTGlrZSB9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBP
cGVyYW5kVmFsdWVUcmFpdHM8VD4gPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgpAQCAtNTks
NiArNjEsMTMgQEAgcHVibGljOgogICAgICAgICBtX2xvY2Fscy5maWxsKFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCksIG51bUxvY2Fscyk7CiAgICAgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIE90aGVyVHJhaXRzPgorICAgIGV4cGxpY2l0IE9wZXJhbmRzKE9wZXJhbmRz
TGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VSwgT3RoZXJUcmFpdHM+JiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgb3RoZXIubnVt
YmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgIG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0
VmFsdWUoKSwgb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgfQorICAgIAogICAgIHNpemVf
dCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsg
fQogICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzLnNp
emUoKTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDIxIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzOwogICAgIH0KICAgICAKKyAgICBi
b29sIG5lZWRzVHlwZUNoZWNrKE5vZGUqIG5vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2Vk
VGhyb3VnaCkKKyAgICB7CisgICAgICAgIHJldHVybiBmb3JOb2RlKG5vZGUpLm1fdHlwZSAmIH50
eXBlc1Bhc3NlZFRocm91Z2g7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2so
RWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gpCisgICAgeworICAg
ICAgICByZXR1cm4gbmVlZHNUeXBlQ2hlY2soZWRnZS5ub2RlKCksIHR5cGVzUGFzc2VkVGhyb3Vn
aCk7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZHNUeXBlQ2hlY2soRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVGaWx0ZXJGb3IoZWRn
ZS51c2VLaW5kKCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdp
bm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFy
Z3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZv
ciBDRkEKICAgICAvLyBleGVjdXRpb24uCkBAIC0xODUsMTkgKzIwMCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVyRWRnZUJ5VXNlKE5vZGUqIG5vZGUsIEVk
Z2UmIGVkZ2UpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgc3dpdGNoIChl
ZGdlLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6Ci0gICAgICAgIGNh
c2UgS25vd25OdW1iZXJVc2U6Ci0gICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgotICAgICAgICBj
YXNlIEtub3duU3RyaW5nVXNlOgotICAgICAgICAgICAgQVNTRVJUKCEoZm9yTm9kZShlZGdlKS5t
X3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIAorICAgICAgICBBU1NFUlQobWF5SGF2
ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkgfHwgIW5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKICAg
ICAgICAgZmlsdGVyQnlUeXBlKG5vZGUsIGVkZ2UsIHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5k
KCkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCShyZXZpc2lvbiAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAi
REZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVk
ZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2Fw
YWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgorI2luY2x1ZGUgIkZUTExvd2Vy
REZHVG9MTFZNLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogCkBAIC0xNTMsNiArMTU3LDE2IEBAIGlubGluZSBi
b29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBpZiAodmFsaWRhdGlvbkVuYWJs
ZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnLCBtb2RlRm9yRmluYWxWYWxpZGF0ZSk7CiAgICAg
CisgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCisgICAgICAgICYmIGNvbXBp
bGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZn
KSkgeworICAgICAgICBGVEw6OlN0YXRlIHN0YXRlKGRmZyk7CisgICAgICAgIEZUTDo6bG93ZXJE
RkdUb0xMVk0oc3RhdGUpOworICAgICAgICBGVEw6OmNvbXBpbGUoc3RhdGUsIGppdENvZGUsICpq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBhZGQgc3Vw
cG9ydCBmb3IgdGhlIGNhc2Ugd2hlcmUgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFGbG93
SklUKGRmZyk7CiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBp
bGVGdW5jdGlvbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM1LDcg
KzE4MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICghdmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc1Byb2ZpdGFibGVUb1VuYm94KCkpCisgICAgICAgIGlmICghdmFyaWFi
bGVBY2Nlc3NEYXRhLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjI0Niw3ICsyMjQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKICAgICAKICAgICAvLyBI
ZWxwZXJzIGZvciBwZXJmb3JtaW5nIHR5cGUgY2hlY2tzIG9uIGFuIGVkZ2Ugc3RvcmVkIGluIHRo
ZSBnaXZlbiByZWdpc3RlcnMuCi0gICAgYm9vbCBuZWVkc1R5cGVDaGVjayhFZGdlIGVkZ2UsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCkgeyByZXR1cm4gbV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLm1fdHlwZSAmIH50eXBlc1Bhc3NlZFRocm91Z2g7IH0KKyAgICBib29sIG5lZWRzVHlw
ZUNoZWNrKEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7IHJl
dHVybiBtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCk7IH0K
ICAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKEpTVmFsdWVTb3VyY2UsIEVkZ2UsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCk7CiAgICAgdm9pZCB0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsK
ICAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBWYWx1ZVJlY292ZXJ5Jik7CkBAIC0yODUxLDcgKzI4NTEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IE51bWJlclVzZSB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBLbm93bk51bWJlclVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBSZWFsTnVt
YmVyVXNlKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KQEAgLTI5
MDAsNyArMjkwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAg
aWYgKCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBDZWxsVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBPYmplY3RVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IGVkZ2Uu
dXNlS2luZCgpID09IEtub3duU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ09i
amVjdFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdPclN0cmluZ09iamVjdFVzZSkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChub2RlKCkpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQpAQCAtMzAwNiw5ICszMDA2LDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKIH0KIAogI2RlZmlu
ZSBERkdfVFlQRV9DSEVDSyhzb3VyY2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRv
RmFpbCkgZG8geyBcCi0gICAgICAgIGlmICghbmVlZHNUeXBlQ2hlY2soKGVkZ2UpLCAodHlwZXNQ
YXNzZWRUaHJvdWdoKSkpICAgICAgICAgICAgICBcCisgICAgICAgIEpTVmFsdWVTb3VyY2UgX2R0
Y19zb3VyY2UgPSAoc291cmNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IEVkZ2UgX2R0Y19lZGdlID0gKGVkZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9kdGNfdHlwZXNQYXNzZWRUaHJvdWdo
ID0gdHlwZXNQYXNzZWRUaHJvdWdoOyAgICBcCisgICAgICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
X2R0Y19lZGdlLCBfZHRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpICAgICAgICBcCiAgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIHR5cGVDaGVjaygoc291cmNlKSwgKGVkZ2UpLCAodHlwZXNQYXNzZWRU
aHJvdWdoKSwgKGp1bXBUb0ZhaWwpKTsgXAorICAgICAgICB0eXBlQ2hlY2soX2R0Y19zb3VyY2Us
IF9kdGNfZWRnZSwgX2R0Y190eXBlc1Bhc3NlZFRocm91Z2gsIChqdW1wVG9GYWlsKSk7IFwKICAg
ICB9IHdoaWxlICgwKQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTQ3MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYg
Kzk1LDI1IEBAIEFMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckYKICAgICB9
CiB9CiAKK0FMV0FZU19JTkxJTkUgYm9vbCBzaG91bGROb3RIYXZlVHlwZUNoZWNrKFVzZUtpbmQg
a2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFVudHlwZWRVc2U6CisgICAg
Y2FzZSBLbm93bkludDMyVXNlOgorICAgIGNhc2UgS25vd25OdW1iZXJVc2U6CisgICAgY2FzZSBL
bm93bkNlbGxVc2U6CisgICAgY2FzZSBLbm93blN0cmluZ1VzZToKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQUxX
QVlTX0lOTElORSBib29sIG1heUhhdmVUeXBlQ2hlY2soVXNlS2luZCBraW5kKQoreworICAgIHJl
dHVybiAhc2hvdWxkTm90SGF2ZVR5cGVDaGVjayhraW5kKTsKK30KKwogQUxXQVlTX0lOTElORSBi
b29sIGlzTnVtZXJpY2FsKFVzZUtpbmQga2luZCkKIHsKICAgICBzd2l0Y2ggKGtpbmQpIHsKQEAg
LTEwOCw2ICsxMjcsMzQgQEAgQUxXQVlTX0lOTElORSBib29sIGlzTnVtZXJpY2FsKFVzZUtpbmQg
awogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIGlzRG91YmxlKFVzZUtpbmQga2luZCkK
K3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgY2Fz
ZSBSZWFsTnVtYmVyVXNlOgorICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitBTFdB
WVNfSU5MSU5FIGJvb2wgaXNDZWxsKFVzZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIENlbGxVc2U6CisgICAgY2FzZSBLbm93bkNlbGxVc2U6CisgICAgY2FzZSBP
YmplY3RVc2U6CisgICAgY2FzZSBTdHJpbmdVc2U6CisgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
KyAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKKyAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0
VXNlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQWJicmV2aWF0aW9u
c19oCisjZGVmaW5lIEZUTEFiYnJldmlhdGlvbnNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTExMVk1IZWFkZXJzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBmaWxlIGNvbnRh
aW5zIHNob3J0LWZvcm0gY2FsbHMgaW50byB0aGUgTExWTSBDIEFQSS4gSXQgaXMgbWVhbnQgdG8K
Ky8vIHNhdmUgdHlwaW5nIGFuZCBtYWtlIHRoZSBsb3dlcmluZyBjb2RlIGNsZWFyZXIuIElmIHdl
IGV2ZXIgY2FsbCBhbiBMTFZNIEMgQVBJCisvLyBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBpbiB0
aGUgRlRMIGxvd2VyaW5nIGNvZGUsIHdlIHNob3VsZCBhZGQgYSBzaG9ydGN1dCBmb3IKKy8vIGl0
IGhlcmUuCisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2Vycm9yICJUaGUgRlRMIGJhY2tlbmQg
YXNzdW1lcyB0aGF0IHBvaW50ZXJzIGFyZSA2NC1iaXQuIgorI2VuZGlmCisKK3R5cGVkZWYgTExW
TUJhc2ljQmxvY2tSZWYgTEJhc2ljQmxvY2s7Cit0eXBlZGVmIExMVk1CdWlsZGVyUmVmIExCdWls
ZGVyOwordHlwZWRlZiBMTFZNSW50UHJlZGljYXRlIExJbnRQcmVkaWNhdGU7Cit0eXBlZGVmIExM
Vk1Nb2R1bGVSZWYgTE1vZHVsZTsKK3R5cGVkZWYgTExWTVR5cGVSZWYgTFR5cGU7Cit0eXBlZGVm
IExMVk1WYWx1ZVJlZiBMVmFsdWU7CisKK3N0YXRpYyBpbmxpbmUgTFR5cGUgaW50MVR5cGUoKSB7
IHJldHVybiBMTFZNSW50MVR5cGUoKTsgfQorc3RhdGljIGlubGluZSBMVHlwZSBpbnQzMlR5cGUo
KSB7IHJldHVybiBMTFZNSW50MzJUeXBlKCk7IH0KK3N0YXRpYyBpbmxpbmUgTFR5cGUgaW50NjRU
eXBlKCkgeyByZXR1cm4gTExWTUludDY0VHlwZSgpOyB9CitzdGF0aWMgaW5saW5lIExUeXBlIGlu
dFB0clR5cGUoKSB7IHJldHVybiBMTFZNSW50NjRUeXBlKCk7IH0KKworc3RhdGljIGlubGluZSBM
VHlwZSBwb2ludGVyVHlwZShMVHlwZSB0eXBlKSB7IHJldHVybiBMTFZNUG9pbnRlclR5cGUodHlw
ZSwgMCk7IH0KKworc3RhdGljIGlubGluZSBMVmFsdWUgZ2V0UGFyYW0oTFZhbHVlIGZ1bmN0aW9u
LCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gTExWTUdldFBhcmFtKGZ1bmN0aW9uLCBpbmRleCk7
IH0KKworZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0ZW5kLCBTaWduRXh0ZW5kIH07CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBjb25zdEludChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcg
dmFsdWUsIEJpdEV4dGVuc2lvbiBleHRlbnNpb24pIHsgcmV0dXJuIExMVk1Db25zdEludCh0eXBl
LCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9CisKK3N0YXRpYyBpbmxpbmUgTEJh
c2ljQmxvY2sgYXBwZW5kQmFzaWNCbG9jayhMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIExMVk1B
cHBlbmRCYXNpY0Jsb2NrKGZ1bmN0aW9uLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTEJhc2ljQmxv
Y2sgaW5zZXJ0QmFzaWNCbG9jayhMQmFzaWNCbG9jayBiZWZvcmVCYXNpY0Jsb2NrKSB7IHJldHVy
biBMTFZNSW5zZXJ0QmFzaWNCbG9jayhiZWZvcmVCYXNpY0Jsb2NrLCAiIik7IH0KKworc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRBbGxvY2EoTEJ1aWxkZXIgYnVpbGRlciwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gTExWTUJ1aWxkQWxsb2NhKGJ1aWxkZXIsIHR5cGUsICIiKTsgfQorc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRBZGQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkQWRkKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7
IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQW5kKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZEFuZChidWlsZGVyLCBsZWZ0
LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFhvcihMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBMTFZNQnVpbGRYb3Io
YnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRM
b2FkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBwb2ludGVyKSB7IHJldHVybiBMTFZNQnVpbGRM
b2FkKGJ1aWxkZXIsIHBvaW50ZXIsICIiKTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRT
dG9yZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyKSB7IHJl
dHVybiBMTFZNQnVpbGRTdG9yZShidWlsZGVyLCB2YWx1ZSwgcG9pbnRlcik7IH0KK3N0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkWkV4dChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZFpFeHQoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIi
KTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRDYXN0KExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkSW50Q2FzdChidWls
ZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEludFRv
UHRyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4g
TExWTUJ1aWxkSW50VG9QdHIoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQorc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRQdHJUb0ludChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUs
IExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZFB0clRvSW50KGJ1aWxkZXIsIHZhbHVlLCB0
eXBlLCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSUNtcChMQnVpbGRlciBidWls
ZGVyLCBMSW50UHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIExMVk1CdWlsZElDbXAoYnVpbGRlciwgY29uZCwgbGVmdCwgcmlnaHQsICIiKTsgfQorc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNv
bmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIExMVk1CdWls
ZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRl
c3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVpbGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0K
K3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ29uZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBMQmFzaWNCbG9jayBub3RUYWtlbikgeyBy
ZXR1cm4gTExWTUJ1aWxkQ29uZEJyKGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2Vu
KTsgfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRSZXQoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBMTFZNQnVpbGRSZXQoYnVpbGRlciwgdmFsdWUpOyB9CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZFVucmVhY2hhYmxlKExCdWlsZGVyIGJ1aWxkZXIpIHsgcmV0
dXJuIExMVk1CdWlsZFVucmVhY2hhYmxlKGJ1aWxkZXIpOyB9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQWJi
cmV2aWF0aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2Ug
REZHOworCitib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQoreworICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9k
ZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJbmRleCA9
IGdyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBjaGlsZEluZGV4LS07KSB7CisgICAgICAgICAgICAg
ICAgRWRnZSBlZGdlID0gZ3JhcGguY2hpbGQobm9kZSwgY2hpbGRJbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICAg
ICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUg
T0suCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtub3cgaG93IHRvIGhhbmRsZSBhbnl0aGlu
ZyBlbHNlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgICAg
ICAgICAgLy8gVGhlc2UgYXJlIE9LLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUg
YW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExDYXBhYmlsaXRpZXNfaAorI2RlZmluZSBGVExD
YXBhYmlsaXRpZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKworYm9vbCBjYW5Db21waWxlKERGRzo6R3JhcGgmKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAv
LyBGVExDYXBhYmlsaXRpZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExDb21waWxlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1
ZGUgIkZUTExMVk1IZWFkZXJzLmgiCisjaW5jbHVkZSAiSklUU3R1YnMuaCIKKyNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcg
bmFtZXNwYWNlIERGRzsKKwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKkdlbmVyYXRlZEZ1bmN0
aW9uKShFeGVjU3RhdGUqKTsKKworc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxsSGVscGVy
cyYgaml0KQoreworICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6cmVnVDIpOworICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVn
VDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBqaXQuZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKGppdC5jb2RlQmxvY2soKSwgSlNTdGFjazo6Q29kZUJsb2NrKTsKK30KKwordm9p
ZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQoreworICAgIExMVk1F
eGVjdXRpb25FbmdpbmVSZWYgZW5naW5lOworICAgIGNoYXIqIGVycm9yID0gMDsKKyAgICAKKyAg
ICBpZiAoTExWTUNyZWF0ZUpJVENvbXBpbGVyRm9yTW9kdWxlKCZlbmdpbmUsIHN0YXRlLm1vZHVs
ZSwgMiwgJmVycm9yKSAhPSAwKSB7CisgICAgICAgIGRhdGFMb2coIkZBVEFMOiBDb3VsZCBub3Qg
Y3JlYXRlIExMVk0gZXhlY3V0aW9uIGVuZ2luZTogIiwgZXJyb3IsICJcbiIpOworICAgICAgICBD
UkFTSCgpOworICAgIH0KKyAgICAKKyAgICBMTFZNUGFzc01hbmFnZXJSZWYgcGFzcyA9IExMVk1D
cmVhdGVQYXNzTWFuYWdlcigpOworICAgIExMVk1BZGRUYXJnZXREYXRhKExMVk1HZXRFeGVjdXRp
b25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSksIHBhc3MpOworICAgIExMVk1BZGRDb25zdGFudFBy
b3BhZ2F0aW9uUGFzcyhwYXNzKTsKKyAgICBMTFZNQWRkSW5zdHJ1Y3Rpb25Db21iaW5pbmdQYXNz
KHBhc3MpOworICAgIExMVk1BZGRQcm9tb3RlTWVtb3J5VG9SZWdpc3RlclBhc3MocGFzcyk7Cisg
ICAgTExWTUFkZEdWTlBhc3MocGFzcyk7CisgICAgTExWTUFkZENGR1NpbXBsaWZpY2F0aW9uUGFz
cyhwYXNzKTsKKyAgICBMTFZNUnVuUGFzc01hbmFnZXIocGFzcywgc3RhdGUubW9kdWxlKTsKKyAg
ICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBERkc6OnZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKKyAgICAgICAgTExWTUR1bXBNb2R1bGUoc3RhdGUubW9kdWxlKTsKKyAg
ICAKKyAgICBHZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2Vu
ZXJhdGVkRnVuY3Rpb24+KExMVk1HZXRQb2ludGVyVG9HbG9iYWwoZW5naW5lLCBzdGF0ZS5mdW5j
dGlvbikpOworICAgIExMVk1EaXNwb3NlUGFzc01hbmFnZXIocGFzcyk7CisgICAgCisgICAgLy8g
Q3JlYXRlIHRoZSBlbnRyeXBvaW50LgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdG90YWwga2x1
ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICBD
Q2FsbEhlbHBlcnMgaml0KCZzdGF0ZS5ncmFwaC5tX2dsb2JhbERhdGEsIHN0YXRlLmdyYXBoLm1f
Y29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgY29tcGlsZUVudHJ5KGppdCk7CisgICAgICAgIAor
ICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJy
ZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBmcm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOworICAgICAgICAKKyAgICAvLyBQ
bGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpT
U3RhY2suCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjI5MQorICAgIGppdC5hZGRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBzdGFja0NoZWNrID0gaml0LmJy
YW5jaFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV9nbG9iYWxEYXRhLmludGVycHJldGVy
LT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAg
IENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgCisgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9u
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1
cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7
CisgICAgaml0LnJldCgpOworICAgICAgICAKKyAgICBzdGFja0NoZWNrLmxpbmsoJmppdCk7Cisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBqaXQucG9rZSgKKyAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCisgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Y2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICAKKyAgICBqaXQuc3RvcmUzMigK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksCisgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBqaXQu
Y2FsbCgpOworICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdp
dGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuCisgICAgaml0Lmp1bXAoZnJvbVN0YWNrQ2hl
Y2spOworICAgICAgICAKKyAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQu
bGFiZWwoKTsKKyAgICBjb21waWxlRW50cnkoaml0KTsKKyAgICBqaXQubG9hZDMyKAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSksCisgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICBq
aXQuYnJhbmNoMzIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZv
OjpyZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuZ3JhcGgu
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgIC5saW5rVG8oZnJvbUFyaXR5
Q2hlY2ssICZqaXQpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0LnBva2UoCisgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0
IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKKyAgICBqaXQuc3Rv
cmUzMigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksCisgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sg
PSBqaXQuY2FsbCgpOworICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lz
dGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuCisgICAgaml0Lm1vdmUoR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQuanVtcChmcm9t
QXJpdHlDaGVjayk7CisgICAgICAgIAorICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihzdGF0ZS5n
cmFwaC5tX2dsb2JhbERhdGEsICZqaXQsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbFN0YWNrQ2hlY2ss
IGN0aV9zdGFja19jaGVjayk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrLCBz
dGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVj
dF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CisgICAgICAgIAorICAgIGpp
dENvZGVXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsK
KyAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IEZUTDo6SklUQ29kZSgKKyAgICAgICAgZW5naW5l
LAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKKyAgICAgICAgICAgIGxpbmtCdWZmZXIsCisg
ICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSkuZGF0YSgpKSkpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTENvbXBpbGVfaAorI2RlZmlu
ZSBGVExDb21waWxlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3ZvaWQgY29tcGlsZShTdGF0ZSYsIFJlZlB0cjxKU0M6OkpJVENvZGU+
JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTENvbXBpbGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pJVENvZGU6OkpJVENvZGUoTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBlbmdpbmUsIENvZGVSZWYgZW50cnlwb2ludCkKKyAgICA6IEpTQzo6SklUQ29k
ZShERkdKSVQpCisgICAgLCBtX2VuZ2luZShlbmdpbmUpCisgICAgLCBtX2VudHJ5cG9pbnQoZW50
cnlwb2ludCkKK3sKK30KKworSklUQ29kZTo6fkpJVENvZGUoKQoreworICAgIExMVk1EaXNwb3Nl
RXhlY3V0aW9uRW5naW5lKG1fZW5naW5lKTsKK30KKworSklUQ29kZTo6Q29kZVB0ciBKSVRDb2Rl
OjphZGRyZXNzRm9yQ2FsbCgpCit7CisgICAgcmV0dXJuIG1fZW50cnlwb2ludC5jb2RlKCk7Cit9
CisKK3ZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNl
dCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9lbnRyeXBvaW50LmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKK30KKwordm9pZCogSklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCit7CisgICAgLy8gV2UgY2FuJ3QgcGF0Y2ggRlRM
IGNvZGUsIHlldC4gRXZlbiBpZiB3ZSBkaWQsIGl0J3Mgbm90IGNsZWFyIHRoYXQgd2Ugd291bGQg
ZG8gc28KKyAgICAvLyB0aHJvdWdoIHRoaXMgQVBJLgorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9m
KHZvaWQqKQoreworICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHZpc2liaWxpdHkgaW50
byB0aGUgRlRMIGNvZGUuCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworc2l6ZV90IEpJVENvZGU6OnNpemUoKQoreworICAgIC8vIFdlIGRvbid0
IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUsIHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMg
aXMgbW9zdGx5IHVzZWQgZm9yCisgICAgLy8gR0MgbG9hZCBlc3RpbWF0ZXMuCisgICAgcmV0dXJu
IDEwMDA7Cit9CisKK2Jvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCopCit7CisgICAgLy8gV2Ug
aGF2ZSBubyBpZGVhIHdoYXQgYWRkcmVzc2VzIHRoZSBGVEwgY29kZSBjb250YWlucywgeWV0Lgor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMSklUQ29kZV9oCisjZGVmaW5lIEZUTEpJVENvZGVfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpJVENvZGUgOiBwdWJsaWMgSlNDOjpKSVRD
b2RlIHsKK3B1YmxpYzoKKyAgICBKSVRDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYsIENvZGVS
ZWYgZW50cnlwb2ludCk7CisgICAgfkpJVENvZGUoKTsKKyAgICAKKyAgICBDb2RlUHRyIGFkZHJl
c3NGb3JDYWxsKCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpOwor
ICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSk7CisgICAgc2l6ZV90
IHNpemUoKTsKKyAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
TExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsKKyAgICBDb2RlUmVmIG1fZW50cnlwb2lu
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
TFRfSklUKQorCisjZW5kaWYgLy8gRlRMSklUQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTExWTUhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExMVk1IZWFkZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExMVk1IZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTExMVk1IZWFkZXJzX2gKKyNkZWZpbmUgRlRMTExWTUhlYWRlcnNfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2RlZmluZSBf
X1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyNkZWZp
bmUgRE9fTk9UX0lOQ0xVREVfTExWTV9DUFBfSEVBREVSUworCisjaW5jbHVkZSA8bGx2bS1jL0Fu
YWx5c2lzLmg+CisjaW5jbHVkZSA8bGx2bS1jL0V4ZWN1dGlvbkVuZ2luZS5oPgorI2luY2x1ZGUg
PGxsdm0tYy9Db3JlLmg+CisjaW5jbHVkZSA8bGx2bS1jL1RhcmdldC5oPgorI2luY2x1ZGUgPGxs
dm0tYy9UcmFuc2Zvcm1zL1NjYWxhci5oPgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExMTFZNSGVhZGVyc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5o
IgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgi
CisjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5
cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwor
Ly8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KKyNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0so
bG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBk
byB7IFwKKyAgICAgICAgTFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRWRnZSBfZnRjX2hpZ2hWYWx1ZSA9ICho
aWdoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQYXNzZWRUaHJvdWdoKTsg
IFwKKyAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGlnaFZhbHVlLCBf
ZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlw
ZUNoZWNrKF9mdGNfbG93VmFsdWUsIF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhy
b3VnaCwgKGZhaWxDb25kaXRpb24pKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCitjbGFzcyBM
b3dlckRGR1RvTExWTSB7CitwdWJsaWM6CisgICAgTG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0YXRl
KQorICAgICAgICA6IG1fZ3JhcGgoc3RhdGUuZ3JhcGgpCisgICAgICAgICwgbV9mdGxTdGF0ZShz
dGF0ZSkKKyAgICAgICAgLCBtX2xvY2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFw
aC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fbG9jYWxzMzIoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICAgICAsIG1fbG9jYWxzNjQoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+
dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyKCkKKyAgICB7CisgICAgICAgIENTdHJpbmcgbmFt
ZSA9IHRvQ1N0cmluZyhjb2RlQmxvY2soKS0+aGFzaCgpKTsKKyAgICAgICAgbV9mdGxTdGF0ZS5t
b2R1bGUgPSBMTFZNTW9kdWxlQ3JlYXRlV2l0aE5hbWUobmFtZS5kYXRhKCkpOworICAgICAgICAK
KyAgICAgICAgTFR5cGUgYXJndW1lbnRUeXBlc1tdID0geyBtX291dC5pbnRQdHIgfTsKKyAgICAg
ICAgbV9mdGxTdGF0ZS5mdW5jdGlvbiA9IExMVk1BZGRGdW5jdGlvbihtX2Z0bFN0YXRlLm1vZHVs
ZSwgbmFtZS5kYXRhKCksIExMVk1GdW5jdGlvblR5cGUobV9vdXQuaW50NjQsIGFyZ3VtZW50VHlw
ZXMsIDEsIGZhbHNlKSk7CisgICAgICAgIExMVk1TZXRGdW5jdGlvbkNhbGxDb252KG1fZnRsU3Rh
dGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuaW5p
dGlhbGl6ZShtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fcHJvbG9n
dWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVuY3Rpb24pOworICAgICAgICBtX291
dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1f
bG9jYWxzQm9vbGVhbi5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICBtX2xvY2Fsc0Jv
b2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5ib29sZWFu
KTsKKyAgICAgICAgICAgIG1fbG9jYWxzMzJbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9i
dWlsZGVyLCBtX291dC5pbnQzMik7CisgICAgICAgICAgICBtX2xvY2FsczY0W2luZGV4XSA9IGJ1
aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50NjQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOworICAgICAgICBtX3Rh
Z1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOworICAgICAgICBt
X3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFtX2hp
Z2hCbG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYmxvY2tz
LmFkZChtX2hpZ2hCbG9jaywgYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmZ1bmN0aW9uKSk7
CisgICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOworICAgICAgICB0cmFuc2Zl
ckFuZENoZWNrQXJndW1lbnRzKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKG1fYmxv
Y2tzLmdldChtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2Nr
SW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2Nh
bE9wUm9vdHMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2hp
Z2hCbG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IEZsdXNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRkRmx1
c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9z
ZU92ZXJGbHVzaGVkTG9jYWxPcHMoKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRM
b2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9m
bHVzaGVkTG9jYWxPcFdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fZmx1c2hlZExvY2Fs
T3BXb3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRM
b2NhbEVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExv
Y2FsT3AoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5j
b250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVzaGVkTG9j
YWxPcHMuYWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5k
KG5vZGUpOworICAgIH0KKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9yeSBoZXJlLgorICAgICAgICAKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVu
dHNbaV07CisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIC8vIElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3ZSdsbCBiZSBhY2Nlc3NpbmcgaXQgdGhyb3Vn
aCBsb2FkcyBhbmQgc3RvcmVzCisgICAgICAgICAgICAvLyBhbnl3YXkgLSB0aGVyZSdzIG5vIHBv
aW50IGluIHRyYW5zZmVyaW5nIGl0IG91dC4KKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXND
YXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChwYXlsb2FkRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hv
dWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
dmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGNoZWNrTm90SW50MzIoanNWYWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2Nh
bHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgY2hlY2tOb3RD
ZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1f
bG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGNoZWNrTm90Qm9vbGVhbihqc1Zh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEJvb2xlYW4oanNWYWx1
ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAg
IG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgaWYgKCFtX2hpZ2hCbG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0KG1faGlnaEJsb2NrKTsKKyAg
ICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5leHRIaWdoQmxvY2sgPSAwOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4ICsgMTsgbmV4dEJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytuZXh0QmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbbmV4dEJsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgaWYgKG5leHRIaWdoQmxvY2spCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgTEJhc2ljQmxvY2sgbmV4dExvd0Jsb2NrID0gbmV4
dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChuZXh0SGlnaEJsb2NrKSA6IDA7CisgICAgICAgIAor
ICAgICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4dCBibG9jayBnaXZl
cyB1cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQorICAgICAgICAvLyBnZW5lcmF0ZWQgSVIgaW4g
cm91Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3QgdGhlIHBlcmZvcm1h
bmNlCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ugd2UgZXhwZWN0IExM
Vk0gdG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8vIG1ha2UgSVIgZHVt
cHMgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBuZXh0
TG93QmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFjayB0
aGUgT1NSIHNpdHVhdGlvbiBoZXJlLgorICAgICAgICAKKyAgICAgICAgbV9pbnQzMlZhbHVlcy5j
bGVhcigpOworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9ib29s
ZWFuVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAg
ICAgICAKKyAgICAgICAgbV9zdGF0ZS5yZXNldCgpOworICAgICAgICBtX3N0YXRlLmJlZ2luQmFz
aWNCbG9jayhtX2hpZ2hCbG9jayk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KQorICAgICAgICAgICAgY29tcGlsZU5vZGUobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlTm9kZSh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBtX25v
ZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
c2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4KKyAgICAgICAg
CisgICAgICAgIG1fZGlyZWN0aW9uID0gKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0Zvcndh
cmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFu
dDoKKyAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRMb2NhbCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICBj
b21waWxlU2V0TG9jYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKKyAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICBjb21waWxl
UGhhbnRvbSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmx1c2g6CisgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY29tcGlsZVJl
dHVybigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKKyAgICAg
ICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlSlNDb25zdGFudCgpCisgICAgeworICAgICAgICBtX2pzVmFsdWVWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobV9ncmFwaC52
YWx1ZU9mSlNDb25zdGFudChtX25vZGUpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVHZXRMb2NhbCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CisgICAg
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCisgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCisgICAg
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1ZSkp
CisgICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkMzIo
cGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxl
KCkpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExvY2FscyB0aGF0IGFyZSBtYXJrZWQg
c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkgdGhhdCBhcmVuJ3QgYWxzbyBmb3JjZWQgdG8KKyAgICAg
ICAgICAgIC8vIHVzZSBkb3VibGUgZm9ybWF0LCBhbmQgdGhhdCBoYXZlIHRoZSByaWdodCBwcmVk
aWN0aW9uLCB3aWxsIGFsd2F5cyBiZQorICAgICAgICAgICAgLy8gc3BlY3VsYXRlZCBvbiBTZXRM
b2NhbCBhbmQgd2lsbCBhbHdheXMgYmUgc3RvcmVkIGludG8gYW4gYXBwcm9wcmlhdGVseQorICAg
ICAgICAgICAgLy8gdHlwZWQgcmVmZXJlbmNlIExWYWx1ZS4KKyAgICAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAg
ICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xl
YW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVy
ZSBiZWNhdXNlIHRoYXQgZ2V0cyB0cmVhdGVkIGlkZW50aWNhbGx5IHRvCisgICAgICAgICAgICAv
LyBKU1ZhbHVlcywgc2luY2UgY2VsbHMgYXJlIHN0b3JlZCB1bnRhZ2dlZC4KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldCht
X2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZVNldExvY2FsKCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
Ym9vbCBuZWVkc0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4K
KyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkp
IHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuc2V0KHZhbHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0NlbGxT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZh
bHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFu
KG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAg
ICAgICAgICBtX291dC5zdG9yZTY0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0
dXJlZCgpKSB7CisgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NSLgorICAgICAgICBzcGVjdWxhdGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVBoYW50b20o
KQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2Rl
LCBzcGVjdWxhdGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVSZXR1cm4oKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IGhhdmUgYSByZWFsIGVwaWxvZ3VlIHdoZW4gd2Ugc3dpdGNo
IHRvIHVzaW5nIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgICAgIG1fb3V0LnJldChsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxh
dGVCYWNrd2FyZChFeGl0S2luZCwgTFZhbHVlLCBOb2RlKiwgTFZhbHVlIGZhaWxDb25kaXRpb24p
CisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlKTsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBPU1IgZXhpdC4KKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUo
KTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzcGVjdWxhdGVGb3J3YXJkKEV4aXRLaW5kIGtpbmQsIExWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24p
OworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIG9mIE9TUiBleGl0IHRvIGZv
cndhcmQuCisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kIGtpbmQsIExW
YWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAg
ICB7CisgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IGZhaWxDb25kaXRpb24pOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIHRo
ZSBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9u
LgorICAgIH0KKyAgICAKKyAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQorICAgIHsK
KyAgICAgICAgc3BlY3VsYXRlKGtpbmQsIDAsIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWls
Q29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOworICAgICAg
ICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwg
ZmFpbENvbmRpdGlvbik7CisgICAgICAgIG1fc3RhdGUuZm9yTm9kZShoaWdoVmFsdWUpLmZpbHRl
cih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZvcndhcmRUeXBl
Q2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGJh
Y2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwg
ZmFpbENvbmRpdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgb2Yg
T1NSIGV4aXQgdG8gZm9yd2FyZC4KKyAgICB9CisgICAgCisgICAgdm9pZCB0eXBlQ2hlY2soTFZh
bHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGJhY2t3YXJkVHlw
ZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRp
dGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQg
dG8gZm9yd2FyZCwgaWYgbV9kaXJlY3Rpb24gPT0gRm9yd2FyZERpcmVjdGlvbi4KKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIGxvd0ludDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9k
ZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBpZiAo
TFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsK
KyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBlZGdlLCBTcGVjSW50MzIs
IGNoZWNrTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSB1bmJveEludDMyKGJveGVkUmVzdWx0KTsKKyAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1f
dHlwZSAmIFNwZWNJbnQzMikpOworICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAg
ICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93
Q2VsbChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChMVmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChl
ZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKHVuY2hlY2tlZFJlc3Vs
dCwgZWRnZSwgU3BlY0NlbGwsIGNoZWNrTm90Q2VsbCh1bmNoZWNrZWRSZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWND
ZWxsKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBt
X291dC5pbnRQdHJaZXJvOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Qm9vbGVhbihFZGdl
IGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpKSB7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0LCBlZGdl
LCBTcGVjQm9vbGVhbiwgY2hlY2tOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAg
ICAgIHJldHVybiB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlw
ZSAmIFNwZWNCb29sZWFuKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAg
ICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBs
b3dKU1ZhbHVlKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21h
dGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAg
ICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSkpCisgICAgICAgICAgICByZXR1cm4gYm94SW50MzIodW5ib3hlZFJlc3VsdCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBib3hCb29sZWFuKHVuYm94ZWRS
ZXN1bHQpOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBjaGVja05vdEludDMy
KExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KGpzVmFs
dWUsIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIExWYWx1ZSB1bmJveEludDMyKExWYWx1
ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNhc3RUb0ludDMyKGpzVmFs
dWUpOworICAgIH0KKyAgICBMVmFsdWUgYm94SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFkZChtX291dC56ZXJvRXh0KHZhbHVlLCBtX291dC5pbnQ2NCks
IG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBjaGVja05vdENlbGwo
TFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82
NChqc1ZhbHVlLCBtX3RhZ01hc2spOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgY2hlY2tOb3RC
b29sZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RO
b25aZXJvNjQoCisgICAgICAgICAgICBtX291dC5iaXRYb3IoanNWYWx1ZSwgbV9vdXQuY29uc3RJ
bnQ2NChWYWx1ZUZhbHNlKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KH4xKSk7Cisg
ICAgfQorICAgIExWYWx1ZSB1bmJveEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAg
ICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFyYW50ZWVzIHRoYXQgTExWTSBr
bm93cyB0aGF0IGV2ZW4gdGhlIGludGVnZXIKKyAgICAgICAgLy8gdmFsdWUgaXMganVzdCAwIG9y
IDEuIEJ1dCBmb3Igbm93IHdlIGRvIGl0IHRoZSBkdW1iIHdheS4KKyAgICAgICAgcmV0dXJuIG1f
b3V0Lm5vdFplcm82NChtX291dC5iaXRBbmQoanNWYWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCgxKSkp
OworICAgIH0KKyAgICBMVmFsdWUgYm94Qm9vbGVhbihMVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVmFsdWVUcnVlKSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7CisgICAgfQor
CisgICAgdm9pZCBzcGVjdWxhdGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChl
ZGdlLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgQVNTRVJUKCFt
X3N0YXRlLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzIoZWRnZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGUoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZShlZGdlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVJbnQzMihFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICBsb3dJbnQzMihlZGdlKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFkZHJlc3NG
b3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmFkZChiYXNlLCBtX291dC5jb25zdEludFB0cihvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OworICAgIH0KKyAgICBMVmFsdWUgcGF5bG9hZEZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQp
CisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKGJhc2UsIG1fb3V0LmNvbnN0SW50UHRy
KG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgIH0KKyAgICBMVmFsdWUgdGFnRm9y
KExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5h
ZGQoYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIob3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICB9CisgICAgTFZhbHVlIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZCk7CisgICAgfQorICAgIExWYWx1
ZSBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRG
b3IobV9jYWxsRnJhbWUsIG9wZXJhbmQpOworICAgIH0KKyAgICBMVmFsdWUgdGFnRm9yKGludCBv
cGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhZ0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFu
ZCk7CisgICAgfQorICAgIAorICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSgpIHsgcmV0dXJu
IG1fZ3JhcGgubV9nbG9iYWxEYXRhOyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJl
dHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7Cisg
ICAgU3RhdGUmIG1fZnRsU3RhdGU7CisgICAgT3V0cHV0IG1fb3V0OworICAgIAorICAgIExCYXNp
Y0Jsb2NrIG1fcHJvbG9ndWU7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+
IG1fYmxvY2tzOworICAgIAorICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBMVmFsdWUgbV90
YWdUeXBlTnVtYmVyOworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAgSGFzaFNldDxO
b2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2Nh
bE9wV29ya2xpc3Q7CisgICAgCisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFs
dWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhh
c2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIAorICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9s
b2NhbHNCb29sZWFuOworICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKKyAgICBPcGVy
YW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7CisgICAgCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRl
OworICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKK307CisKK3ZvaWQgbG93ZXJERkdUb0xM
Vk0oU3RhdGUmIHN0YXRlKQoreworICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRlKTsK
KyAgICBsb3dlcmluZy5sb3dlcigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMTG93ZXJERkdUb0xMVk1faAorI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExMb3dlckRGR1RvTExWTV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPdXRwdXRf
aAorI2RlZmluZSBGVExPdXRwdXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBJZGlvbWF0aWMgTExWTSBJUiBidWls
ZGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgRlRMLiBUaGlzIHVzZXMgb3VyIG93biBsb3dl
cmluZworLy8gdGVybWlub2xvZ3ksIGFuZCBoYXMgc29tZSBvZiBpdHMgb3duIG5vdGlvbnM6Cisv
LworLy8gV2Ugc2F5IHRoYXQgYSAicmVmZXJlbmNlIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRv
IGJlIGEgInBvaW50ZXIiLiBUaGF0IGlzLCBpdCBoYXMKKy8vIGFuIGVsZW1lbnQgdHlwZSBhbmQg
Y2FuIGJlIHBhc3NlZCBkaXJlY3RseSB0byBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gTm90
ZSB0aGF0CisvLyBicm9hZGx5IHNwZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6Ok91dHB1dCBzaG91
bGQgb25seSB1c2UgcmVmZXJlbmNlcyBmb3IgYWxsb2NhJ2QKKy8vIHNsb3RzIGZvciBtdXRhYmxl
IGxvY2FsIHZhcmlhYmxlcy4KKy8vCisvLyBXZSBzYXkgdGhhdCBhICJwb2ludGVyIiBpcyB3aGF0
IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgorLy8KKy8vIFdl
IHNheSB0aGF0ICJnZXQiIGFuZCAic2V0IiBhcmUgd2hhdCBMTFZNIGNvbnNpZGVycyB0byBiZSAi
bG9hZCIgYW5kICJzdG9yZSIuIEdldAorLy8gYW5kIHNldCB0YWtlIHJlZmVyZW5jZXMuCisvLwor
Ly8gV2Ugc2F5IHRoYXQgImxvYWQiIGFuZCAic3RvcmUiIGFyZSBvcGVyYXRpb25zIHRoYXQgdGFr
ZSBhIHBvaW50ZXIgYW5kIGFuIG9mZnNldC4KKy8vIFRoZXNlIHRyYW5zbGF0ZSB0aGUgcG9pbnRl
ciArIG9mZnNldCBpbnRvIGEgcmVmZXJlbmNlIChvciwgYSBwb2ludGVyIGluIExMVk0tc3BlYWsp
CisvLyBhbmQgdXNlIGdldCBhbmQgc2V0IG9uIHRoZW0gKG9yLCBsb2FkIGFuZCBzdG9yZSBpbiBM
TFZNLXNwZWFrKS4KKworY2xhc3MgT3V0cHV0IHsKK3B1YmxpYzoKKyAgICBPdXRwdXQoKQorICAg
ICAgICA6IGJvb2xlYW4oaW50MVR5cGUoKSkKKyAgICAgICAgLCBpbnQzMihpbnQzMlR5cGUoKSkK
KyAgICAgICAgLCBpbnQ2NChpbnQ2NFR5cGUoKSkKKyAgICAgICAgLCBpbnRQdHIoaW50UHRyVHlw
ZSgpKQorICAgICAgICAsIHJlZjMyKHBvaW50ZXJUeXBlKGludDMyKSkKKyAgICAgICAgLCByZWY2
NChwb2ludGVyVHlwZShpbnQ2NCkpCisgICAgICAgICwgcmVmUHRyKHBvaW50ZXJUeXBlKGludFB0
cikpCisgICAgICAgICwgYm9vbGVhblRydWUoY29uc3RJbnQoYm9vbGVhbiwgdHJ1ZSwgWmVyb0V4
dGVuZCkpCisgICAgICAgICwgYm9vbGVhbkZhbHNlKGNvbnN0SW50KGJvb2xlYW4sIGZhbHNlLCBa
ZXJvRXh0ZW5kKSkKKyAgICAgICAgLCBpbnQzMlplcm8oY29uc3RJbnQoaW50MzIsIDAsIFNpZ25F
eHRlbmQpKQorICAgICAgICAsIGludDY0WmVybyhjb25zdEludChpbnQ2NCwgMCwgU2lnbkV4dGVu
ZCkpCisgICAgICAgICwgaW50UHRyWmVybyhjb25zdEludChpbnRQdHIsIDAsIFNpZ25FeHRlbmQp
KQorICAgICAgICAsIG1fZnVuY3Rpb24oMCkKKyAgICAgICAgLCBtX2J1aWxkZXIoTExWTUNyZWF0
ZUJ1aWxkZXIoKSkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgICAgICwgbV9uZXh0QmxvY2so
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5PdXRwdXQoKQorICAgIHsKKyAgICAgICAgTExW
TURpc3Bvc2VCdWlsZGVyKG1fYnVpbGRlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlh
bGl6ZShMVmFsdWUgZnVuY3Rpb24pCisgICAgeworICAgICAgICBtX2Z1bmN0aW9uID0gZnVuY3Rp
b247CisgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSdyZSBzdGFy
dGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIGEgaGlnaC1sZXZlbAorICAgIC8vIGJhc2ljIGJsb2Nr
LgorICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2NrIG5leHRC
bG9jaykKKyAgICB7CisgICAgICAgIG1fbmV4dEJsb2NrID0gbmV4dEJsb2NrOworICAgICAgICAK
KyAgICAgICAgYXBwZW5kVG8oYmxvY2spOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgbmV3Qmxv
Y2soKSBhbmQgYXBwZW5kVG8oKSBpZiB5b3UncmUgc3BsaXR0aW5nIHRoZSBoaWdoLWxldmVsIGJh
c2ljCisgICAgLy8gYmxvY2sgaW50byBtdWx0aXBsZSBsb3ctbGV2ZWwgYmFzaWMgYmxvY2tzLgor
ICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCisgICAgeworICAgICAgICBtX2Js
b2NrID0gYmxvY2s7CisgICAgICAgIAorICAgICAgICBMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQo
bV9idWlsZGVyLCBibG9jayk7CisgICAgfQorICAgIExCYXNpY0Jsb2NrIG5ld0Jsb2NrKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9uZXh0QmxvY2spCisgICAgICAgICAgICByZXR1cm4gYXBwZW5k
QmFzaWNCbG9jayhtX2Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGluc2VydEJhc2ljQmxvY2so
bV9uZXh0QmxvY2spOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgcGFyYW0odW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIGdldFBhcmFtKG1fZnVuY3Rpb24sIGluZGV4KTsgfQorICAgIExWYWx1ZSBj
b25zdEJvb2woYm9vbCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoYm9vbGVhbiwgdmFsdWUsIFpl
cm9FeHRlbmQpOyB9CisgICAgTFZhbHVlIGNvbnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1
cm4gY29uc3RJbnQoaW50MzIsIHZhbHVlLCBTaWduRXh0ZW5kKTsgfQorICAgIExWYWx1ZSBjb25z
dEludFB0cihpbnRwdHJfdCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50UHRyLCB2YWx1ZSwg
U2lnbkV4dGVuZCk7IH0KKyAgICBMVmFsdWUgY29uc3RJbnQ2NChpbnQ2NF90IHZhbHVlKSB7IHJl
dHVybiBjb25zdEludChpbnQ2NCwgdmFsdWUsIFNpZ25FeHRlbmQpOyB9CisgICAgCisgICAgTFZh
bHVlIGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFkZChtX2J1
aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRBbmQobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0K
KyAgICBMVmFsdWUgYml0WG9yKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1
aWxkWG9yKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9CisgICAgCisgICAgTFZhbHVlIHplcm9F
eHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFpFeHQobV9idWlsZGVy
LCB2YWx1ZSwgdHlwZSk7IH0KKyAgICBMVmFsdWUgaW50Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBl
IHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQor
ICAgIExWYWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFs
dWUsIGludDMyKTsgfQorICAgIAorICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyBy
ZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQorICAgIHZvaWQgc2V0KExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIHJlZmVyZW5jZSkgeyBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFs
dWUsIHJlZmVyZW5jZSk7IH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZChMVmFsdWUgcG9pbnRlciwg
cHRyZGlmZl90IG9mZnNldCwgTFR5cGUgcmVmVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIG9mZnNldCA/IGFkZChwb2ludGVyLCBjb25zdElu
dFB0cihvZmZzZXQpKSA6IHBvaW50ZXIsIHJlZlR5cGUpKTsKKyAgICB9CisgICAgdm9pZCBzdG9y
ZShMVmFsdWUgdmFsdWUsIExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0LCBMVHlwZSBy
ZWZUeXBlKQorICAgIHsKKyAgICAgICAgc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRl
ciwgb2Zmc2V0ID8gYWRkKHBvaW50ZXIsIGNvbnN0SW50UHRyKG9mZnNldCkpIDogcG9pbnRlciwg
cmVmVHlwZSkpOworICAgIH0KKyAgICBMVmFsdWUgbG9hZDMyKExWYWx1ZSBwb2ludGVyLCBwdHJk
aWZmX3Qgb2Zmc2V0ID0gMCkgeyByZXR1cm4gbG9hZChwb2ludGVyLCBvZmZzZXQsIHJlZjMyKTsg
fQorICAgIExWYWx1ZSBsb2FkNjQoTFZhbHVlIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIG9mZnNldCwgcmVmNjQpOyB9CisgICAgTFZhbHVlIGxv
YWRQdHIoTFZhbHVlIHBvaW50ZXIsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKSB7IHJldHVybiBsb2Fk
KHBvaW50ZXIsIG9mZnNldCwgcmVmUHRyKTsgfQorICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFs
dWUsIExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyBzdG9yZSh2YWx1ZSwg
cG9pbnRlciwgb2Zmc2V0LCByZWYzMik7IH0KKyAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgcG9pbnRlciwgcHRyZGlmZl90IG9mZnNldCA9IDApIHsgc3RvcmUodmFsdWUsIHBv
aW50ZXIsIG9mZnNldCwgcmVmNjQpOyB9CisgICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUs
IExWYWx1ZSBwb2ludGVyLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkgeyBzdG9yZSh2YWx1ZSwgcG9p
bnRlciwgb2Zmc2V0LCByZWZQdHIpOyB9CisgICAgCisgICAgTFZhbHVlIGVxdWFsKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRF
USwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIG5vdEVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRORSwgbGVmdCwg
cmlnaHQpOyB9CisgICAgTFZhbHVlIGFib3ZlKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsg
cmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExMVk1JbnRVR1QsIGxlZnQsIHJpZ2h0KTsgfQor
ICAgIExWYWx1ZSBhYm92ZU9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExWTUludFVHRSwgbGVmdCwgcmlnaHQpOyB9CisgICAg
TFZhbHVlIGJlbG93KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNt
cChtX2J1aWxkZXIsIExMVk1JbnRVTFQsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiZWxv
d09yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1f
YnVpbGRlciwgTExWTUludFVMRSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGdyZWF0ZXJU
aGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxk
ZXIsIExMVk1JbnRTR1QsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBncmVhdGVyVGhhbk9y
RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVp
bGRlciwgTExWTUludFNHRSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGxlc3NUaGFuKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkSUNtcChtX2J1aWxkZXIsIExM
Vk1JbnRTTFQsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBsZXNzVGhhbk9yRXF1YWwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRJQ21wKG1fYnVpbGRlciwgTExW
TUludFNMRSwgbGVmdCwgcmlnaHQpOyB9CisgICAgCisgICAgTFZhbHVlIGlzWmVybzY0KExWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gZXF1YWwodmFsdWUsIGludDY0WmVybyk7IH0KKyAgICBMVmFsdWUg
bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90RXF1YWwodmFsdWUsIGludDY0WmVy
byk7IH0KKyAgICAKKyAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUgdmFsdWUsIExWYWx1
ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KKyAgICAK
KyAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90
VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RU
YWtlbik7IH0KKyAgICAKKyAgICB2b2lkIGp1bXAoTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsg
YnVpbGRCcihtX2J1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQorICAgIHZvaWQgYnJhbmNoKExWYWx1
ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBMQmFzaWNCbG9jayBub3RUYWtlbikgeyBi
dWlsZENvbmRCcihtX2J1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuKTsgfQorICAg
IHZvaWQgcmV0KExWYWx1ZSB2YWx1ZSkgeyBidWlsZFJldChtX2J1aWxkZXIsIHZhbHVlKTsgfQor
ICAgIAorICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IGJ1aWxkVW5yZWFjaGFibGUobV9idWlsZGVy
KTsgfQorICAgIAorICAgIGNvbnN0IExUeXBlIGJvb2xlYW47CisgICAgY29uc3QgTFR5cGUgaW50
MzI7CisgICAgY29uc3QgTFR5cGUgaW50NjQ7CisgICAgY29uc3QgTFR5cGUgaW50UHRyOworICAg
IGNvbnN0IExUeXBlIHJlZjMyOworICAgIGNvbnN0IExUeXBlIHJlZjY0OworICAgIGNvbnN0IExU
eXBlIHJlZlB0cjsKKyAgICBjb25zdCBMVmFsdWUgYm9vbGVhblRydWU7CisgICAgY29uc3QgTFZh
bHVlIGJvb2xlYW5GYWxzZTsKKyAgICBjb25zdCBMVmFsdWUgaW50MzJaZXJvOworICAgIGNvbnN0
IExWYWx1ZSBpbnQ2NFplcm87CisgICAgY29uc3QgTFZhbHVlIGludFB0clplcm87CisKKyAgICBM
VmFsdWUgbV9mdW5jdGlvbjsKKyAgICBMQnVpbGRlciBtX2J1aWxkZXI7CisgICAgTEJhc2ljQmxv
Y2sgbV9ibG9jazsKKyAgICBMQmFzaWNCbG9jayBtX25leHRCbG9jazsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYg
Ly8gRlRMT3V0cHV0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMU3RhdGVfaAorI2RlZmluZSBGVExTdGF0ZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKworY2xhc3MgU3RhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBTdGF0ZShERkc6OkdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBncmFw
aChncmFwaCkKKyAgICAgICAgLCBtb2R1bGUoMCkKKyAgICAgICAgLCBmdW5jdGlvbigwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQgYnkg
U3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICAgIC8vIEZUTCBwaGFzZXMgdG8g
cHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rpb24u
CisgICAgREZHOjpHcmFwaCYgZ3JhcGg7CisgICAgTE1vZHVsZSBtb2R1bGU7CisgICAgTFZhbHVl
IGZ1bmN0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CShyZXZpc2lvbiAxNDcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTY5
LDYgKzcwLDEwIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKICNpZiBF
TkFCTEUoTExJTlQpCiAgICAgTExJbnQ6OmluaXRpYWxpemUoKTsKICNlbmRpZgorI2lmIEVOQUJM
RShGVExfSklUKQorICAgIExMVk1MaW5rSW5KSVQoKTsKKyAgICBMTFZNSW5pdGlhbGl6ZU5hdGl2
ZVRhcmdldCgpOworI2VuZGlmCiB9CiAKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNDcwMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihib29sLCB2YWxpZGF0
ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlLCBm
YWxzZSkgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZUV4cGVyaW1lbnRhbEZUTCwgZmFsc2UpIFwK
KyAgICBcCiAgICAgdihib29sLCBlbmFibGVQcm9maWxlciwgZmFsc2UpIFwKICAgICBcCiAgICAg
dih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQs
IDEwMDAwKSBcCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE0NzAxNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwOCw2ICs4MDgsMTAgQEAKICNl
bmRpZgogI2VuZGlmCiAKKyNpZiBDUFUoWDg2XzY0KSAmJiBQTEFURk9STShNQUMpCisjZGVmaW5l
IEVOQUJMRV9GVExfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgaml0IGlzIG5vdCBhdmFpbGFi
bGUsIGVuYWJsZSB0aGUgTExJbnQgQyBMb29wOiAqLwogI2lmICFFTkFCTEUoSklUKQogI3VuZGVm
IEVOQUJMRV9MTElOVCAgICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQu
ICovCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDcyNTMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyNiBAQAorMjAxMy0wMy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIGZvdXJ0aFRpZXI6IEZUTCBKSVQgc2hvdWxkIGJlIGFibGUgcnVuIHNvbWUg
c2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM0ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIEdpdmUgdGhlIHNjcmlwdHMgdGhlIGFiaWxpdHkgdG8gZmluZCBhbiBM
TFZNIGJ1aWxkIGFuZCB1c2UgaXQuCisgICAgICAgIAorICAgICAgICBBbHNvIGFkZGVkIGEgc2Ny
aXB0LCBleHBvcnQtbGx2bS1idWlsZCwgdGhhdCBhbGxvd3MgeW91IHRvIHRha2UgeW91cgorICAg
ICAgICBvd24gYnVpbGQgb2YgTExWTSBhbmQgcGFja2FnZSBpdCBmb3IgdXNlIGJ5IFdlYktpdCdz
IGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgCisgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdHJlYXRz
IGEgImJ1aWxkIiBvZiBMTFZNIGFzIGEgcGFpciBvZiAudGFyLmJ6MidzLAorICAgICAgICBvbmUg
Zm9yIHRoZSBsaWJyYXJ5IGFyY2hpdmVzIGFuZCBvbmUgZm9yIHRoZSBoZWFkZXJzLiBJdCB0aGVu
IHVucGFja3MKKyAgICAgICAgdGhlbSBpbnRvIHlvdXIgYnVpbHQgcHJvZHVjdHMgZGlyZWN0b3J5
IGluIGEgbWFubm5lciB0aGF0IGlzIG1vc3RseQorICAgICAgICBhbmFsb2dvdXMgdG8gaG93IFdl
YktpdFN5c3RlbUludGVyZmFjZSB3b3Jrcy4KKworICAgICAgICAqIFNjcmlwdHMvYnVpbGQtanNj
OgorICAgICAgICAqIFNjcmlwdHMvY29weS13ZWJraXRsaWJyYXJpZXMtdG8tcHJvZHVjdC1kaXJl
Y3Rvcnk6CisgICAgICAgICh1bnBhY2tJZk5lY2Vzc2FyeSk6CisgICAgICAgIChkaXR0b0hlYWRl
cnMpOgorICAgICAgICAqIFNjcmlwdHMvZXhwb3J0LWxsdm0tYnVpbGQ6IEFkZGVkLgorCiAyMDEz
LTAzLTIwICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dCBmaXggZm9yIFdpbiBFV1MgYm90cywgY2F0Y2ggdmFyaW91cyBlcnJvcnMgYW5kIHJlc3RhcnQg
c2NyaXB0IGlmIG5lY2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQtanNjCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtanNjCShyZXZpc2lvbiAxNDcwMTQpCisrKyBU
b29scy9TY3JpcHRzL2J1aWxkLWpzYwkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTAgQEAg
aWYgKGlzUXQoKSkgewogICAgIGV4aXQgZXhpdFN0YXR1cygwKTsKIH0KIAoraWYgKGlzQXBwbGVN
YWNXZWJLaXQoKSkgeworICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9jb3B5LXdl
YmtpdGxpYnJhcmllcy10by1wcm9kdWN0LWRpcmVjdG9yeSIsIHByb2R1Y3REaXIoKSkgPT0gMCkg
b3IgZGllOworfQorCiBzdWIgYnVpbGRNeVByb2plY3QKIHsKICAgICBteSAoJHByb2plY3REaXJl
Y3RvcnksICRwcm9qZWN0TmFtZSkgPSBAXzsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29weS13ZWJr
aXRsaWJyYXJpZXMtdG8tcHJvZHVjdC1kaXJlY3RvcnkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9jb3B5LXdlYmtpdGxpYnJhcmllcy10by1wcm9kdWN0LWRpcmVjdG9yeQkocmV2aXNpb24g
MTQ3MDE0KQorKysgVG9vbHMvU2NyaXB0cy9jb3B5LXdlYmtpdGxpYnJhcmllcy10by1wcm9kdWN0
LWRpcmVjdG9yeQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vcGVy
bCAtdwogCi0jIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCwg
MjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDE4ICs1MSw1NCBAQCBmb3JlYWNoIG15
ICRsaWJOYW1lIChAbGlicmFyaWVzVG9Db3B5KSB7CiAgICAgfQogfQogCi0jIEZJWE1FOiBUaGlz
IGNvZGUgc2hvdWxkIGJlIGFic3RyYWN0ZWQgdG8gbm90IGJlIGNvcHkvcGFzdGUuCi1teSAkc3Jj
SGVhZGVyID0gIldlYktpdExpYnJhcmllcy9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCI7Ci1teSAk
aGVhZGVyID0gIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9pbmNsdWRlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oIjsKLWlmICghLWUgJGhlYWRlciB8fCAtTSAkaGVhZGVyID4gLU0gJHNyY0hlYWRlcikg
ewotICAgIHByaW50ICJVcGRhdGluZyAkaGVhZGVyXG4iOwotICAgIHN5c3RlbSAibWtkaXIiLCAi
LXAiLCAiJHByb2R1Y3REaXIvdXNyL2xvY2FsL2luY2x1ZGUiOwotICAgIHN5c3RlbSAiZGl0dG8i
LCAkc3JjSGVhZGVyLCAkaGVhZGVyOworIyBEZXRlcm1pbmUgd2hlcmUgdG8gZ2V0IExMVk0gYmlu
YXJpZXMgYW5kIGhlYWRlcnMuCitteSAkbWFqb3JEYXJ3aW5WZXJzaW9uID0gKHNwbGl0IC9cLi8s
IGB1bmFtZSAtcmApWzBdOworbXkgJGxsdm1MaWJyYXJ5UGFja2FnZTsKK2lmICgkbWFqb3JEYXJ3
aW5WZXJzaW9uID09IDExKSB7CisgICAgJGxsdm1MaWJyYXJ5UGFja2FnZSA9ICJXZWJLaXRMaWJy
YXJpZXMvTExWTUxpb24udGFyLmJ6MiI7Cit9IGVsc2lmICgkbWFqb3JEYXJ3aW5WZXJzaW9uID09
IDEyKSB7CisgICAgJGxsdm1MaWJyYXJ5UGFja2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTU1v
dW50YWluTGlvbi50YXIuYnoyIjsKK30gZWxzaWYgKGRlZmluZWQoJEVOVntMTFZNX0xJQlJBUllf
UEFDS0FHRX0pKSB7CisgICAgJGxsdm1MaWJyYXJ5UGFja2FnZSA9ICRFTlZ7TExWTV9MSUJSQVJZ
X1BBQ0tBR0V9OworfSBlbHNlIHsKKyAgICBwcmludCAiRG9uJ3Qga25vdyB3aGVyZSB0byBmaW5k
IExMVk0hXG4iOworICAgIGV4aXQgMTsKIH0KIAotbXkgJHNyY0hlYWRlckRpciA9ICJXZWJLaXRM
aWJyYXJpZXMvV2ViQ29yZVNRTGl0ZTMiOwotbXkgJGhlYWRlckRpciA9ICIkcHJvZHVjdERpci9X
ZWJDb3JlU1FMaXRlMyI7Ci1pZiAoIS1lICRoZWFkZXJEaXIgfHwgLU0gJGhlYWRlckRpciA+IC1N
ICRzcmNIZWFkZXJEaXIpIHsKLSAgICBwcmludCAiVXBkYXRpbmcgJGhlYWRlckRpclxuIjsKLSAg
ICBzeXN0ZW0gImRpdHRvIiwgJHNyY0hlYWRlckRpciwgJGhlYWRlckRpcjsKKyhzeXN0ZW0oIm1r
ZGlyIiwgIi1wIiwgIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9pbmNsdWRlIikgPT0gMCkgb3IgZGll
OworCitzdWIgdW5wYWNrSWZOZWNlc3NhcnkKK3sKKyAgICBteSAoJHRhcmdldERpciwgJHNhbXBs
ZUZpbGUsICRwYWNrYWdlLCAkaGFzTGlicmFyaWVzKSA9IEBfOworICAgIGlmICghLWUgJHNhbXBs
ZUZpbGUgfHwgLU0gJHNhbXBsZUZpbGUgPiAtTSAkcGFja2FnZSkgeworICAgICAgICBwcmludCAi
VW5wYWNraW5nICRwYWNrYWdlIGludG8gJHRhcmdldERpclxuIjsKKyAgICAgICAgKHN5c3RlbSgi
dGFyIC1DICR0YXJnZXREaXIgLXhteWYgJHBhY2thZ2UiKSA9PSAwKSBvciBkaWU7CisgICAgICAg
IGlmICgkaGFzTGlicmFyaWVzKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRsaWJyYXJ5IChg
dGFyIC10eWYgJHBhY2thZ2VgKSB7CisgICAgICAgICAgICAgICAgY2hvbXAgJGxpYnJhcnk7Cisg
ICAgICAgICAgICAgICAgcHJpbnQgIiAgIFJhbmxpYiAkbGlicmFyeVxuIjsKKyAgICAgICAgICAg
ICAgICBzeXN0ZW0gJHJhbmxpYiwgJHRhcmdldERpciAuICIvIiAuICRsaWJyYXJ5OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit1bnBhY2tJZk5lY2Vzc2FyeSgkcHJvZHVj
dERpciwgIiRwcm9kdWN0RGlyL2xpYkxMVk1Db3JlLmEiLCAkbGx2bUxpYnJhcnlQYWNrYWdlLCAx
KTsKKworc3ViIGRpdHRvSGVhZGVycworeworICAgIG15ICgkc3JjSGVhZGVyLCAkaGVhZGVyKSA9
IEBfOworICAgIGlmICghLWUgJGhlYWRlciB8fCAtTSAkaGVhZGVyID4gLU0gJHNyY0hlYWRlcikg
eworICAgICAgICBwcmludCAiVXBkYXRpbmcgJGhlYWRlclxuIjsKKyAgICAgICAgKHN5c3RlbSgi
ZGl0dG8iLCAkc3JjSGVhZGVyLCAkaGVhZGVyKSA9PSAwKSBvciBkaWU7CisgICAgfQorfQorCitk
aXR0b0hlYWRlcnMoIldlYktpdExpYnJhcmllcy9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIsICIk
cHJvZHVjdERpci91c3IvbG9jYWwvaW5jbHVkZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIpOwor
ZGl0dG9IZWFkZXJzKCJXZWJLaXRMaWJyYXJpZXMvV2ViQ29yZVNRTGl0ZTMiLCAiJHByb2R1Y3RE
aXIvV2ViQ29yZVNRTGl0ZTMiKTsKKworaWYgKGRlZmluZWQoJEVOVntMTFZNX0lOQ0xVREVfUEFD
S0FHRX0pKSB7CisgICAgdW5wYWNrSWZOZWNlc3NhcnkoIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9p
bmNsdWRlIiwgIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9pbmNsdWRlL2xsdm0tYy9Db3JlLmgiLCAk
RU5We0xMVk1fSU5DTFVERV9QQUNLQUdFfSwgMCk7Cit9IGVsc2UgeworICAgIHVucGFja0lmTmVj
ZXNzYXJ5KCIkcHJvZHVjdERpci91c3IvbG9jYWwvaW5jbHVkZSIsICIkcHJvZHVjdERpci91c3Iv
bG9jYWwvaW5jbHVkZS9sbHZtLWMvQ29yZS5oIiwgIldlYktpdExpYnJhcmllcy9MTFZNSW5jbHVk
ZXMudGFyLmJ6MiIsIDApOwogfQpJbmRleDogVG9vbHMvU2NyaXB0cy9leHBvcnQtbGx2bS1idWls
ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2V4cG9ydC1sbHZtLWJ1aWxkCShyZXZpc2lv
biAwKQorKysgVG9vbHMvU2NyaXB0cy9leHBvcnQtbGx2bS1idWlsZAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisj
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAnZ2V0b3B0bG9uZycKK3JlcXVpcmUgJ3BhdGhuYW1l
JworcmVxdWlyZSAnc2hlbGx3b3JkcycKK3JlcXVpcmUgJ3RtcGRpcicKKworZGVmIG15c3lzKCpj
bWQpCisgICAgY29tbWFuZEFycmF5ID0gY21kLmVhY2h7fHZhbHVlfCBTaGVsbHdvcmRzLnNoZWxs
ZXNjYXBlKHZhbHVlLnRvX3MpfS5qb2luKCcgJykKKyAgICAkc3RkZXJyLnB1dHMgIj4+ICN7Y29t
bWFuZEFycmF5fSIKKyAgICByaWFzZSB1bmxlc3Mgc3lzdGVtKCpjbWQpCitlbmQKKworJGxpYnJh
cnlQYWNrYWdlID0gUGF0aG5hbWUubmV3KCJMTFZNTGlicmFyaWVzLnRhci5iejIiKQorJGluY2x1
ZGVQYWNrYWdlID0gUGF0aG5hbWUubmV3KCJMTFZNSW5jbHVkZXMudGFyLmJ6MiIpCiskbGx2bUJ1
aWxkID0gIlJlbGVhc2UrQXNzZXJ0cyIKKworZGVmIHVzYWdlCisgICAgcHV0cyAiZXhwb3J0LWxs
dm0tYnVpbGQgPExMVk0gZGlyZWN0b3J5PiIKKyAgICBwdXRzCisgICAgcHV0cyAiLS1saWJyYXJ5
LXBhY2thZ2UgICgtbCkgICBDaGFuZ2Ugd2hlcmUgdG8gcHV0IHRoZSBjb21wcmVzc2VkIGxpYnJh
cnkgcGFja2FnZS4iCisgICAgcHV0cyAiICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0
IGlzICN7JGxpYnJhcnlQYWNrYWdlfS4iCisgICAgcHV0cyAiLS1pbmNsdWRlLXBhY2thZ2UgICgt
aSkgICBDaGFuZ2Ugd2VocmUgdG8gcHV0IHRoZSBjb21wcmVzc2VkIGhlYWRlciBwYWNrYWdlLiIK
KyAgICBwdXRzICIgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaXMgI3skaW5jbHVk
ZVBhY2thZ2V9LiIKKyAgICBwdXRzICItLWxsdm0tYnVpbGQgICAgICAgKC1iKSAgIENoYW5nZSB3
aGljaCBMTFZNIGJ1aWxkIHRvIHVzZS4iCisgICAgcHV0cyAiICAgICAgICAgICAgICAgICAgICAg
ICAgICBEZWZhdWx0IGlzICN7JGxsdm1CdWlsZH0uIgorICAgIGV4aXQgMQorZW5kCisKK0dldG9w
dExvbmcubmV3KFsnLS1oZWxwJywgJy1oJywgR2V0b3B0TG9uZzo6Tk9fQVJHVU1FTlRdLAorICAg
ICAgICAgICAgICAgWyctLWxpYnJhcnktcGFja2FnZScsICctbCcsIEdldG9wdExvbmc6OlJFUVVJ
UkVEX0FSR1VNRU5UXSwKKyAgICAgICAgICAgICAgIFsnLS1pbmNsdWRlLXBhY2thZ2UnLCAnLWkn
LCBHZXRvcHRMb25nOjpSRVFVSVJFRF9BUkdVTUVOVF0sCisgICAgICAgICAgICAgICBbJy0tbGx2
bS1idWlsZCcsICctYicsIEdldG9wdExvbmc6OlJFUVVJUkVEX0FSR1VNRU5UXSkuZWFjaCB7Cisg
ICAgfCBvcHQsIGFyZyB8CisgICAgY2FzZSBvcHQKKyAgICB3aGVuICctLWhlbHAnCisgICAgICAg
IHVzYWdlCisgICAgd2hlbiAnLS1saWJyYXJ5LXBhY2thZ2UnCisgICAgICAgICRsaWJyYXJ5UGFj
a2FnZSA9IFBhdGhuYW1lLm5ldyhhcmcpCisgICAgd2hlbiAnLS1pbmNsdWRlLXBhdGgnCisgICAg
ICAgICRpbmNsdWRlUGFja2FnZSA9IFBhdGhuYW1lLm5ldyhhcmcpCisgICAgd2hlbiAnLS1sbHZt
LWJ1aWxkJworICAgICAgICAkbGx2bUJ1aWxkID0gYXJnCisgICAgZWxzZQorICAgICAgICByYWlz
ZQorICAgIGVuZAorfQorCitpZiBBUkdWLmxlbmd0aCAhPSAxCisgICAgdXNhZ2UKK2VuZAorCisk
bGx2bVBhdGggPSBQYXRobmFtZS5uZXcoQVJHVlswXSkKKworJGN1cnJlbnRQYXRoID0gUGF0aG5h
bWUucHdkCisKK0Rpci5jaGRpcigkbGx2bVBhdGggKyAkbGx2bUJ1aWxkICsgImxpYiIpIHsKKyAg
ICBteXN5cygidGFyIiwgIi1jeXZmIiwgJGN1cnJlbnRQYXRoICsgJGxpYnJhcnlQYWNrYWdlLCAq
RGlyLmVudHJpZXMoJy4nKS5zZWxlY3R7fHZhbHVlfCB2YWx1ZSA9fiAvXC5hJC99KQorfQorCitE
aXIubWt0bXBkaXIgeworICAgIHwgZGlyZWN0b3J5IHwKKyAgICBkaXJlY3RvcnkgPSBQYXRobmFt
ZS5uZXcoZGlyZWN0b3J5KS5yZWFscGF0aAorICAgIERpci5jaGRpcigkbGx2bVBhdGgpIHsKKyAg
ICAgICAgbXlzeXMoInN2biIsICJleHBvcnQiLCAiaW5jbHVkZS9sbHZtLWMiLCBkaXJlY3Rvcnkg
KyAibGx2bS1jIikKKyAgICAgICAgCisgICAgICAgIERpci5ta2RpcihkaXJlY3RvcnkgKyAibGx2
bSIpCisgICAgICAgIERpci5ta2RpcihkaXJlY3RvcnkgKyAibGx2bS9Db25maWciKQorICAgICAg
ICBteXN5cygiY3AiLCAiaW5jbHVkZS9sbHZtL0NvbmZpZy9sbHZtLWNvbmZpZy5oIiwgZGlyZWN0
b3J5ICsgImxsdm0iICsgIkNvbmZpZyIpCisKKyAgICAgICAgRGlyLm1rZGlyKGRpcmVjdG9yeSAr
ICJsbHZtL1N1cHBvcnQiKQorICAgICAgICBteXN5cygiY3AiLCAiaW5jbHVkZS9sbHZtL1N1cHBv
cnQvRGF0YVR5cGVzLmgiLCBkaXJlY3RvcnkgKyAibGx2bSIgKyAiU3VwcG9ydCIpCisgICAgfQor
ICAgIERpci5jaGRpcihkaXJlY3RvcnkpIHsKKyAgICAgICAgbXlzeXMoInRhciIsICItY3l2ZiIs
ICRjdXJyZW50UGF0aCArICRpbmNsdWRlUGFja2FnZSwgIi4iKQorICAgIH0KK30KKworcHV0cwor
cHV0cyAiTExWTSBoYXMgYmVlbiBwYWNrYWdlZCBmb3IgdXNlIGJ5IFdlYktpdC4iCitwdXRzCitw
dXRzICJZb3UgY2FuIHVzZSBpdCByaWdodCBub3cgYnkgc2V0dGluZyB0aGVzZSBlbnZpcm9ubWVu
dCB2YXJpYWJsZXM6IgorcHV0cworcHV0cyAiZXhwb3J0IExMVk1fTElCUkFSWV9QQUNLQUdFPSN7
U2hlbGx3b3Jkcy5zaGVsbGVzY2FwZSgkbGlicmFyeVBhY2thZ2UucmVhbHBhdGgudG9fcyl9Igor
cHV0cyAiZXhwb3J0IExMVk1fSU5DTFVERV9QQUNLQUdFPSN7U2hlbGx3b3Jkcy5zaGVsbGVzY2Fw
ZSgkaW5jbHVkZVBhY2thZ2UucmVhbHBhdGgudG9fcyl9IgorcHV0cwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogVG9vbHMvU2NyaXB0cy9leHBvcnQtbGx2bS1idWlsZApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkK
</data>
<flag name="review"
          id="217769"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="217771"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>