<?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>224426</bug_id>
          
          <creation_ts>2021-04-12 02:53:16 -0700</creation_ts>
          <short_desc>Make FontFace parsing worker-safe</short_desc>
          <delta_ts>2021-04-16 08:00:17 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>224675</dependson>
          <blocked>224178</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1749166</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-12 02:53:16 -0700</bug_when>
    <thetext>WorkerGlobalScope is a FontProvider and thus needs to provide a FontFace. Using FontFace in OffscreenCanvas in a Worker is tracked in bug 224178. Currently, FontFace uses parseString, but this ends up using CSSValuePool::singleton and possibly other things that aren&apos;t safe for use in a Worker.

Much like canvas/OffscreenCanvas now use CSSParser::parseFontWorkerSafe, we need safe parsers for the other font properties (which are all subsets of parseFont I believe, so this ought to be a relatively simple patch at least on the CSSParser-side) and for FontFace and CSSFontFace to use them. As a bonus, this also ought to be a (very) minor performance improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750199</commentid>
    <comment_count>1</comment_count>
      <attachid>426004</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-14 10:33:43 -0700</bug_when>
    <thetext>Created attachment 426004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750207</commentid>
    <comment_count>2</comment_count>
      <attachid>426007</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-14 10:41:37 -0700</bug_when>
    <thetext>Created attachment 426007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750218</commentid>
    <comment_count>3</comment_count>
      <attachid>426012</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-14 10:51:41 -0700</bug_when>
    <thetext>Created attachment 426012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750254</commentid>
    <comment_count>4</comment_count>
      <attachid>426012</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-14 11:42:26 -0700</bug_when>
    <thetext>Comment on attachment 426012
Patch

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

I think just &quot;pool&quot; or &quot;valuePool&quot; is a fine name for arguments or variables of type CSSValuePool.

&gt; Source/WebCore/ChangeLog:11
&gt; +        new CSSPropertyParserWorkerSafe and make sure they&apos;re safe to use in a

Not 100% thrilled with the name &quot;WorkerSafe&quot;. I feel about as good about it as the term &quot;ThreadSafe&quot;; both seem insufficiently precise concepts to me.

To make this all win/win, and not *just* about fonts in onscreen canvas, it would be great to make sure these separate property parsers are easy to use in other cases too. Firing up the full CSS parser to parse once specific property might be an unwanted pattern elsewhere too, unnecessarily inefficient for some uses.

&gt; Source/WebCore/css/FontFace.cpp:84
&gt; -            auto value = FontFace::parseString(string, CSSPropertySrc);
&gt; -            if (!is&lt;CSSValueList&gt;(value))
&gt; -                return Exception { SyntaxError };
&gt; -            CSSFontFace::appendSources(result-&gt;backing(), downcast&lt;CSSValueList&gt;(*value), &amp;document, false);
&gt; -            return { };
&gt; +            if (auto value = CSSPropertyParserWorkerSafe::parseFontFaceSrc(string, CSSParserContext(document))) {
&gt; +                CSSFontFace::appendSources(result-&gt;backing(), *value, &amp;document, false);
&gt; +                return { };
&gt; +            }
&gt; +            return Exception { SyntaxError };

Better: Guarding a local variable with a if.
Worse: Making the failure case the &quot;main code&quot; and the success case the guarded block. There’s a clarity reason we prefer early return; too bad it’s incompatible with guarding locals with if.

The call to CSSPropertyParserWorkerSafe::parseFontFaceSrc is so much more verbose than the FontFace::parseString call with a really long class name. And also, the need to explicitly write out CSSParserContext. Is there some way we can keep this idiom a little simpler?

&gt; Source/WebCore/css/FontFace.cpp:178
&gt; +    if (familyNameToUse.contains(&apos;\&apos;&apos;) &amp;&amp; is&lt;Document&gt;(context) &amp;&amp; downcast&lt;Document&gt;(context).quirks().shouldStripQuotationMarkInFontFaceSetFamily())

Seems like code running in workers will need quirks too, eventually, for the same reason we need them for documents. Probably should inherit them from the document it’s created from. This code change here is a stopgap measure.

&gt; Source/WebCore/css/FontFace.cpp:196
&gt; -    if (auto value = parseString(style, CSSPropertyFontStyle)) {
&gt; +    if (auto value = CSSPropertyParserWorkerSafe::parseFontFaceStyle(style, HTMLStandardMode, context.cssValuePool())) {

Frustrating that this code gets so verbose. Any way to cut down on the arguments?

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:100
&gt; +    explicit CalcParser(CSSParserTokenRange&amp; range, CalculationCategory destinationCategory, ValueRange valueRange = ValueRangeAll, CSSValuePool&amp; cssValuePool = CSSValuePool::singleton())

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:203
&gt; +    CSSValuePool&amp; m_cssValuePool;

This member name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:431
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumePercentWorkerSafe(CSSParserTokenRange&amp; range, ValueRange valueRange, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:536
&gt;  RefPtr&lt;CSSPrimitiveValue&gt; consumeAngle(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode, UnitlessQuirk unitless, UnitlessZeroQuirk unitlessZero)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:541
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeAngleWorkerSafe(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode, CSSValuePool&amp; cssValuePool, UnitlessQuirk unitless, UnitlessZeroQuirk unitlessZero)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:649
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeIdentWorkerSafe(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:3023
&gt; +Optional&lt;FontRaw&gt; consumeFontRaw(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:50
&gt; +using namespace CSSPropertyParserHelpers;
&gt; +using namespace CSSPropertyParserHelpersWorkerSafe;

We should typically strive to avoid these kinds of &quot;using namespace&quot;.

I’m not sure what the namespaces achieve exactly, so I’m not sure what to recommend.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:52
&gt; +Optional&lt;FontRaw&gt; CSSPropertyParserWorkerSafe::parseFont(const String&amp; string, CSSParserMode cssParserMode)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:87
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceStyle(const String&amp; string, const CSSParserContext&amp; context, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:106
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceWeight(const String&amp; string, const CSSParserContext&amp; context, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:125
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceStretch(const String&amp; string, const CSSParserContext&amp; context, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:144
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceUnicodeRange(const String&amp; string, const CSSParserContext&amp; context)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:158
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceFeatureSettings(const String&amp; string, const CSSParserContext&amp; context, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:172
&gt; +RefPtr&lt;CSSValue&gt; CSSPropertyParserWorkerSafe::parseFontFaceDisplay(const String&amp; string, const CSSParserContext&amp; context, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:186
&gt; +namespace CSSPropertyParserHelpersWorkerSafe {

Not sure why we need a namespace here.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:248
&gt; +RefPtr&lt;CSSFontStyleValue&gt; consumeFontStyle(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode, CSSValuePool&amp; cssValuePool)

These argument names do not need &quot;css&quot; in them.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:263
&gt; +static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStyleKeywordValue(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:268
&gt; +RefPtr&lt;CSSFontStyleRangeValue&gt; consumeFontStyleRange(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode, CSSValuePool&amp; cssValuePool)

These argument names do not need &quot;css&quot; in them.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:305
&gt; +static RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeightAbsoluteKeywordValue(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:311
&gt; +RefPtr&lt;CSSValue&gt; consumeFontWeightAbsoluteRange(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:329
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeightAbsolute(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:337
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStretchKeywordValue(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:351
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeFontStretch(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:363
&gt; +RefPtr&lt;CSSValue&gt; consumeFontStretchRange(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:435
&gt; +RefPtr&lt;CSSValue&gt; consumeFontFeatureSettings(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:449
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeFontFaceFontDisplay(CSSParserTokenRange&amp; range, CSSValuePool&amp; cssValuePool)

This argument name does not need &quot;css&quot; in it.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h:42
&gt; +namespace CSSPropertyParserHelpers {

Not sure why this needs to go in a namespace.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h:60
&gt; +namespace CSSPropertyParserHelpersWorkerSafe {

Not sure why these need to go in a namespace.

&gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h:76
&gt; +#if ENABLE(VARIATION_FONTS)
&gt; +RefPtr&lt;CSSFontStyleRangeValue&gt; consumeFontStyleRange(CSSParserTokenRange&amp;, CSSParserMode, CSSValuePool&amp;);
&gt; +RefPtr&lt;CSSValue&gt; consumeFontWeightAbsoluteRange(CSSParserTokenRange&amp;, CSSValuePool&amp;);
&gt; +RefPtr&lt;CSSValue&gt; consumeFontStretchRange(CSSParserTokenRange&amp;, CSSValuePool&amp;);
&gt; +#endif
&gt; +#if !ENABLE(VARIATION_FONTS)
&gt; +RefPtr&lt;CSSPrimitiveValue&gt; consumeFontWeightAbsolute(CSSParserTokenRange&amp;, CSSValuePool&amp;);
&gt; +#endif

Some blank lines would make the paragraphing easier to read I think.

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:240
&gt; +CSSValuePool&amp; ScriptExecutionContext::cssValuePool()
&gt; +{
&gt; +    return CSSValuePool::singleton();
&gt; +}

Maybe this should go in Document and it should be pure virtual in ScriptExecutionContext?

&gt; Source/WebCore/dom/ScriptExecutionContext.h:171
&gt; +    virtual CSSValuePool&amp; cssValuePool();

Not sure I fully understand why each script execution context has its own CSS value pool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750364</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-14 15:10:00 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 426012 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=426012&amp;action=review
&gt; 
&gt; I think just &quot;pool&quot; or &quot;valuePool&quot; is a fine name for arguments or variables
&gt; of type CSSValuePool.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        new CSSPropertyParserWorkerSafe and make sure they&apos;re safe to use in a
&gt; 
&gt; Not 100% thrilled with the name &quot;WorkerSafe&quot;. I feel about as good about it
&gt; as the term &quot;ThreadSafe&quot;; both seem insufficiently precise concepts to me.
&gt; 
&gt; To make this all win/win, and not *just* about fonts in onscreen canvas, it
&gt; would be great to make sure these separate property parsers are easy to use
&gt; in other cases too. Firing up the full CSS parser to parse once specific
&gt; property might be an unwanted pattern elsewhere too, unnecessarily
&gt; inefficient for some uses.

I&apos;m fully agreed here, I&apos;m also not really a fan of the term &quot;WorkerSafe&quot;... I suppose what this is really trying to say is that this code will not use data outside of the scope of the passed in variables, but I can&apos;t immediately think of a better/shorter phrase to encapsulate that.

This doesn&apos;t really have anything to do with Workers specifically, and I don&apos;t like that the term &quot;WorkerSafe&quot; sort of implies that it does (which makes non-WorkerSafe variants that chain these functions feel a little odd, perhaps). But I&apos;m struggling to find a better name - at least the WorkerSafe suffix is accurate. If you call it with data that was ok to use, it won&apos;t reference extra data that isn&apos;t.

&gt; &gt; Source/WebCore/css/FontFace.cpp:84
&gt; &gt; -            auto value = FontFace::parseString(string, CSSPropertySrc);
&gt; &gt; -            if (!is&lt;CSSValueList&gt;(value))
&gt; &gt; -                return Exception { SyntaxError };
&gt; &gt; -            CSSFontFace::appendSources(result-&gt;backing(), downcast&lt;CSSValueList&gt;(*value), &amp;document, false);
&gt; &gt; -            return { };
&gt; &gt; +            if (auto value = CSSPropertyParserWorkerSafe::parseFontFaceSrc(string, CSSParserContext(document))) {
&gt; &gt; +                CSSFontFace::appendSources(result-&gt;backing(), *value, &amp;document, false);
&gt; &gt; +                return { };
&gt; &gt; +            }
&gt; &gt; +            return Exception { SyntaxError };
&gt; 
&gt; Better: Guarding a local variable with a if.
&gt; Worse: Making the failure case the &quot;main code&quot; and the success case the
&gt; guarded block. There’s a clarity reason we prefer early return; too bad it’s
&gt; incompatible with guarding locals with if.

Yeah, looking at this again, that&apos;s not nice - I&apos;ll revert this to how it was previously.

&gt; The call to CSSPropertyParserWorkerSafe::parseFontFaceSrc is so much more
&gt; verbose than the FontFace::parseString call with a really long class name.
&gt; And also, the need to explicitly write out CSSParserContext. Is there some
&gt; way we can keep this idiom a little simpler?

I think this file references the namespace enough that it wouldn&apos;t be so bad to just stick a using namespace declaration and get rid of the constant &apos;CSSPropertyParserWorkerSafe&apos; everywhere. It wouldn&apos;t hurt to add a variant of parseFontFaceSrc that just took a ScriptExecutionContext as the parameter, but maybe that can be shortened without adding an extra prototype...

&gt; &gt; Source/WebCore/css/FontFace.cpp:178
&gt; &gt; +    if (familyNameToUse.contains(&apos;\&apos;&apos;) &amp;&amp; is&lt;Document&gt;(context) &amp;&amp; downcast&lt;Document&gt;(context).quirks().shouldStripQuotationMarkInFontFaceSetFamily())
&gt; 
&gt; Seems like code running in workers will need quirks too, eventually, for the
&gt; same reason we need them for documents. Probably should inherit them from
&gt; the document it’s created from. This code change here is a stopgap measure.

Yes, though I suppose in an ideal future world full of workers and OffscreenCanvas, we wouldn&apos;t have quirks? One can dream :)

&gt; &gt; Source/WebCore/css/FontFace.cpp:196
&gt; &gt; -    if (auto value = parseString(style, CSSPropertyFontStyle)) {
&gt; &gt; +    if (auto value = CSSPropertyParserWorkerSafe::parseFontFaceStyle(style, HTMLStandardMode, context.cssValuePool())) {
&gt; 
&gt; Frustrating that this code gets so verbose. Any way to cut down on the
&gt; arguments?

Perhaps like with parseFontFaceSrc, these functions should all just take a ScriptExecutionContext, rather than try to pre-empt things and taking the only thing it actually needs. That, along with the namespace import would make this much shorter.

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:50
&gt; &gt; +using namespace CSSPropertyParserHelpers;
&gt; &gt; +using namespace CSSPropertyParserHelpersWorkerSafe;
&gt; 
&gt; We should typically strive to avoid these kinds of &quot;using namespace&quot;.
&gt; 
&gt; I’m not sure what the namespaces achieve exactly, so I’m not sure what to
&gt; recommend.

Hmm, now you say this I&apos;m not sure about what I&apos;m saying about namespace above... These can easily be removed (and the cost of some longer lines).

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.cpp:186
&gt; &gt; +namespace CSSPropertyParserHelpersWorkerSafe {
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h:60
&gt; &gt; +namespace CSSPropertyParserHelpersWorkerSafe {
&gt; 
&gt; Not sure why we need a namespace here.

Partially copying how things are in CSSPropertyParserHelpers, but also to make it clear that everything within it is &apos;WorkerSafe&apos; and not have to suffix every function prototype.

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserWorkerSafe.h:42
&gt; &gt; +namespace CSSPropertyParserHelpers {
&gt; 
&gt; Not sure why this needs to go in a namespace.

Whoops, this is just left-over from an earlier revision...

&gt; &gt; Source/WebCore/dom/ScriptExecutionContext.cpp:240
&gt; &gt; +CSSValuePool&amp; ScriptExecutionContext::cssValuePool()
&gt; &gt; +{
&gt; &gt; +    return CSSValuePool::singleton();
&gt; &gt; +}
&gt; 
&gt; Maybe this should go in Document and it should be pure virtual in
&gt; ScriptExecutionContext?

I wanted to avoid having to touch audio worklets (and any other future worker types I suppose) - Really, this is more specific to WindowOrWorkerGlobalScope than it is to ScriptExecutionContext I suppose, but we don&apos;t have that distinction at this level (that I&apos;m aware of?) Having it in the base class felt a bit less wrong than having it in a sub-class where it would feel even more out-of-place.

&gt; &gt; Source/WebCore/dom/ScriptExecutionContext.h:171
&gt; &gt; +    virtual CSSValuePool&amp; cssValuePool();
&gt; 
&gt; Not sure I fully understand why each script execution context has its own
&gt; CSS value pool.

And I suppose this is the real root-cause of the above. This is really about Window and WorkerGlobalScope than it is about ScriptExecutionContext. The former two are both FontProviders, so they both have to be capable of parsing CSS font shorthands and FontFace properties. Within that context, having a CSS value pool makes sense, but it doesn&apos;t make perfect sense for a ScriptExecutionContext... I think solving this distinction is a bigger issue though.

Everything I&apos;ve not commented on I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750539</commentid>
    <comment_count>6</comment_count>
      <attachid>426088</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-15 02:10:24 -0700</bug_when>
    <thetext>Created attachment 426088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750543</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-15 02:22:30 -0700</bug_when>
    <thetext>This patch addresses most comments, but doesn&apos;t address the &quot;WorkerSafe&quot; nomenclature or the perhaps questionable decision to put a CSSValuePool on ScriptExecutionContext - I think this is a reasonable stepping stone though so I hope taking the granted review and only addressing this much for now is ok.


While ruminating over this, I think a lot of this vagary would be resolved by removing direct access to all singletons from the parsing code (which I think all hang off of CSSValuePool, but I might be misremembering). At that point, you could assume that all the CSS parsing code is &apos;worker safe&apos; and it wouldn&apos;t need to be specifically singled out.

That&apos;s not to say that the main thread couldn&apos;t use singletons, but that they ought to be accessible via a context object (CSSValuePool?) that can be replaced when that wouldn&apos;t be a safe thing to do, and for it to be a required parameter so there&apos;s less chance of doing the wrong thing when modifying code/adding new code.

There&apos;s also an odd split that seems arbitrary to me in the CSS parsing between parsing that happens without needing to explicitly create a parser object and parsing that does. I think that&apos;s also a source of some oddness, but I haven&apos;t read deeply into the code enough to see why this is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750566</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-15 04:14:14 -0700</bug_when>
    <thetext>Committed r276017 (236569@main): &lt;https://commits.webkit.org/236569@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426088.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1750569</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-15 04:16:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/76696278&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426004</attachid>
            <date>2021-04-14 10:33:43 -0700</date>
            <delta_ts>2021-04-14 10:50:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224426-20210414183341.patch</filename>
            <type>text/plain</type>
            <size>83262</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlMTA0ZGU3MTkyMDhk
ZTJlODc1YTU2OGRhYTkzNjAzZTM3ZTViMi4uMTVlZWQwMWVmNDA4NzVhZjM0NmMxZTJjM2MwMDNh
MmRhMmQyYzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMS0wNC0xNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWFrZSBGb250RmFjZSBwYXJz
aW5nIHdvcmtlci1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIENTUyBGb250RmFjZSBwcm9wZXJ0eSBwYXJzaW5nIHNhZmUgdG8gZG8gaW4g
YSBXb3JrZXIuIEluc3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgcnVsZSBwZXIgcHJv
cGVydHkgYW5kIHVzaW5nIHRoZSBmdWxsIENTU1Byb3BlcnR5UGFyc2VyCisgICAgICAgIHBhdGgs
IGluc3RlYWQgZmFjdG9yIG91dCB0aGUgc3BlY2lmaWMsIG5lY2Vzc2FyeSBwcm9wZXJ0eSBwYXJz
ZXJzIGludG8gYQorICAgICAgICBuZXcgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlIGFuZCBt
YWtlIHN1cmUgdGhleSdyZSBzYWZlIHRvIHVzZSBpbiBhCisgICAgICAgIFdvcmtlciAobWFpbmx5
IGJ5IGFsbG93aW5nIGZvciBzcGVjaWZ5aW5nIHRoZSBDU1NWYWx1ZVBvb2wgc28gdGhhdAorICAg
ICAgICBtYWluLXRocmVhZCBzaW5nbGV0b25zIGRvbid0IGdldCB1c2VkKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OiBBZGQgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcC8uaAorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGNzcy9Gb250RmFj
ZS5jcHA6IENhbGwgc2V0dGVycyB3aXRoIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvCisg
ICAgICAgICAgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byA6OmNzc1ZhbHVlUG9vbCgpIGFuZCB1c2Ug
bmV3IHdvcmtlci1zYWZlCisgICAgICAgICAgcGFyc2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNl
dEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldFdlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RmFjZTo6c2V0U3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0VW5pY29k
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldERpc3BsYXkpOgorICAgICAgICAqIGNz
cy9Gb250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5pZGw6CisKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6IE1vdmUgV29ya2VyU2FmZSBwYXJzaW5nIGZ1bmN0aW9u
cyB0bworICAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZSBhbmQgcmVtb3ZlIG5v
dy11bm5lY2Vzc2FyeQorICAgICAgICAgIHBhcnNlRm9udEZhY2VEZXNjcmlwdG9yLgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyLmNwcDogTW92ZSBGb250RmFjZSBwcm9wZXJ0eSBwYXJzZXJzIHRvCisgICAg
ICAgICAgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlRm9udEZhY2VEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRm9udCk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOiBBZGQgV29ya2VyU2FmZSB2YXJpYW50cyBmb3IKKyAgICAgICAg
ICBzb21lIG9mIHRoZSBiYXNpYyBjb25zdW1lIGhlbHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1l
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxj
UGFyc2VyOjpjb25zdW1lSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2Vp
Z2h0TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2VyU2FmZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJ
ZGVudFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRm9udFJhdyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUlkZW50V29ya2VyU2FmZSk6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZh
Y2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6
OnBhcnNlRm9udEZhY2VXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlU3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRG
YWNlRmVhdHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZTo6cGFyc2VGb250RmFjZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlU3JjVVJJKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNv
bnN1bWVGb250RmFjZVNyY0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6
OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHlsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1
bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0cmV0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3Vt
ZUZvbnRTdHJldGNoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250
RmVhdHVyZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNX
b3JrZXJTYWZlOjpjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VGb250
RGlzcGxheSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNh
ZmUuaDogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6
IEFkZCA6OmNzc1ZhbHVlUG9vbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y3NzVmFsdWVQb29sKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDogVXBkYXRlIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0eWxlKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUNvbG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
Lmg6CisKIDIwMjEtMDQtMDcgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJlZmFjdG9yIGZvbnQgbG9hZGluZyB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBXb3JrZXIg
dG8gaW1wbGVtZW50IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmZDM4ZGFhOTViNDZjMTE5NTE2NDY0
ZjViOWVjNDVjMTkwOGMyNmUuLmRiYzUwODljYThhNGI4NWVhNzNiMDExYThmMmU2YzlmNDhjZDZj
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC04MzcsNiArODM3LDcgQEAgY3NzL3BhcnNlci9DU1NQYXJz
ZXJUb2tlbi5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAKIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAKK2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAogY3Nz
L3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTU3VwcG9ydHNQYXJz
ZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGJhOGNhMTk1NjU4MThh
NzQxOGZhMGRkMjc4MDgwZGUxYzI1YmQ4Li40ZjNlYzE0NjBiOGE2YjEzNWJjZDk1ZGY4YmE5Y2I0
MWNhZWZmZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yOTM2LDYgKzI5MzYsNyBAQAogCQk5NDZEMzc0MDFENkNFM0MyMDA3
NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk0NkQzNzNEMUQ2Q0UzMUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tl
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk0
NkQzNzQ0MUQ2Q0Y3QjIwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0
RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAwNzcwODRG
IC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJz
ZXIuaCAqLzsgfTsKKwkJOTQ2RDM3NDYxRDZEMDFENTAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTQ2RDM3NDIxRDZEMDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2Vy
U2FmZS5oICovOyB9OwogCQk5NDZEMzc0QTFENkQwNjI4MDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0ODFE
NkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmggKi87IH07CiAJCTk0NkQzNzRFMUQ2RDA4QUEw
MDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFy
c2VyVG9rZW5SYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk0Nzk0OTI1MUUwMzA4QUYwMDAxOEQ4NSAvKiBEZXByZWNhdGVkQ1NTT01WYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ3OTQ5
MjMxRTAyRjkwQjAwMDE4RDg1IC8qIERlcHJlY2F0ZWRDU1NPTVZhbHVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzk5LDYgKzExODAwLDgg
QEAKIAkJOTQ2RDM3M0UxRDZDRTMxQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlclRva2VuLmNwcDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk0NkQzNzQxMUQ2Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlci5jcHA7
IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUHJvcGVydHlQYXJzZXIuaDsg
cGF0aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1Byb3Bl
cnR5UGFyc2VyV29ya2VyU2FmZS5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3NDIxRDZE
MDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgcGF0
aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTQ2RDM3NDMxRDZDRjc4ODAwNzcwODRGIC8qIENTU1BhcnNlcklkaW9t
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuaDsg
cGF0aCA9IHBhcnNlci9DU1NQYXJzZXJJZGlvbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTQ2RDM3NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NNYXJrdXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NDZEMzc0ODFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU01hcmt1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjQwMDcsNiArMjQwMTAsOCBAQAogCQkJCTk0NkQzNzQyMUQ2
Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5oICovLAogCQkJCTk0OUM3NzAyMUQ2
RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwICovLAogCQkJCTk0
OUM3NzAzMUQ2RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCAqLywK
KwkJCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlLmNwcCAqLywKKwkJCQk5NDZEMzc0MjFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQ
YXJzZXJXb3JrZXJTYWZlLmggKi8sCiAJCQkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENT
U1NlbGVjdG9yUGFyc2VyLmNwcCAqLywKIAkJCQk5NERFNUM4QzFEODA4MDE1MDAxNjRGMkEgLyog
Q1NTU2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NERFNUM4RjFEODMwMENCMDAxNjRGMkEgLyog
Q1NTU3VwcG9ydHNQYXJzZXIuY3BwICovLApAQCAtMzE5OTYsNiArMzIwMDEsNyBAQAogCQkJCTY1
NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTk0OUM3NzA1MUQ2RTM5RUEwMEMwREU0RiAvKiBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzQ2MUQ2RDAxRDUwMDc3
MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgyRTNEOERGMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNUExMkUwMERDMDQxNDgwMEM5QUZBRCAvKiBDU1NSZWZsZWN0VmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCREE0MDAxMjE1MUI2RjUwMEZENjYwNCAvKiBDU1NS
ZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5jcHAKaW5kZXggMzVmZmMwMzgyYTE1YTIwZmE0ZWU4NzFjODYzOGVhNjE2OGUzYmUxYi4uOGMz
ODA2OGEyMDZmMTdmN2RkNzRiMGUxNmEyN2M5NzdmN2NjOWY5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVk
ZSAiQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTc2LDExICs3NywxMSBAQCBSZWY8Rm9udEZhY2U+
IEZvbnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGZhbWls
eSwgU291cmNlJgogCiAgICAgYXV0byBzb3VyY2VDb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpzd2l0
Y2hPbihzb3VyY2UsCiAgICAgICAgIFsmXSAoU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9y
PHZvaWQ+IHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmco
c3RyaW5nLCBDU1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4odmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwotICAgICAgICAgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5iYWNr
aW5nKCksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgJmRvY3VtZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTcmMoc3RyaW5nLCBDU1NQ
YXJzZXJDb250ZXh0KGRvY3VtZW50KSkpIHsKKyAgICAgICAgICAgICAgICBDU1NGb250RmFjZTo6
YXBwZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgKnZhbHVlLCAmZG9jdW1lbnQsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0sCiAgICAgICAg
IFsmXSAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mIGFycmF5QnVmZmVyVmlldykgLT4gRXhjZXB0
aW9uT3I8dm9pZD4gewogICAgICAgICAgICAgZGF0YVJlcXVpcmVzQXN5bmNocm9ub3VzTG9hZGlu
ZyA9IHBvcHVsYXRlRm9udEZhY2VXaXRoQXJyYXlCdWZmZXIocmVzdWx0LT5iYWNraW5nKCksIGFy
cmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTEwMCwxNyArMTAxLDE3IEBAIFJl
ZjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBTb3VyY2UmCiAgICAgfQogCiAgICAgLy8gVGhlc2UgdGVybmFyaWVzIG1h
dGNoIHRoZSBkZWZhdWx0IHN0cmluZ3MgaW5zaWRlIHRoZSBGb250RmFjZURlc2NyaXB0b3JzIGRp
Y3Rpb25hcnkgaW5zaWRlIEZvbnRGYWNlLmlkbC4KLSAgICBhdXRvIHNldFN0eWxlUmVzdWx0ID0g
cmVzdWx0LT5zZXRTdHlsZShkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuc3R5bGUpOworICAgIGF1dG8gc2V0U3R5bGVSZXN1bHQgPSByZXN1bHQt
PnNldFN0eWxlKGRvY3VtZW50LCBkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFs
Il9zIDogZGVzY3JpcHRvcnMuc3R5bGUpOwogICAgIGlmIChzZXRTdHlsZVJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICByZXN1bHQtPnNldEVycm9yU3RhdGUoKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNl
dFdlaWdodChkZXNjcmlwdG9ycy53ZWlnaHQuaXNFbXB0eSgpID8gIm5vcm1hbCJfcyA6IGRlc2Ny
aXB0b3JzLndlaWdodCk7CisgICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNldFdl
aWdodChkb2N1bWVudCwgZGVzY3JpcHRvcnMud2VpZ2h0LmlzRW1wdHkoKSA/ICJub3JtYWwiX3Mg
OiBkZXNjcmlwdG9ycy53ZWlnaHQpOwogICAgIGlmIChzZXRXZWlnaHRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0U3RyZXRjaFJlc3VsdCA9IHJlc3VsdC0+c2V0
U3RyZXRjaChkZXNjcmlwdG9ycy5zdHJldGNoLmlzRW1wdHkoKSA/ICJub3JtYWwiX3MgOiBkZXNj
cmlwdG9ycy5zdHJldGNoKTsKKyAgICBhdXRvIHNldFN0cmV0Y2hSZXN1bHQgPSByZXN1bHQtPnNl
dFN0cmV0Y2goZG9jdW1lbnQsIGRlc2NyaXB0b3JzLnN0cmV0Y2guaXNFbXB0eSgpID8gIm5vcm1h
bCJfcyA6IGRlc2NyaXB0b3JzLnN0cmV0Y2gpOwogICAgIGlmIChzZXRTdHJldGNoUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0ZSgpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTIwLDEyICsxMjEsMTIgQEAgUmVmPEZvbnRGYWNlPiBGb250
RmFjZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNv
dXJjZSYKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0
LT5zZXRGZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzLmlzRW1wdHko
KSA/ICJub3JtYWwiX3MgOiBkZXNjcmlwdG9ycy5mZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8g
c2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0LT5zZXRGZWF0dXJlU2V0dGluZ3MoZG9j
dW1lbnQsIGRlc2NyaXB0b3JzLmZlYXR1cmVTZXR0aW5ncy5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzKTsKICAgICBpZiAoc2V0RmVhdHVyZVNldHRp
bmdzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0
ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBhdXRvIHNldERpc3BsYXlS
ZXN1bHQgPSByZXN1bHQtPnNldERpc3BsYXkoZGVzY3JpcHRvcnMuZGlzcGxheS5pc0VtcHR5KCkg
PyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOworICAgIGF1dG8gc2V0RGlzcGxheVJl
c3VsdCA9IHJlc3VsdC0+c2V0RGlzcGxheShkb2N1bWVudCwgZGVzY3JpcHRvcnMuZGlzcGxheS5p
c0VtcHR5KCkgPyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOwogICAgIGlmIChzZXRE
aXNwbGF5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JT
dGF0ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTY4LDYxICsxNjksNTUgQEAgRm9u
dEZhY2U6On5Gb250RmFjZSgpCiAgICAgbV9iYWNraW5nLT5yZW1vdmVDbGllbnQoKnRoaXMpOwog
fQogCi1SZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQotewotICAgIC8vIEZJWE1FOiBTaG91
bGQgdXNlIHRoZSBEb2N1bWVudCB0byBnZXQgdGhlIHJpZ2h0IHBhcnNpbmcgbW9kZS4KLSAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihwcm9wZXJ0eUlELCBzdHJp
bmcsIEhUTUxTdGFuZGFyZE1vZGUpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6
c2V0RmFtaWx5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpCitFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmFtaWx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIGlmIChmYW1pbHkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIFN0
cmluZyBmYW1pbHlOYW1lVG9Vc2UgPSBmYW1pbHk7Ci0gICAgaWYgKGZhbWlseU5hbWVUb1VzZS5j
b250YWlucygnXCcnKSAmJiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRTdHJpcFF1b3RhdGlvbk1h
cmtJbkZvbnRGYWNlU2V0RmFtaWx5KCkpCisgICAgaWYgKGZhbWlseU5hbWVUb1VzZS5jb250YWlu
cygnXCcnKSAmJiBpczxEb2N1bWVudD4oY29udGV4dCkgJiYgZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLnF1aXJrcygpLnNob3VsZFN0cmlwUXVvdGF0aW9uTWFya0luRm9udEZhY2VTZXRGYW1p
bHkoKSkKICAgICAgICAgZmFtaWx5TmFtZVRvVXNlID0gZmFtaWx5LnJlbW92ZUNoYXJhY3RlcnMo
W10oYXV0byBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnOyB9KTsKIAogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2Mzgx
IERvbid0IHVzZSBhIGxpc3QgaGVyZS4KICAgICAvLyBTZWUgY29uc3VtZUZvbnRGYW1pbHlEZXNj
cmlwdG9yKCkgaW4gQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGZvciB3aHkgd2UncmUgdXNpbmcgaXQu
CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwot
ICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShmYW1pbHlOYW1lVG9Vc2UpKTsKKyAgICBsaXN0LT5hcHBlbmQoY29udGV4dC5jc3NW
YWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZVRvVXNlKSk7CiAgICAg
Ym9vbCBzdWNjZXNzID0gbV9iYWNraW5nLT5zZXRGYW1pbGllcyhsaXN0KTsKICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJl
dHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHlsZShjb25z
dCBTdHJpbmcmIHN0eWxlKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFN0eWxlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3R5bGUpCiB7CiAg
ICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVN0eWxlKHN0eWxlLCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0eWxl
KCp2YWx1ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0
V2VpZ2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0KQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldFdlaWdodChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHdlaWdodCkKIHsKICAgICBpZiAod2VpZ2h0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3Ry
aW5nKHdlaWdodCwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSkgeworICAgIGlmIChhdXRvIHZhbHVl
ID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlV2VpZ2h0KHdlaWdo
dCwgSFRNTFN0YW5kYXJkTW9kZSwgY29udGV4dC5jc3NWYWx1ZVBvb2woKSkpIHsKICAgICAgICAg
bV9iYWNraW5nLT5zZXRXZWlnaHQoKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKIHsKICAgICBpZiAoc3RyZXRjaC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAg
aWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhzdHJldGNoLCBDU1NQcm9wZXJ0eUZvbnRTdHJl
dGNoKSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
OjpwYXJzZUZvbnRGYWNlU3RyZXRjaChzdHJldGNoLCBIVE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0
LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0cmV0Y2goKnZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yMzUsMzEgKzIzMCwzMSBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgdW5p
Y29kZVJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAog
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VTdHJp
bmcodW5pY29kZVJhbmdlLCBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSkpCisgICAgaWYgKGF1dG8g
dmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2Rl
UmFuZ2UodW5pY29kZVJhbmdlLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgc3VjY2VzcyA9
IG1fYmFja2luZy0+c2V0VW5pY29kZVJhbmdlKCp2YWx1ZSk7CiAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICByZXR1cm4geyB9
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmVhdHVyZVNldHRpbmdzKGNv
bnN0IFN0cmluZyYgZmVhdHVyZVNldHRpbmdzKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldEZlYXR1cmVTZXR0aW5ncyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIGZlYXR1cmVTZXR0aW5ncykKIHsKICAgICBpZiAoZmVhdHVyZVNldHRpbmdzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAg
ICBhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdzLCBDU1NQcm9wZXJ0eUZv
bnRGZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldv
cmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoZmVhdHVyZVNldHRpbmdzLCBI
VE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBtX2JhY2tp
bmctPnNldEZlYXR1cmVTZXR0aW5ncygqdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KGNvbnN0IFN0cmluZyYgZGlzcGxh
eSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGlzcGxheSkKIHsKICAgICBpZiAoZGlz
cGxheS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCi0gICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhkaXNwbGF5LCBDU1NQcm9wZXJ0
eUZvbnREaXNwbGF5KSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlRGlzcGxheShkaXNwbGF5LCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldExvYWRp
bmdCZWhhdmlvcigqdmFsdWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmgKaW5kZXggZmMxN2VhNjFkNmY5MzRhZWVlYWVlM2E2MjRkZWNkMWQ0N2NlMmM2ZC4u
MTQ5ZTBhM2E1YTA0Mjc4M2IyYjFkMTQ2N2QxMTE1MWVmODA5ZjQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmgKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGb250RmFj
ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDU1NGb250RmFjZSYpOwogICAgIHZp
cnR1YWwgfkZvbnRGYWNlKCk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoRG9j
dW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZShj
b25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRXZWlnaHQoY29uc3QgU3Ry
aW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RyZXRjaChjb25zdCBTdHJpbmcmKTsK
KyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRXZWlnaHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFN0cmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFVuaWNvZGVSYW5nZShjb25zdCBT
dHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RGlzcGxheShjb25zdCBTdHJpbmcm
KTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldERp
c3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3Ry
aW5nIGZhbWlseSgpIGNvbnN0OwogICAgIFN0cmluZyBzdHlsZSgpIGNvbnN0OwpAQCAtODUsOCAr
ODUsNiBAQCBwdWJsaWM6CiAKICAgICBDU1NGb250RmFjZSYgYmFja2luZygpIHsgcmV0dXJuIG1f
YmFja2luZzsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgQ1NTUHJvcGVydHlJRCk7Ci0KICAgICB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQo
Q1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6
U3RhdHVzIG5ld1N0YXRlKSBmaW5hbDsKIAogICAgIHZvaWQgcmVmKCkgZmluYWwgeyBSZWZDb3Vu
dGVkOjpyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5pZGwKaW5kZXggYTkwMmNiMDFkOTEzMDJj
ZGY4OWQ3N2QwMjk5Y2NiYWU1ZjVmMjVjMC4uMzc3ZmUxZjVlNzQ4NGQwN2M3MmM4Y2Q0MGNiMGQ5
YWM2MTNlNzk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaWRsCkBAIC00NywxMyArNDcsMTMgQEAg
ZGljdGlvbmFyeSBGb250RmFjZURlc2NyaXB0b3JzIHsKIF0gaW50ZXJmYWNlIEZvbnRGYWNlIHsK
ICAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKERPTVN0cmluZyBmYW1pbHksIChE
T01TdHJpbmcgb3IgQmluYXJ5RGF0YSkgc291cmNlLCBvcHRpb25hbCBGb250RmFjZURlc2NyaXB0
b3JzIGRlc2NyaXB0b3JzKTsKIAotICAgIFtTZXR0ZXJDYWxsV2l0aD1Eb2N1bWVudF0gYXR0cmli
dXRlIERPTVN0cmluZyBmYW1pbHk7Ci0gICAgYXR0cmlidXRlIERPTVN0cmluZyBzdHlsZTsKLSAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0
cmV0Y2g7CisgICAgW1NldHRlckNhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJp
YnV0ZSBET01TdHJpbmcgZmFtaWx5OworICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0eWxlOworICAgIFtTZXR0ZXJDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKKyAg
ICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gYXR0cmlidXRlIERPTVN0
cmluZyBzdHJldGNoOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdW5pY29kZVJhbmdlOwotICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgZmVhdHVyZVNldHRpbmdzOwotICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgZGlzcGxheTsKKyAgICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gYXR0cmlidXRlIERPTVN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CisgICAgW1NldHRlckNhbGxX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZGlzcGxheTsK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGb250RmFjZUxvYWRTdGF0dXMgc3RhdHVzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggNzY0OGY1MDRhNWQ3YTMw
ODAzOTU1NjZkYWIzOGU0M2ZiMDg4MWI4My4uOWRmYzNjNzBmYWRlY2EzY2RmYjBiMGNkNjM3MThl
NDJhMjQ3ZDY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAt
MTA4LDE4ICsxMDgsNiBAQCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigp
OwogfQogCi1Db2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIGlmIChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpw
YXJzZVNpbXBsZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiAqY29sb3I7Ci0KLSAgICBD
U1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFj
ZSgpOwotCi0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9y
V29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29udGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Ci19
Ci0KIENvbG9yIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3IHN0cmluZykK
IHsKICAgICBhdXRvIGtleXdvcmQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwpAQCAtMTM4
LDE1ICsxMjYsNiBAQCBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhl
eENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6
OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsKIH0KIAotT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpGb250UmF3PiBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBDU1NUb2tl
bml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0
b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwot
Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJT
YWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLX0KLQogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKQEAgLTI2MSwxMyArMjQwLDQgQEAgVmVjdG9yPGRvdWJsZT4gQ1NT
UGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAg
IHJldHVybiBDU1NQYXJzZXJJbXBsOjpwYXJzZUtleWZyYW1lS2V5TGlzdChzZWxlY3Rvcik7CiB9
CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gbWFr
ZVN0cmluZygiQGZvbnQtZmFjZSB7ICIsIGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlE
KSwgIiA6ICIsIHByb3BlcnR5VmFsdWUsICI7IH0iKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gcnVsZSA9IHBhcnNlUnVsZShjb250ZXh0LCBudWxscHRyLCBzdHJpbmcpOwotICAgIGlmICgh
cnVsZSB8fCAhcnVsZS0+aXNGb250RmFjZVJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSkucHJv
cGVydGllcygpLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci19Ci0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGYyMjFkMTgxMWE5NGQyNzQzOGIxYmZi
NzI2NTVjY2Q1NDBjYmYxMDUuLjYwZjE0ZDc4YzUxMTdlZTEyMTU2ZWMzZWY0NDY2NDFjMWNmOWMy
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzQsNiArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3Mg
Q1NTU2VsZWN0b3JMaXN0OworY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29s
OwogY2xhc3MgQ29sb3I7CiBjbGFzcyBFbGVtZW50OwpAQCAtNzksOCArODAsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJv
cGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbVN0cmluZyYgcHJv
cGVydHlOYW1lLCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOwogICAgIAotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRm9udEZh
Y2VEZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKLQogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFs
dWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
PSBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBw
YXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBTdHJpbmcmKTsK
QEAgLTkxLDEzICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZh
bHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYs
IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0
aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U1JHQkE8dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0
aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAK
LSAgICBzdGF0aWMgT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBw
YXJzZUZvbnRXb3JrZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3Rh
bmRhcmRNb2RlKTsKLQogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGlt
cG9ydGFudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAKaW5kZXggMmY5ZmFjYTEwM2Q2MGY1NjRkMzNkMWQ0MWRhMmM1OGZiOTIyYjJhNi4u
ODMwMTE5MDEzMGI4NDcyMWIwZTI4ZWM2MDE0YWFmZGJlNjM1ZmZmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTE5MCw2ICsxOTAs
NyBAQCBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoU3RyaW5nVmlldyBzdHJpbmcpCiB9CiAg
ICAgCiB1c2luZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFt
ZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU7CiAKIENTU1Byb3BlcnR5
UGFyc2VyOjpDU1NQcm9wZXJ0eVBhcnNlcihjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAy
NTY+KiBwYXJzZWRQcm9wZXJ0aWVzLCBib29sIGNvbnN1bWVXaGl0ZXNwYWNlKQogICAgIDogbV9y
YW5nZShyYW5nZSkKQEAgLTQyNiw1NCArNDI3LDYgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZVdpbGxDaGFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJu
IHZhbHVlczsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1l
Rm9udEZlYXR1cmVUYWcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gRmVh
dHVyZSB0YWcgbmFtZSBjb25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gNDsKLQotICAgIGNvbnN0IENTU1BhcnNl
clRva2VuJiB0b2tlbiA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAg
Ly8gRmVhdHVyZSB0YWcgbmFtZSBjb21lcyBmaXJzdAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0g
U3RyaW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0b2tlbi52YWx1
ZSgpLmxlbmd0aCgpICE9IHRhZ05hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIEZvbnRUYWcgdGFnOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJz
IHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5kIGluIHRo
ZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2tl
bi52YWx1ZSgpW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIg
PiAweDdFKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHRhZ1tpXSA9IHRv
QVNDSUlMb3dlcihjaGFyYWN0ZXIpOwotICAgIH0KLQotICAgIGludCB0YWdWYWx1ZSA9IDE7Ci0g
ICAgaWYgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29tbWFUb2tl
bikgewotICAgICAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8aW50ZWdl
cj4gfCBvbiB8IG9mZgotICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJS
YXcocmFuZ2UsIDApKQotICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKLSAgICAgICAg
ZWxzZSBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5wZWVrKCku
aWQoKSA9PSBDU1NWYWx1ZU9mZikKLSAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTRm9udEZl
YXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOwotfQotCi1zdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVO
b3JtYWwpCi0gICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IHNldHRpbmdzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwotICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRG
ZWF0dXJlVmFsdWUgPSBjb25zdW1lRm9udEZlYXR1cmVUYWcocmFuZ2UpOwotICAgICAgICBpZiAo
IWZvbnRGZWF0dXJlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
c2V0dGluZ3MtPmFwcGVuZChmb250RmVhdHVyZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
IH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKLSAgICBy
ZXR1cm4gc2V0dGluZ3M7Ci19Ci0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYXRpb25UYWcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7CkBAIC04NTAsMTQwICs4MDMsNiBAQCBzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFs
LCBDU1NWYWx1ZUJvbGQ+KHJhbmdlKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMp
Ci1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgYXV0byBmaXJzdE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
KHJhbmdlKTsKLSAgICBpZiAoIWZpcnN0TnVtYmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAocmFuZ2UuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyOwotICAg
IGF1dG8gc2Vjb25kTnVtYmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotICAg
IGlmICghc2Vjb25kTnVtYmVyIHx8IGZpcnN0TnVtYmVyLT5mbG9hdFZhbHVlKCkgPiBzZWNvbmRO
dW1iZXItPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBy
ZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmQoZmlyc3ROdW1iZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmVzdWx0LT5hcHBl
bmQoc2Vjb25kTnVtYmVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBSZWZQdHI8Q1NT
VmFsdWU+KFdURk1vdmUocmVzdWx0KSk7Ci19Ci0jZWxzZQotc3RhdGljIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEFic29s
dXRlS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29u
c3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1z
dGF0aWMgYm9vbCBmb250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmxvYXQgc3RyZXRjaCkKLXsKLSAg
ICByZXR1cm4gc3RyZXRjaCA+PSAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFs
dWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi0gICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1
ZVJhbmdlTm9uTmVnYXRpdmUpKQotICAgICAgICByZXR1cm4gZm9udFN0cmV0Y2hJc1dpdGhpblJh
bmdlKHBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSA/IHBlcmNlbnQgOiBudWxscHRyOwotI2VuZGlm
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQot
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRT
dHJldGNoS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBh
dXRvIGZpcnN0UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUpOwotICAgIGlmICghZmlyc3RQZXJjZW50IHx8ICFmb250U3RyZXRjaElzV2l0aGluUmFu
Z2UoZmlyc3RQZXJjZW50LT52YWx1ZTxmbG9hdD4oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmIChyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RQZXJjZW50Owot
ICAgIGF1dG8gc2Vjb25kUGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUpOwotICAgIGlmICghc2Vjb25kUGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dp
dGhpblJhbmdlKHNlY29uZFBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSB8fCBmaXJzdFBlcmNlbnQt
PmZsb2F0VmFsdWUoKSA+IHNlY29uZFBlcmNlbnQtPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RQZXJjZW50LnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZFBlcmNlbnQucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgcmV0dXJuIFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1bHQpKTsKLX0KLSNl
bmRpZgotCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxl
S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBj
b25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlx
dWU+KHJhbmdlKTsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3Vt
ZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICAgICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5n
bGUpIHsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1
ZSksCi0gICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShyZXN1bHQtPmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkp
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi1zdGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250
U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGF1dG8ga2V5d29yZCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3Jk
VmFsdWUocmFuZ2UpOwotICAgIGlmICgha2V5d29yZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoa2V5d29yZC0+dmFsdWVJRCgpICE9IENTU1ZhbHVlT2JsaXF1ZSB8fCByYW5n
ZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRl
KGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgbm90IGFsbG93IHRoZSB1bml0bGVzcyB6ZXJvLgotICAgIGlmIChhdXRvIGZpcnN0
QW5nbGUgPSBjb25zdW1lQW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgewotICAgICAgICBhdXRvIGZpcnN0
QW5nbGVJbkRlZ3JlZXMgPSBmaXJzdEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NT
X0RFRyk7Ci0gICAgICAgIGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZmlyc3RBbmdsZUlu
RGVncmVlcykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKHJhbmdl
LmF0RW5kKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmds
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5n
ZVZhbHVlOjpjcmVhdGUoa2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5v
dCBhbGxvdyB0aGUgdW5pdGxlc3MgemVyby4KLSAgICAgICAgYXV0byBzZWNvbmRBbmdsZSA9IGNv
bnN1bWVBbmdsZShyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBV
bml0bGVzc1plcm9RdWlyazo6QWxsb3cpOwotICAgICAgICBpZiAoIXNlY29uZEFuZ2xlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc2Vjb25kQW5nbGVJbkRlZ3Jl
ZXMgPSBzZWNvbmRBbmdsZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOwotICAg
ICAgICBpZiAoIWlzRm9udFN0eWxlQW5nbGVJblJhbmdlKHNlY29uZEFuZ2xlSW5EZWdyZWVzKSB8
fCBmaXJzdEFuZ2xlSW5EZWdyZWVzID4gc2Vjb25kQW5nbGVJbkRlZ3JlZXMpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZEFuZ2xlLnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6
Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAg
ICBhdXRvIGZhbWlseU5hbWUgPSBjb25zdW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CkBAIC00MDc4
LDE1ICszODk3LDE1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
U2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFuOgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRWYXJp
YW50RWFzdEFzaWFuKG1fcmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzOgotICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRGZWF0dXJlU2V0dGluZ3MobV9yYW5n
ZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhtX3JhbmdlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWls
eToKICAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250RmFtaWx5KG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250V2VpZ2h0OgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRXZWlnaHQo
bV9yYW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgICAgICByZXR1
cm4gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UpOworICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgICAgIHJldHVybiBjb25zdW1lRm9udFN0eWxlKG1f
cmFuZ2UsIG1fY29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250U3R5bGUo
bV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3ludGhlc2lzOgogICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTeW50aGVzaXMobV9yYW5nZSk7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTQ2
MTUsOTAgKzQ0MzQsNiBAQCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVy
dHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRGYWNlVW5p
Y29kZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
LQotICAgIGRvIHsKLSAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAh
PSBVbmljb2RlUmFuZ2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIFVDaGFyMzIgc3RhcnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOwotICAgICAgICBV
Q2hhcjMyIGVuZCA9IHRva2VuLnVuaWNvZGVSYW5nZUVuZCgpOwotICAgICAgICBpZiAoc3RhcnQg
PiBlbmQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWVzLT5hcHBl
bmQoQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7Ci0gICAgfSB3aGls
ZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwotCi0gICAgcmV0dXJu
IHZhbHVlczsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRGYWNlRm9udERpc3BsYXkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0
dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZUF1dG8sIENTU1ZhbHVlQmxvY2ssIENTU1ZhbHVlU3dh
cCwgQ1NTVmFsdWVGYWxsYmFjaywgQ1NTVmFsdWVPcHRpb25hbD4ocmFuZ2UpOwotfQotCi1zdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZhY2VTcmNVUkkoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgU3Ry
aW5nIHVybCA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvU3RyaW5nKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8
Q1NTRm9udEZhY2VTcmNWYWx1ZT4gdXJpVmFsdWUgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVh
dGUoY29udGV4dC5jb21wbGV0ZVVSTCh1cmwpLnN0cmluZygpLCBjb250ZXh0LmlzQ29udGVudE9w
YXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3Vy
Y2U6Ok5vKTsKLQotICAgIGlmIChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpICE9IENTU1ZhbHVl
Rm9ybWF0KQotICAgICAgICByZXR1cm4gdXJpVmFsdWU7Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250cyBzYXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMg
YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFj
ZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBmb3JtYXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9y
IG5vdy4KLSAgICAvLyBGSVhNRTogV2UncmUgYWxsb3dpbmcgdGhlIGZvcm1hdCB0byBiZSBhbiBp
ZGVudGlmaWVyIGFzIHdlbGwgYXMgYSBzdHJpbmcsIGJlY2F1c2UgdGhlIG9sZAotICAgIC8vIHBh
cnNlciBkaWQuIEl0J3Mgbm90IGNsZWFyIGlmIHdlIG5lZWQgdG8gY29udGludWUgdG8gc3VwcG9y
dCB0aGlzIGJlaGF2aW9yLCBidXQgd2UgaGF2ZSBsb3RzIG9mCi0gICAgLy8gbGF5b3V0IHRlc3Rz
IHRoYXQgcmVseSBvbiBpdC4KLSAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2UpOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhcmcgPSBhcmdzLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKChhcmcudHlwZSgpICE9IFN0cmlu
Z1Rva2VuICYmIGFyZy50eXBlKCkgIT0gSWRlbnRUb2tlbikgfHwgIWFyZ3MuYXRFbmQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgdXJpVmFsdWUtPnNldEZvcm1hdChhcmcudmFsdWUo
KS50b1N0cmluZygpKTsKLSAgICByZXR1cm4gdXJpVmFsdWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250RmFjZVNyY0xvY2FsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQotewotICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihy
YW5nZSk7Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgewotICAg
ICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOwotICAgICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9j
YWwoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChhcmdzLnBlZWsoKS50
eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNvbmNh
dGVuYXRlRmFtaWx5TmFtZShhcmdzKTsKLSAgICAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFs
dWU6OmNyZWF0ZUxvY2FsKGZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKLSAgICAgICAgaWYgKHRva2VuLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2Fs
KQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5n
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlU3JjVVJJKHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLX0KLQogYm9vbCBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3IoQ1NTUHJvcGVydHlJRCBwcm9w
SWQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTQ3MTMsMjcgKzQ0
NDgsMjcgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3Io
Q1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlVW5pY29kZVJhbmdlKG1fcmFuZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5Rm9udERpc3BsYXk6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNl
Rm9udERpc3BsYXkobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlRm9udERpc3BsYXkobV9yYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgogI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZVJhbmdlKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGVSYW5nZShtX3JhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
ICNlbHNlCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZSht
X3JhbmdlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2Vsc2UKLSAgICAgICAgcGFy
c2VkVmFsdWUgPSBjb25zdW1lRm9udFN0cmV0Y2gobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5
bGU6CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBj
b25zdW1lRm9udFN0eWxlUmFuZ2UobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGVSYW5nZShtX3JhbmdlLCBtX2NvbnRleHQubW9k
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAjZWxzZQotICAgICAgICBwYXJzZWRWYWx1
ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6CkBAIC00NzU3LDcgKzQ0OTIsNyBAQCBib29s
IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlE
IHByb3BJZCkKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CiAgICAgICAgIHJldHVy
biBjb25zdW1lRm9udFZhcmlhbnRTaG9ydGhhbmQoZmFsc2UpOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250RmVhdHVyZVNldHRpbmdzOgotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVG
b250RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQ4MTQsNyAr
NDU0OSw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJvb2wgaW1wb3J0
YW50KQogICAgIHdoaWxlICghbV9yYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIENTU1ZhbHVlSUQg
aWQgPSBtX3JhbmdlLnBlZWsoKS5pZCgpOwogICAgICAgICBpZiAoIWZvbnRTdHlsZSkgewotICAg
ICAgICAgICAgZm9udFN0eWxlID0gY29uc3VtZUZvbnRTdHlsZShtX3JhbmdlLCBtX2NvbnRleHQu
bW9kZSk7CisgICAgICAgICAgICBmb250U3R5bGUgPSBjb25zdW1lRm9udFN0eWxlKG1fcmFuZ2Us
IG1fY29udGV4dC5tb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICAgICAgICAg
IGlmIChmb250U3R5bGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAg
LTQ4MzEsNyArNDU2Niw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJv
b2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghZm9udFN0cmV0Y2gpIHsKLSAgICAgICAgICAgIGZvbnRTdHJldGNoID0gY29uc3Vt
ZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKG1fcmFuZ2UpOworICAgICAgICAgICAgZm9udFN0cmV0
Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUobV9yYW5nZSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CiAgICAgICAgICAgICBpZiAoZm9udFN0cmV0Y2gpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCAwYTBiYTRiOTE0MjRhMWFkYzBhYmIxYTM2Yjc5OWM2
MmU5ZjFlMjIwLi43MWExYWQ4YjBiNmMwZTU2M2NiYWI1ZDZlYjFhYThhZmM4MTJlMDZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0yNCw2
ICsyNCw3IEBACiAKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0zMSw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsK
IGNsYXNzIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCBkYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVk
MGU5Li5lYjdlZmJjZmNjOTIzNTFhNTVlNWM5ZWEzNmExZmRhZWViNTk5ZDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC05Nyw5ICs5NywxMCBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVt
YmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZwogLy8gRklYTUU6
IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlv
blZhbHVlLmNwcC4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IENh
bGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFs
bCkKKyAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2VBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSkKICAgICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAg
ICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV9jc3NWYWx1ZVBvb2woY3NzVmFsdWVQ
b29sKQogICAgIHsKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CkBA
IC0xMTQsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3Jhbmdl
OwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShX
VEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX2Nzc1ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTIy
LDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RkOjpy
b3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSks
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIG1fY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gT3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUlu
dGVnZXJUeXBlUmF3KGRvdWJsZSBtaW5pbXVtVmFsdWUpCkBAIC0xMzgsNyArMTM5LDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91YmxlVmFs
dWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gbV9jc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1i
ZXJSYXcoKQpAQCAtMTk5LDYgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CiAg
ICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjVmFsdWU7CisgICAgQ1NTVmFsdWVQb29sJiBt
X2Nzc1ZhbHVlUG9vbDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IE9wdGlvbmFs
PEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKQEAgLTMxNiw5ICszMTgsMTQgQEAgT3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcldv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFs
dWVQb29sKQogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDE3LDEwICs0MjQsMTUgQEAgT3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZSB2YWx1ZVIKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkK
IHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIg
Y2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNv
bnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAg
ICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOwpAQCAtNDI5LDcgKzQ0MSw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKICAgICB9
CiAKICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19Q
RVJDRU5UQUdFKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNTIyLDEwICs1MzQsMTUg
QEAgT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3MKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsg
dW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCiB7CiAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgQ2FsY1Bh
cnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVS
YW5nZUFsbCwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSog
Y2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChjYWxj
dWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKQEAgLTUzNCw3ICs1
NTEsNyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZQogICAgIH0KIAogICAgIGlmIChhdXRvIGFu
Z2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CiAKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTYyNSw5ICs2NDIsMTQgQEAgT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogfQogCiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZShyYW5nZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtMjk5OCw3ICszMDIwLDcgQEAgT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxp
bmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnMKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1PcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtl
clNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7CiAgICAgLy8gTGV0J3Mg
Y2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3aGVyZSBpbiB0aGUg
c2hvcnRoYW5kLgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAppbmRleCA4MmY0NDJmYjcwMmMzNjAxOGZkNmEwNWYzZDNmYTQ4NmE2OTY5MDkxLi40NzMy
ODJhNGM3YzMwNjYyMDE1ODYxOTliYjAxMWFlODk5YTY4MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTgyLDI0
ICs4MiwyOSBAQCBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQQogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIE9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFs
dWVQb29sJik7CiBPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBV
bml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFu
Z2UsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7
CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRp
b25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkZvcmJpZCk7CiAKIE9wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlk
ZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1Zh
bHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5n
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBl
cik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlELi4uPiBpbmxpbmUgYm9vbCBpZGVu
dE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJ
ZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK3Rl
bXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1
ZVBvb2wmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3VzdG9tSWRlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
U3RyaW5nKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTE3Miw3ICsxNzcsNyBAQCBPcHRpb25h
bDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CiBPcHRpb25hbDxWZWN0b3I8Rm9udEZhbWlseVJhdz4+IGNvbnN1bWVGb250RmFtaWx5UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIE9wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9u
dFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29u
c3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwot
T3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKIGNvbnN0IEF0b21TdHJpbmcmIGdl
bmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQpOwogV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1p
bHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFtaWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKQEAgLTE5
NCwxMCArMTk5LDE1IEBAIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IE9wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlCiB9CiAKIHRlbXBsYXRlPENT
U1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRX
b3JrZXJTYWZlPG5hbWVzLi4uPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9
CisKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
VmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkg
IT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLmlkKCkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSk7CiB9CiAKIGlu
bGluZSBib29sIGlzRm9udFN0eWxlQW5nbGVJblJhbmdlKGRvdWJsZSBhbmdsZUluRGVncmVlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2ZmZDI1MTliZjkxZDI2OWZjNWFlNDQxMzQ3
NTdlNGM5NTgxNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCkBAIC0wLDAgKzEsNDU2IEBACisvLyBD
b3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKEMpIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKy8vIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U3R5bGVWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU1BhcnNlckZhc3RQYXRocy5oIgorI2luY2x1ZGUgIkNTU1BhcnNlckltcGwuaCIKKyNp
bmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJD
U1NUb2tlbml6ZXIuaCIKKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisjaW5jbHVkZSAi
Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczsKK3VzaW5nIG5hbWVz
cGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOworCitPcHRpb25hbDxGb250
UmF3PiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udChjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIENTU1Rva2VuaXpl
ciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2Vu
aXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAg
ICByZXR1cm4gY29uc3VtZUZvbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCitDb2xv
ciBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgaWYgKGF1dG8gY29sb3IgPSBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNl
U2ltcGxlQ29sb3Ioc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICpjb2xvcjsKKworICAgIENTU1Rv
a2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
KHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7
CisKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yV29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyhjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJ
bXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFu
Z2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1l
V2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjKHJhbmdlLCBj
b250ZXh0KTsKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRy
PENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTdHls
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIo
Y29udGV4dCwgc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gcGFyc2Vy
LnRva2VuaXplcigpLT50b2tlblJhbmdlKCk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2Uo
KTsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBwYXJzZWRWYWx1ZSA9CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAg
Y29uc3VtZUZvbnRTdHlsZVJhbmdlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNzc1ZhbHVlUG9vbCk7
CisjZWxzZQorICAgICAgICBjb25zdW1lRm9udFN0eWxlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNz
c1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsK
K30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNl
Rm9udEZhY2VXZWlnaHQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIENTU1BhcnNl
ckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUgPQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9O
VFMpCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVSYW5nZShyYW5nZSwgY3NzVmFs
dWVQb29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUocmFuZ2Us
IGNzc1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5h
dEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1
ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBh
cnNlRm9udEZhY2VTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQ
YXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFu
Z2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5j
b25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0KKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgICAgICBjb25zdW1lRm9udFN0cmV0Y2hSYW5nZShyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250U3RyZXRjaChyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbmRpZgorICAgIGlmICghcGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitS
ZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFj
ZVVuaWNvZGVSYW5nZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcp
OworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRv
a2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVl
ID0gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKHJhbmdlKTsKKyAgICBpZiAoIXBhcnNlZFZh
bHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNl
cldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9r
ZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdl
LmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUg
PSBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhyYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICBp
ZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
cm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VEaXNwbGF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wm
IGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJp
bmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCkt
PnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChy
YW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXkocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cisg
ICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAhcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK25hbWVzcGFjZSBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlIHsKKworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
Rm9udEZhY2VTcmNVUkkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmIGNvbnRleHQpCit7CisgICAgU3RyaW5nIHVybCA9IGNvbnN1bWVVcmxBc1N0cmlu
Z1ZpZXcocmFuZ2UpLnRvU3RyaW5nKCk7CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gdXJpVmFs
dWUgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGUoY29udGV4dC5jb21wbGV0ZVVSTCh1cmwp
LnN0cmluZygpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3Vy
Y2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKKworICAgIGlmIChyYW5nZS5w
ZWVrKCkuZnVuY3Rpb25JZCgpICE9IENTU1ZhbHVlRm9ybWF0KQorICAgICAgICByZXR1cm4gdXJp
VmFsdWU7CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250
cyBzYXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBz
dHJpbmdzLAorICAgIC8vIGJ1dCBDU1NGb250RmFjZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBm
b3JtYXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9yIG5vdy4KKyAgICAvLyBGSVhNRTogV2UncmUg
YWxsb3dpbmcgdGhlIGZvcm1hdCB0byBiZSBhbiBpZGVudGlmaWVyIGFzIHdlbGwgYXMgYSBzdHJp
bmcsIGJlY2F1c2UgdGhlIG9sZAorICAgIC8vIHBhcnNlciBkaWQuIEl0J3Mgbm90IGNsZWFyIGlm
IHdlIG5lZWQgdG8gY29udGludWUgdG8gc3VwcG9ydCB0aGlzIGJlaGF2aW9yLCBidXQgd2UgaGF2
ZSBsb3RzIG9mCisgICAgLy8gbGF5b3V0IHRlc3RzIHRoYXQgcmVseSBvbiBpdC4KKyAgICBDU1NQ
YXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGNvbnN0
IENTU1BhcnNlclRva2VuJiBhcmcgPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgaWYgKChhcmcudHlwZSgpICE9IFN0cmluZ1Rva2VuICYmIGFyZy50eXBlKCkgIT0gSWRl
bnRUb2tlbikgfHwgIWFyZ3MuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
dXJpVmFsdWUtPnNldEZvcm1hdChhcmcudmFsdWUoKS50b1N0cmluZygpKTsKKyAgICByZXR1cm4g
dXJpVmFsdWU7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRGYWNlU3JjTG9jYWwo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBh
cmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgp
ID09IFN0cmluZ1Rva2VuKSB7CisgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhcmcgPSBh
cmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlmICghYXJncy5hdEVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDU1NGb250
RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChhcmcudmFsdWUoKS50b1N0cmluZygpKTsKKyAgICB9
CisgICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIFN0
cmluZyBmYW1pbHlOYW1lID0gY29uY2F0ZW5hdGVGYW1pbHlOYW1lKGFyZ3MpOworICAgICAgICBp
ZiAoIWFyZ3MuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoZmFtaWx5TmFtZSk7CisgICAg
fQorICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1l
Rm9udEZhY2VTcmMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworCisgICAgZG8geworICAgICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWU7CisgICAgICAgIGlmICh0b2tlbi5mdW5jdGlvbklkKCkg
PT0gQ1NTVmFsdWVMb2NhbCkKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlU3JjTG9jYWwocmFuZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IGNvbnN1bWVGb250RmFjZVNyY1VSSShyYW5nZSwgY29udGV4dCk7CisgICAgICAgIGlmICgh
cGFyc2VkVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdmFsdWVz
LT5hcHBlbmQocGFyc2VkVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSB3aGlsZSAoY29u
c3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOworICAgIHJldHVybiB2YWx1ZXM7
Cit9CisKK1JlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9u
dFN0eWxlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkgeworI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCisgICAgICAgIGlmIChyZXN1bHQtPnN0eWxlID09IENTU1ZhbHVlT2JsaXF1ZSAmJiBy
ZXN1bHQtPmFuZ2xlKSB7CisgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNy
ZWF0ZShjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSks
CisgICAgICAgICAgICAgICAgY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKHJlc3VsdC0+YW5nbGUt
PnZhbHVlLCByZXN1bHQtPmFuZ2xlLT50eXBlKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAg
ICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShjc3NWYWx1ZVBvb2wuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHJlc3VsdC0+c3R5bGUpKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlk
ZW50V29ya2VyU2FmZTxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVJdGFsaWMsIENTU1ZhbHVlT2Js
aXF1ZT4ocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cit9CisKK1JlZlB0cjxDU1NGb250U3R5bGVSYW5n
ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wp
Cit7CisgICAgYXV0byBrZXl3b3JkID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5n
ZSwgY3NzVmFsdWVQb29sKTsKKyAgICBpZiAoIWtleXdvcmQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgaWYgKGtleXdvcmQtPnZhbHVlSUQoKSAhPSBDU1NWYWx1ZU9ibGlxdWUgfHwg
cmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU6OmNy
ZWF0ZShrZXl3b3JkLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHByb2JhYmx5IG5vdCBhbGxvdyB0aGUgdW5pdGxlc3MgemVyby4KKyAgICBpZiAoYXV0byBm
aXJzdEFuZ2xlID0gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShyYW5nZSwgY3NzUGFyc2VyTW9kZSwg
Y3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpB
bGxvdykpIHsKKyAgICAgICAgYXV0byBmaXJzdEFuZ2xlSW5EZWdyZWVzID0gZmlyc3RBbmdsZS0+
ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOworICAgICAgICBpZiAoIWlzRm9udFN0
eWxlQW5nbGVJblJhbmdlKGZpcnN0QW5nbGVJbkRlZ3JlZXMpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIGlmIChyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRlKGtleXdvcmQucmVsZWFz
ZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBub3QgYWxsb3cgdGhlIHVuaXRsZXNzIHplcm8uCisg
ICAgICAgIGF1dG8gc2Vjb25kQW5nbGUgPSBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBj
c3NQYXJzZXJNb2RlLCBjc3NWYWx1ZVBvb2wsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxl
c3NaZXJvUXVpcms6OkFsbG93KTsKKyAgICAgICAgaWYgKCFzZWNvbmRBbmdsZSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHNlY29uZEFuZ2xlSW5EZWdyZWVzID0g
c2Vjb25kQW5nbGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfREVHKTsKKyAgICAgICAg
aWYgKCFpc0ZvbnRTdHlsZUFuZ2xlSW5SYW5nZShzZWNvbmRBbmdsZUluRGVncmVlcykgfHwgZmly
c3RBbmdsZUluRGVncmVlcyA+IHNlY29uZEFuZ2xlSW5EZWdyZWVzKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVT
cGFjZVNlcGFyYXRlZCgpOworICAgICAgICByZXN1bHQtPmFwcGVuZChmaXJzdEFuZ2xlLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICByZXN1bHQtPmFwcGVuZChzZWNvbmRBbmdsZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU6OmNyZWF0
ZShrZXl3b3JkLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUocmVzdWx0KSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYKKworc3RhdGljIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVJZGVudFdvcmtlclNhZmU8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZD4o
cmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cit9CisKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQor
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIGlm
IChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUocmFu
Z2UsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBmaXJz
dE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShyYW5nZSwgY3NzVmFs
dWVQb29sKTsKKyAgICBpZiAoIWZpcnN0TnVtYmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyOworICAg
IGF1dG8gc2Vjb25kTnVtYmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJh
bmdlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlmICghc2Vjb25kTnVtYmVyIHx8IGZpcnN0TnVtYmVy
LT5mbG9hdFZhbHVlKCkgPiBzZWNvbmROdW1iZXItPmZsb2F0VmFsdWUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7CisgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3ROdW1iZXIucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgcmVzdWx0LT5hcHBlbmQoc2Vjb25kTnVtYmVyLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1vdmUocmVzdWx0KSk7Cit9CisjZWxz
ZQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRlS2V5d29yZFZh
bHVlKHJhbmdlLCBjc3NWYWx1ZVBvb2wpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSwgY3NzVmFsdWVQb29sKTsKK30KKyNl
bmRpZgorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdv
cmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1
ZVBvb2wpCit7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdv
cmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRl
bnRpZmllclZhbHVlKCp2YWx1ZUlEKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVO
QUJMRShWQVJJQVRJT05fRk9OVFMpCitzdGF0aWMgYm9vbCBmb250U3RyZXRjaElzV2l0aGluUmFu
Z2UoZmxvYXQgc3RyZXRjaCkKK3sKKyAgICByZXR1cm4gc3RyZXRjaCA+PSAwOworfQorI2VuZGlm
CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUocmFuZ2UsIGNz
c1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjaWYgRU5BQkxFKFZBUklBVElP
Tl9GT05UUykKKyAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZl
KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJl
dHVybiBmb250U3RyZXRjaElzV2l0aGluUmFuZ2UocGVyY2VudC0+dmFsdWU8ZmxvYXQ+KCkpID8g
cGVyY2VudCA6IG51bGxwdHI7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250U3Ry
ZXRjaFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1Zh
bHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3
b3JkVmFsdWUocmFuZ2UsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgYXV0byBmaXJzdFBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIFZh
bHVlUmFuZ2VOb25OZWdhdGl2ZSwgY3NzVmFsdWVQb29sKTsKKyAgICBpZiAoIWZpcnN0UGVyY2Vu
dCB8fCAhZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKGZpcnN0UGVyY2VudC0+dmFsdWU8ZmxvYXQ+
KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZpcnN0UGVyY2VudDsKKyAgICBhdXRvIHNlY29uZFBlcmNlbnQgPSBjb25z
dW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwgY3NzVmFs
dWVQb29sKTsKKyAgICBpZiAoIXNlY29uZFBlcmNlbnQgfHwgIWZvbnRTdHJldGNoSXNXaXRoaW5S
YW5nZShzZWNvbmRQZXJjZW50LT52YWx1ZTxmbG9hdD4oKSkgfHwgZmlyc3RQZXJjZW50LT5mbG9h
dFZhbHVlKCkgPiBzZWNvbmRQZXJjZW50LT5mbG9hdFZhbHVlKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOworICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0UGVyY2VudC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICByZXN1bHQtPmFwcGVuZChzZWNvbmRQZXJjZW50LnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1vdmUocmVzdWx0KSk7Cit9CisjZW5kaWYK
KworUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVl
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKworICAgIGRvIHsKKyAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBVbmljb2RlUmFuZ2VU
b2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIFVDaGFyMzIgc3Rh
cnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOworICAgICAgICBVQ2hhcjMyIGVuZCA9IHRv
a2VuLnVuaWNvZGVSYW5nZUVuZCgpOworICAgICAgICBpZiAoc3RhcnQgPiBlbmQpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVW5pY29kZVJh
bmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7CisgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOworCisgICAgcmV0dXJuIHZhbHVlczsKK30KKwor
c3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVUYWco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgLy8gRmVhdHVyZSB0YWcgbmFtZSBj
b25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCB0YWdOYW1lTGVuZ3RoID0gNDsKKworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgLy8gRmVhdHVyZSB0YWcg
bmFtZSBjb21lcyBmaXJzdAorICAgIGlmICh0b2tlbi50eXBlKCkgIT0gU3RyaW5nVG9rZW4pCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh0b2tlbi52YWx1ZSgpLmxlbmd0aCgpICE9
IHRhZ05hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIEZvbnRU
YWcgdGFnOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIDB4MjAtMHg3RSwg
Zm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5kIGluIHRoZSBPcGVuVHlwZSBzcGVj
aWZpY2F0aW9uLgorICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2tlbi52YWx1ZSgpW2ldOwor
ICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIgPiAweDdFKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHRhZ1tpXSA9IHRvQVNDSUlMb3dlcihjaGFy
YWN0ZXIpOworICAgIH0KKworICAgIGludCB0YWdWYWx1ZSA9IDE7CisgICAgaWYgKCFyYW5nZS5h
dEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikgeworICAgICAgICAv
LyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8aW50ZWdlcj4gfCBvbiB8IG9mZgor
ICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJSYXcocmFuZ2UsIDApKQor
ICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKKyAgICAgICAgZWxzZSBpZiAocmFuZ2Uu
cGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1
ZU9mZikKKyAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gQ1NTRm9udEZlYXR1cmVWYWx1ZTo6Y3Jl
YXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOworfQorCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVGb250RmVhdHVyZVNldHRpbmdzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NT
VmFsdWVOb3JtYWwpCisgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKHJhbmdl
LCBjc3NWYWx1ZVBvb2wpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNldHRpbmdzID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgIGRvIHsKKyAgICAgICAgUmVm
UHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRGZWF0dXJlVmFsdWUgPSBjb25zdW1lRm9udEZl
YXR1cmVUYWcocmFuZ2UpOworICAgICAgICBpZiAoIWZvbnRGZWF0dXJlVmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2V0dGluZ3MtPmFwcGVuZChmb250RmVhdHVy
ZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKKyAgICByZXR1cm4gc2V0dGluZ3M7Cit9CisKK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXkoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIHJl
dHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlPENTU1ZhbHVlQXV0bywgQ1NTVmFsdWVCbG9jaywg
Q1NTVmFsdWVTd2FwLCBDU1NWYWx1ZUZhbGxiYWNrLCBDU1NWYWx1ZU9wdGlvbmFsPihyYW5nZSwg
Y3NzVmFsdWVQb29sKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzV29ya2VyU2FmZQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMjA5MmEwMGU1NDQzZmExZTU1YzI4NjQwZGRhYjQyN2FiZjM0ZGI0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldv
cmtlclNhZmUuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTUGFyc2VyQ29udGV4dC5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDU1NGb250U3R5bGVWYWx1ZTsKK2NsYXNzIENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU7Citj
bGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsKK2NsYXNzIENTU1ZhbHVlUG9vbDsK
K2NsYXNzIENvbG9yOworCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzIHsKK3N0
cnVjdCBGb250UmF3OworfQorCitjbGFzcyBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUgewor
cHVibGljOgorICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYpOworICAg
IHN0YXRpYyBPcHRpb25hbDxDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IHBhcnNl
Rm9udChjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRNTFN0YW5kYXJkTW9kZSk7CisK
KyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVNyYyhjb25zdCBT
dHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VGb250RmFjZVN0eWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmLCBDU1NWYWx1ZVBvb2wmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZUZvbnRGYWNlV2VpZ2h0KGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBD
U1NWYWx1ZVBvb2wmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNl
U3RyZXRjaChjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQ1NTVmFsdWVQ
b29sJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZVVuaWNvZGVS
YW5nZShjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZUZlYXR1cmVTZXR0aW5ncyhjb25zdCBTdHJp
bmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQ1NTVmFsdWVQb29sJik7CisgICAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZURpc3BsYXkoY29uc3QgU3RyaW5nJiwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYsIENTU1ZhbHVlUG9vbCYpOworfTsKKworbmFtZXNwYWNlIENT
U1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmUgeworCitSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBjb25zdW1lRm9udEZhY2VTcmMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKK1JlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29s
Jik7CitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9udEZhY2VVbmljb2RlUmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVT
ZXR0aW5ncyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250RmFjZUZvbnREaXNwbGF5KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVm
UHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVSYW5nZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaFJh
bmdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKKyNlbmRpZgorI2lmICFF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
Rm9udFdlaWdodEFic29sdXRlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsK
KyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJT
YWZlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCBlNzUwYTYyN2FiNjBiYzkzZmRiNWY3NTg1OTgz
ZTZkYTU0OWViYjZkLi43ZWNjZDYxMDgwY2M4YmI4MDEyNDM0ZGVmYmU5NTBmMjAxNDgzMTQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJET01UaW1lci5o
IgpAQCAtMjMzLDYgKzIzNCwxMSBAQCBGb250Q2FjaGUmIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OmZvbnRDYWNoZSgpCiAgICAgcmV0dXJuIEZvbnRDYWNoZTo6c2luZ2xldG9uKCk7CiB9CiAKK0NT
U1ZhbHVlUG9vbCYgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3NzVmFsdWVQb29sKCkKK3sKKyAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsKK30KKwogc3RkOjp1bmlxdWVfcHRy
PEZvbnRMb2FkUmVxdWVzdD4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Zm9udExvYWRSZXF1ZXN0
KFN0cmluZyYsIGJvb2wsIGJvb2wsIExvYWRlZEZyb21PcGFxdWVTb3VyY2UpCiB7CiAgICAgcmV0
dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aAppbmRleCBjOTk4YjEyZjI5Y2M2OTY4YjljOTY2NWIwNjVmZDEyZDc4ZDU3YjgyLi4xMmJhNDY3
ZGYxYzIzN2ZiODIzYzlhZmU5MTQzM2UwOGQ5NWE4YTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ1NT
Rm9udFNlbGVjdG9yOworY2xhc3MgQ1NTVmFsdWVQb29sOwogY2xhc3MgRGF0YWJhc2VDb250ZXh0
OwogY2xhc3MgRXZlbnRRdWV1ZTsKIGNsYXNzIEV2ZW50TG9vcFRhc2tHcm91cDsKQEAgLTE2Nyw2
ICsxNjgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCk7
CiAgICAgdmlydHVhbCBDU1NGb250U2VsZWN0b3IqIGNzc0ZvbnRTZWxlY3RvcigpIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiAg
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udExvYWRSZXF1ZXN0PiBmb250TG9hZFJlcXVl
c3QoU3RyaW5nJiB1cmwsIGJvb2wgaXNTVkcsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNl
ckFnZW50U2hhZG93VHJlZSwgTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZSk7CiAgICAgdmlydHVhbCB2
b2lkIGJlZ2luTG9hZGluZ0ZvbnRTb29uKEZvbnRMb2FkUmVxdWVzdCYpIHsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAppbmRleCAxNDE1NTdmZGM5N2I0MjBiYzEyMzljMTMxNzc0ZjM0N2M2ZWNjMDRmLi5iZjI3
ZDkxNTc5ZTNlYjgzYTAwOTcxMWRhY2E5NjhhMDIwYjZjNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAg
LTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKIAog
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldEZvbnRXaXRob3V0VXBkYXRpbmdTdHlsZShjb25zdCBTdHJpbmcmIG5ld0ZvbnQKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saXN0cy53My5vcmcv
QXJjaGl2ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwvMDk0Ny5odG1sLAotICAgIC8vIHRo
ZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBwYXJzZUZv
bnRXb3JrZXJTYWZlKCkgaWdub3JlcyB0aGVzZS4KLSAgICBhdXRvIGZvbnRSYXcgPSBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCF1
c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpKSk7CisgICAgLy8gdGhlICJpbmhlcml0IiBh
bmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQuIENTU1Byb3BlcnR5UGFyc2VyV29y
a2VyU2FmZTo6cGFyc2VGb250KCkgaWdub3JlcyB0aGVzZS4KKyAgICBhdXRvIGZvbnRSYXcgPSBD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udChuZXdGb250LCBzdHJpY3RUb0NT
U1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKCkpKTsKICAgICBpZiAo
IWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzU3R5bGUuY3BwCmluZGV4IDkxOGU3YzA5ZjA2NWIxZmUxMGIxN2E5OTE0ZmM4MjVjNDU0
M2E0YTkuLmIwYzYyNTk0MmIyYjUwYjgxYjQ4NjBkNGNiZWI5ZThhMmNmODFmOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKQEAgLTM3LDEwICszNywxMiBA
QAogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMu
aCIKKwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQorI2luY2x1ZGUgIkNTU1Byb3BlcnR5
UGFyc2VyV29ya2VyU2FmZS5oIgogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5oIgogI2VuZGlm
Ci0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgpAQCAtNTcsNyArNTksNyBAQCBDb2xvciBwYXJzZUNv
bG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpCiB7
CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKGNhbnZhc0Jhc2UuaXNPZmZz
Y3JlZW5DYW52YXMoKSkKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VDb2xvcldvcmtl
clNhZmUoY29sb3JTdHJpbmcpOworICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlOjpwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGNhbnZhc0Jhc2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRl
eCA4YWU0OTg0MmI5MGE4YmZmYWQxNmQ3MzkzN2E1MjFkMzFhZmE1OTAyLi4wNGQ5OGI2OWQ2OTMy
NDk4NTUzMmY4OGFiY2JjYmJhZWEwZGVkZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIAog
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5
UGFyc2VyV29ya2VyU2FmZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuaCIKQEAgLTcxLDggKzcxLDggQEAgdm9pZCBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMv
cHVibGljLWh0bWwvMjAwOUp1bC8wOTQ3Lmh0bWwsCi0gICAgLy8gdGhlICJpbmhlcml0IiBhbmQg
ImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQuIHBhcnNlRm9udFdvcmtlclNhZmUoKSBp
Z25vcmVzIHRoZXNlLgotICAgIGF1dG8gZm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29y
a2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmls
aXR5UGFyc2VNb2RlKCkpKTsKKyAgICAvLyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFs
dWVzIG11c3QgYmUgaWdub3JlZC4gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZv
bnQoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1dG8gZm9udFJhdyA9IENTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZTo6cGFyc2VGb250KG5ld0ZvbnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghdXNl
c0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUoKSkpOwogICAgIGlmICghZm9udFJhdykKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgK
aW5kZXggMzdiZGYyOTE0N2UzNmU0NzYyYmJmYmE0ZTM4ZTY4N2YyZTg0MjI1ZS4uNjJkYTMxODM1
MzYxZDQwYzMwNjU4OWVmYWMwOGRmMTQzNDFmY2UwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNyZWF0ZUltYWdlQml0bWFwKEltYWdlQml0bWFwOjpTb3VyY2UmJiwgSW1hZ2VCaXRtYXBP
cHRpb25zJiYsIEltYWdlQml0bWFwOjpQcm9taXNlJiYpOwogICAgIHZvaWQgY3JlYXRlSW1hZ2VC
aXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYmLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQg
c2gsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmKTsKIAotICAg
IENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CisgICAgQ1NTVmFsdWVQb29sJiBjc3NWYWx1
ZVBvb2woKSBmaW5hbDsKICAgICBDU1NGb250U2VsZWN0b3IqIGNzc0ZvbnRTZWxlY3RvcigpIGZp
bmFsOwogICAgIEZvbnRDYWNoZSYgZm9udENhY2hlKCkgZmluYWw7CiAK
</data>
<flag name="commit-queue"
          id="446153"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426007</attachid>
            <date>2021-04-14 10:41:37 -0700</date>
            <delta_ts>2021-04-14 10:59:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224426-20210414184136.patch</filename>
            <type>text/plain</type>
            <size>83276</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlMTA0ZGU3MTkyMDhk
ZTJlODc1YTU2OGRhYTkzNjAzZTM3ZTViMi4uMTVlZWQwMWVmNDA4NzVhZjM0NmMxZTJjM2MwMDNh
MmRhMmQyYzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMS0wNC0xNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWFrZSBGb250RmFjZSBwYXJz
aW5nIHdvcmtlci1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIENTUyBGb250RmFjZSBwcm9wZXJ0eSBwYXJzaW5nIHNhZmUgdG8gZG8gaW4g
YSBXb3JrZXIuIEluc3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgcnVsZSBwZXIgcHJv
cGVydHkgYW5kIHVzaW5nIHRoZSBmdWxsIENTU1Byb3BlcnR5UGFyc2VyCisgICAgICAgIHBhdGgs
IGluc3RlYWQgZmFjdG9yIG91dCB0aGUgc3BlY2lmaWMsIG5lY2Vzc2FyeSBwcm9wZXJ0eSBwYXJz
ZXJzIGludG8gYQorICAgICAgICBuZXcgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlIGFuZCBt
YWtlIHN1cmUgdGhleSdyZSBzYWZlIHRvIHVzZSBpbiBhCisgICAgICAgIFdvcmtlciAobWFpbmx5
IGJ5IGFsbG93aW5nIGZvciBzcGVjaWZ5aW5nIHRoZSBDU1NWYWx1ZVBvb2wgc28gdGhhdAorICAg
ICAgICBtYWluLXRocmVhZCBzaW5nbGV0b25zIGRvbid0IGdldCB1c2VkKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OiBBZGQgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcC8uaAorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGNzcy9Gb250RmFj
ZS5jcHA6IENhbGwgc2V0dGVycyB3aXRoIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvCisg
ICAgICAgICAgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byA6OmNzc1ZhbHVlUG9vbCgpIGFuZCB1c2Ug
bmV3IHdvcmtlci1zYWZlCisgICAgICAgICAgcGFyc2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNl
dEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldFdlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RmFjZTo6c2V0U3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0VW5pY29k
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldERpc3BsYXkpOgorICAgICAgICAqIGNz
cy9Gb250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5pZGw6CisKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6IE1vdmUgV29ya2VyU2FmZSBwYXJzaW5nIGZ1bmN0aW9u
cyB0bworICAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZSBhbmQgcmVtb3ZlIG5v
dy11bm5lY2Vzc2FyeQorICAgICAgICAgIHBhcnNlRm9udEZhY2VEZXNjcmlwdG9yLgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyLmNwcDogTW92ZSBGb250RmFjZSBwcm9wZXJ0eSBwYXJzZXJzIHRvCisgICAg
ICAgICAgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlRm9udEZhY2VEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRm9udCk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOiBBZGQgV29ya2VyU2FmZSB2YXJpYW50cyBmb3IKKyAgICAgICAg
ICBzb21lIG9mIHRoZSBiYXNpYyBjb25zdW1lIGhlbHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1l
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxj
UGFyc2VyOjpjb25zdW1lSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2Vp
Z2h0TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2VyU2FmZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJ
ZGVudFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRm9udFJhdyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUlkZW50V29ya2VyU2FmZSk6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZh
Y2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6
OnBhcnNlRm9udEZhY2VXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlU3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRG
YWNlRmVhdHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZTo6cGFyc2VGb250RmFjZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlU3JjVVJJKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNv
bnN1bWVGb250RmFjZVNyY0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6
OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHlsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1
bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0cmV0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3Vt
ZUZvbnRTdHJldGNoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250
RmVhdHVyZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNX
b3JrZXJTYWZlOjpjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VGb250
RGlzcGxheSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNh
ZmUuaDogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6
IEFkZCA6OmNzc1ZhbHVlUG9vbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y3NzVmFsdWVQb29sKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDogVXBkYXRlIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0eWxlKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUNvbG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
Lmg6CisKIDIwMjEtMDQtMDcgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJlZmFjdG9yIGZvbnQgbG9hZGluZyB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBXb3JrZXIg
dG8gaW1wbGVtZW50IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmZDM4ZGFhOTViNDZjMTE5NTE2NDY0
ZjViOWVjNDVjMTkwOGMyNmUuLmRiYzUwODljYThhNGI4NWVhNzNiMDExYThmMmU2YzlmNDhjZDZj
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC04MzcsNiArODM3LDcgQEAgY3NzL3BhcnNlci9DU1NQYXJz
ZXJUb2tlbi5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAKIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAKK2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAogY3Nz
L3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTU3VwcG9ydHNQYXJz
ZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGJhOGNhMTk1NjU4MThh
NzQxOGZhMGRkMjc4MDgwZGUxYzI1YmQ4Li40ZjNlYzE0NjBiOGE2YjEzNWJjZDk1ZGY4YmE5Y2I0
MWNhZWZmZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yOTM2LDYgKzI5MzYsNyBAQAogCQk5NDZEMzc0MDFENkNFM0MyMDA3
NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk0NkQzNzNEMUQ2Q0UzMUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tl
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk0
NkQzNzQ0MUQ2Q0Y3QjIwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0
RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAwNzcwODRG
IC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJz
ZXIuaCAqLzsgfTsKKwkJOTQ2RDM3NDYxRDZEMDFENTAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTQ2RDM3NDIxRDZEMDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2Vy
U2FmZS5oICovOyB9OwogCQk5NDZEMzc0QTFENkQwNjI4MDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0ODFE
NkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmggKi87IH07CiAJCTk0NkQzNzRFMUQ2RDA4QUEw
MDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFy
c2VyVG9rZW5SYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk0Nzk0OTI1MUUwMzA4QUYwMDAxOEQ4NSAvKiBEZXByZWNhdGVkQ1NTT01WYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ3OTQ5
MjMxRTAyRjkwQjAwMDE4RDg1IC8qIERlcHJlY2F0ZWRDU1NPTVZhbHVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzk5LDYgKzExODAwLDgg
QEAKIAkJOTQ2RDM3M0UxRDZDRTMxQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlclRva2VuLmNwcDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk0NkQzNzQxMUQ2Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlci5jcHA7
IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUHJvcGVydHlQYXJzZXIuaDsg
cGF0aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1Byb3Bl
cnR5UGFyc2VyV29ya2VyU2FmZS5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3NDIxRDZE
MDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgcGF0
aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTQ2RDM3NDMxRDZDRjc4ODAwNzcwODRGIC8qIENTU1BhcnNlcklkaW9t
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuaDsg
cGF0aCA9IHBhcnNlci9DU1NQYXJzZXJJZGlvbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTQ2RDM3NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NNYXJrdXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NDZEMzc0ODFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU01hcmt1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjQwMDcsNiArMjQwMTAsOCBAQAogCQkJCTk0NkQzNzQyMUQ2
Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5oICovLAogCQkJCTk0OUM3NzAyMUQ2
RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwICovLAogCQkJCTk0
OUM3NzAzMUQ2RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCAqLywK
KwkJCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlLmNwcCAqLywKKwkJCQk5NDZEMzc0MjFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQ
YXJzZXJXb3JrZXJTYWZlLmggKi8sCiAJCQkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENT
U1NlbGVjdG9yUGFyc2VyLmNwcCAqLywKIAkJCQk5NERFNUM4QzFEODA4MDE1MDAxNjRGMkEgLyog
Q1NTU2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NERFNUM4RjFEODMwMENCMDAxNjRGMkEgLyog
Q1NTU3VwcG9ydHNQYXJzZXIuY3BwICovLApAQCAtMzE5OTYsNiArMzIwMDEsNyBAQAogCQkJCTY1
NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTk0OUM3NzA1MUQ2RTM5RUEwMEMwREU0RiAvKiBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzQ2MUQ2RDAxRDUwMDc3
MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgyRTNEOERGMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNUExMkUwMERDMDQxNDgwMEM5QUZBRCAvKiBDU1NSZWZsZWN0VmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCREE0MDAxMjE1MUI2RjUwMEZENjYwNCAvKiBDU1NS
ZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5jcHAKaW5kZXggMzVmZmMwMzgyYTE1YTIwZmE0ZWU4NzFjODYzOGVhNjE2OGUzYmUxYi4uOGMz
ODA2OGEyMDZmMTdmN2RkNzRiMGUxNmEyN2M5NzdmN2NjOWY5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVk
ZSAiQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTc2LDExICs3NywxMSBAQCBSZWY8Rm9udEZhY2U+
IEZvbnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGZhbWls
eSwgU291cmNlJgogCiAgICAgYXV0byBzb3VyY2VDb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpzd2l0
Y2hPbihzb3VyY2UsCiAgICAgICAgIFsmXSAoU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9y
PHZvaWQ+IHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmco
c3RyaW5nLCBDU1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4odmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwotICAgICAgICAgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5iYWNr
aW5nKCksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgJmRvY3VtZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTcmMoc3RyaW5nLCBDU1NQ
YXJzZXJDb250ZXh0KGRvY3VtZW50KSkpIHsKKyAgICAgICAgICAgICAgICBDU1NGb250RmFjZTo6
YXBwZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgKnZhbHVlLCAmZG9jdW1lbnQsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0sCiAgICAgICAg
IFsmXSAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mIGFycmF5QnVmZmVyVmlldykgLT4gRXhjZXB0
aW9uT3I8dm9pZD4gewogICAgICAgICAgICAgZGF0YVJlcXVpcmVzQXN5bmNocm9ub3VzTG9hZGlu
ZyA9IHBvcHVsYXRlRm9udEZhY2VXaXRoQXJyYXlCdWZmZXIocmVzdWx0LT5iYWNraW5nKCksIGFy
cmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTEwMCwxNyArMTAxLDE3IEBAIFJl
ZjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBTb3VyY2UmCiAgICAgfQogCiAgICAgLy8gVGhlc2UgdGVybmFyaWVzIG1h
dGNoIHRoZSBkZWZhdWx0IHN0cmluZ3MgaW5zaWRlIHRoZSBGb250RmFjZURlc2NyaXB0b3JzIGRp
Y3Rpb25hcnkgaW5zaWRlIEZvbnRGYWNlLmlkbC4KLSAgICBhdXRvIHNldFN0eWxlUmVzdWx0ID0g
cmVzdWx0LT5zZXRTdHlsZShkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuc3R5bGUpOworICAgIGF1dG8gc2V0U3R5bGVSZXN1bHQgPSByZXN1bHQt
PnNldFN0eWxlKGRvY3VtZW50LCBkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFs
Il9zIDogZGVzY3JpcHRvcnMuc3R5bGUpOwogICAgIGlmIChzZXRTdHlsZVJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICByZXN1bHQtPnNldEVycm9yU3RhdGUoKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNl
dFdlaWdodChkZXNjcmlwdG9ycy53ZWlnaHQuaXNFbXB0eSgpID8gIm5vcm1hbCJfcyA6IGRlc2Ny
aXB0b3JzLndlaWdodCk7CisgICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNldFdl
aWdodChkb2N1bWVudCwgZGVzY3JpcHRvcnMud2VpZ2h0LmlzRW1wdHkoKSA/ICJub3JtYWwiX3Mg
OiBkZXNjcmlwdG9ycy53ZWlnaHQpOwogICAgIGlmIChzZXRXZWlnaHRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0U3RyZXRjaFJlc3VsdCA9IHJlc3VsdC0+c2V0
U3RyZXRjaChkZXNjcmlwdG9ycy5zdHJldGNoLmlzRW1wdHkoKSA/ICJub3JtYWwiX3MgOiBkZXNj
cmlwdG9ycy5zdHJldGNoKTsKKyAgICBhdXRvIHNldFN0cmV0Y2hSZXN1bHQgPSByZXN1bHQtPnNl
dFN0cmV0Y2goZG9jdW1lbnQsIGRlc2NyaXB0b3JzLnN0cmV0Y2guaXNFbXB0eSgpID8gIm5vcm1h
bCJfcyA6IGRlc2NyaXB0b3JzLnN0cmV0Y2gpOwogICAgIGlmIChzZXRTdHJldGNoUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0ZSgpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTIwLDEyICsxMjEsMTIgQEAgUmVmPEZvbnRGYWNlPiBGb250
RmFjZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNv
dXJjZSYKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0
LT5zZXRGZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzLmlzRW1wdHko
KSA/ICJub3JtYWwiX3MgOiBkZXNjcmlwdG9ycy5mZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8g
c2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0LT5zZXRGZWF0dXJlU2V0dGluZ3MoZG9j
dW1lbnQsIGRlc2NyaXB0b3JzLmZlYXR1cmVTZXR0aW5ncy5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzKTsKICAgICBpZiAoc2V0RmVhdHVyZVNldHRp
bmdzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0
ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBhdXRvIHNldERpc3BsYXlS
ZXN1bHQgPSByZXN1bHQtPnNldERpc3BsYXkoZGVzY3JpcHRvcnMuZGlzcGxheS5pc0VtcHR5KCkg
PyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOworICAgIGF1dG8gc2V0RGlzcGxheVJl
c3VsdCA9IHJlc3VsdC0+c2V0RGlzcGxheShkb2N1bWVudCwgZGVzY3JpcHRvcnMuZGlzcGxheS5p
c0VtcHR5KCkgPyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOwogICAgIGlmIChzZXRE
aXNwbGF5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JT
dGF0ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTY4LDYxICsxNjksNTUgQEAgRm9u
dEZhY2U6On5Gb250RmFjZSgpCiAgICAgbV9iYWNraW5nLT5yZW1vdmVDbGllbnQoKnRoaXMpOwog
fQogCi1SZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQotewotICAgIC8vIEZJWE1FOiBTaG91
bGQgdXNlIHRoZSBEb2N1bWVudCB0byBnZXQgdGhlIHJpZ2h0IHBhcnNpbmcgbW9kZS4KLSAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihwcm9wZXJ0eUlELCBzdHJp
bmcsIEhUTUxTdGFuZGFyZE1vZGUpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6
c2V0RmFtaWx5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpCitFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmFtaWx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIGlmIChmYW1pbHkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIFN0
cmluZyBmYW1pbHlOYW1lVG9Vc2UgPSBmYW1pbHk7Ci0gICAgaWYgKGZhbWlseU5hbWVUb1VzZS5j
b250YWlucygnXCcnKSAmJiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRTdHJpcFF1b3RhdGlvbk1h
cmtJbkZvbnRGYWNlU2V0RmFtaWx5KCkpCisgICAgaWYgKGZhbWlseU5hbWVUb1VzZS5jb250YWlu
cygnXCcnKSAmJiBpczxEb2N1bWVudD4oY29udGV4dCkgJiYgZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLnF1aXJrcygpLnNob3VsZFN0cmlwUXVvdGF0aW9uTWFya0luRm9udEZhY2VTZXRGYW1p
bHkoKSkKICAgICAgICAgZmFtaWx5TmFtZVRvVXNlID0gZmFtaWx5LnJlbW92ZUNoYXJhY3RlcnMo
W10oYXV0byBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnOyB9KTsKIAogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2Mzgx
IERvbid0IHVzZSBhIGxpc3QgaGVyZS4KICAgICAvLyBTZWUgY29uc3VtZUZvbnRGYW1pbHlEZXNj
cmlwdG9yKCkgaW4gQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGZvciB3aHkgd2UncmUgdXNpbmcgaXQu
CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwot
ICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShmYW1pbHlOYW1lVG9Vc2UpKTsKKyAgICBsaXN0LT5hcHBlbmQoY29udGV4dC5jc3NW
YWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZVRvVXNlKSk7CiAgICAg
Ym9vbCBzdWNjZXNzID0gbV9iYWNraW5nLT5zZXRGYW1pbGllcyhsaXN0KTsKICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJl
dHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHlsZShjb25z
dCBTdHJpbmcmIHN0eWxlKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFN0eWxlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3R5bGUpCiB7CiAg
ICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVN0eWxlKHN0eWxlLCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0eWxl
KCp2YWx1ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0
V2VpZ2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0KQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldFdlaWdodChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHdlaWdodCkKIHsKICAgICBpZiAod2VpZ2h0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3Ry
aW5nKHdlaWdodCwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSkgeworICAgIGlmIChhdXRvIHZhbHVl
ID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlV2VpZ2h0KHdlaWdo
dCwgSFRNTFN0YW5kYXJkTW9kZSwgY29udGV4dC5jc3NWYWx1ZVBvb2woKSkpIHsKICAgICAgICAg
bV9iYWNraW5nLT5zZXRXZWlnaHQoKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKIHsKICAgICBpZiAoc3RyZXRjaC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAg
aWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhzdHJldGNoLCBDU1NQcm9wZXJ0eUZvbnRTdHJl
dGNoKSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
OjpwYXJzZUZvbnRGYWNlU3RyZXRjaChzdHJldGNoLCBIVE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0
LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0cmV0Y2goKnZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yMzUsMzEgKzIzMCwzMSBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgdW5p
Y29kZVJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAog
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VTdHJp
bmcodW5pY29kZVJhbmdlLCBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSkpCisgICAgaWYgKGF1dG8g
dmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2Rl
UmFuZ2UodW5pY29kZVJhbmdlLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgc3VjY2VzcyA9
IG1fYmFja2luZy0+c2V0VW5pY29kZVJhbmdlKCp2YWx1ZSk7CiAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICByZXR1cm4geyB9
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmVhdHVyZVNldHRpbmdzKGNv
bnN0IFN0cmluZyYgZmVhdHVyZVNldHRpbmdzKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldEZlYXR1cmVTZXR0aW5ncyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIGZlYXR1cmVTZXR0aW5ncykKIHsKICAgICBpZiAoZmVhdHVyZVNldHRpbmdzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAg
ICBhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdzLCBDU1NQcm9wZXJ0eUZv
bnRGZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldv
cmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoZmVhdHVyZVNldHRpbmdzLCBI
VE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBtX2JhY2tp
bmctPnNldEZlYXR1cmVTZXR0aW5ncygqdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KGNvbnN0IFN0cmluZyYgZGlzcGxh
eSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGlzcGxheSkKIHsKICAgICBpZiAoZGlz
cGxheS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCi0gICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhkaXNwbGF5LCBDU1NQcm9wZXJ0
eUZvbnREaXNwbGF5KSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlRGlzcGxheShkaXNwbGF5LCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldExvYWRp
bmdCZWhhdmlvcigqdmFsdWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmgKaW5kZXggZmMxN2VhNjFkNmY5MzRhZWVlYWVlM2E2MjRkZWNkMWQ0N2NlMmM2ZC4u
MTQ5ZTBhM2E1YTA0Mjc4M2IyYjFkMTQ2N2QxMTE1MWVmODA5ZjQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmgKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGb250RmFj
ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDU1NGb250RmFjZSYpOwogICAgIHZp
cnR1YWwgfkZvbnRGYWNlKCk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoRG9j
dW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZShj
b25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRXZWlnaHQoY29uc3QgU3Ry
aW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RyZXRjaChjb25zdCBTdHJpbmcmKTsK
KyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRXZWlnaHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFN0cmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFVuaWNvZGVSYW5nZShjb25zdCBT
dHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RGlzcGxheShjb25zdCBTdHJpbmcm
KTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldERp
c3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3Ry
aW5nIGZhbWlseSgpIGNvbnN0OwogICAgIFN0cmluZyBzdHlsZSgpIGNvbnN0OwpAQCAtODUsOCAr
ODUsNiBAQCBwdWJsaWM6CiAKICAgICBDU1NGb250RmFjZSYgYmFja2luZygpIHsgcmV0dXJuIG1f
YmFja2luZzsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgQ1NTUHJvcGVydHlJRCk7Ci0KICAgICB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQo
Q1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6
U3RhdHVzIG5ld1N0YXRlKSBmaW5hbDsKIAogICAgIHZvaWQgcmVmKCkgZmluYWwgeyBSZWZDb3Vu
dGVkOjpyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5pZGwKaW5kZXggYTkwMmNiMDFkOTEzMDJj
ZGY4OWQ3N2QwMjk5Y2NiYWU1ZjVmMjVjMC4uMzc3ZmUxZjVlNzQ4NGQwN2M3MmM4Y2Q0MGNiMGQ5
YWM2MTNlNzk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaWRsCkBAIC00NywxMyArNDcsMTMgQEAg
ZGljdGlvbmFyeSBGb250RmFjZURlc2NyaXB0b3JzIHsKIF0gaW50ZXJmYWNlIEZvbnRGYWNlIHsK
ICAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKERPTVN0cmluZyBmYW1pbHksIChE
T01TdHJpbmcgb3IgQmluYXJ5RGF0YSkgc291cmNlLCBvcHRpb25hbCBGb250RmFjZURlc2NyaXB0
b3JzIGRlc2NyaXB0b3JzKTsKIAotICAgIFtTZXR0ZXJDYWxsV2l0aD1Eb2N1bWVudF0gYXR0cmli
dXRlIERPTVN0cmluZyBmYW1pbHk7Ci0gICAgYXR0cmlidXRlIERPTVN0cmluZyBzdHlsZTsKLSAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0
cmV0Y2g7CisgICAgW1NldHRlckNhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJp
YnV0ZSBET01TdHJpbmcgZmFtaWx5OworICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0eWxlOworICAgIFtTZXR0ZXJDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKKyAg
ICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gYXR0cmlidXRlIERPTVN0
cmluZyBzdHJldGNoOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdW5pY29kZVJhbmdlOwotICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgZmVhdHVyZVNldHRpbmdzOwotICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgZGlzcGxheTsKKyAgICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gYXR0cmlidXRlIERPTVN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CisgICAgW1NldHRlckNhbGxX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZGlzcGxheTsK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGb250RmFjZUxvYWRTdGF0dXMgc3RhdHVzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggNzY0OGY1MDRhNWQ3YTMw
ODAzOTU1NjZkYWIzOGU0M2ZiMDg4MWI4My4uOWRmYzNjNzBmYWRlY2EzY2RmYjBiMGNkNjM3MThl
NDJhMjQ3ZDY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAt
MTA4LDE4ICsxMDgsNiBAQCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigp
OwogfQogCi1Db2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIGlmIChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpw
YXJzZVNpbXBsZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiAqY29sb3I7Ci0KLSAgICBD
U1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFj
ZSgpOwotCi0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9y
V29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29udGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Ci19
Ci0KIENvbG9yIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3IHN0cmluZykK
IHsKICAgICBhdXRvIGtleXdvcmQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwpAQCAtMTM4
LDE1ICsxMjYsNiBAQCBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhl
eENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6
OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsKIH0KIAotT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpGb250UmF3PiBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBDU1NUb2tl
bml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0
b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwot
Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJT
YWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLX0KLQogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKQEAgLTI2MSwxMyArMjQwLDQgQEAgVmVjdG9yPGRvdWJsZT4gQ1NT
UGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAg
IHJldHVybiBDU1NQYXJzZXJJbXBsOjpwYXJzZUtleWZyYW1lS2V5TGlzdChzZWxlY3Rvcik7CiB9
CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gbWFr
ZVN0cmluZygiQGZvbnQtZmFjZSB7ICIsIGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlE
KSwgIiA6ICIsIHByb3BlcnR5VmFsdWUsICI7IH0iKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gcnVsZSA9IHBhcnNlUnVsZShjb250ZXh0LCBudWxscHRyLCBzdHJpbmcpOwotICAgIGlmICgh
cnVsZSB8fCAhcnVsZS0+aXNGb250RmFjZVJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSkucHJv
cGVydGllcygpLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci19Ci0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGYyMjFkMTgxMWE5NGQyNzQzOGIxYmZi
NzI2NTVjY2Q1NDBjYmYxMDUuLjYwZjE0ZDc4YzUxMTdlZTEyMTU2ZWMzZWY0NDY2NDFjMWNmOWMy
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzQsNiArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3Mg
Q1NTU2VsZWN0b3JMaXN0OworY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29s
OwogY2xhc3MgQ29sb3I7CiBjbGFzcyBFbGVtZW50OwpAQCAtNzksOCArODAsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJv
cGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbVN0cmluZyYgcHJv
cGVydHlOYW1lLCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOwogICAgIAotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRm9udEZh
Y2VEZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKLQogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFs
dWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
PSBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBw
YXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBTdHJpbmcmKTsK
QEAgLTkxLDEzICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZh
bHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYs
IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0
aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U1JHQkE8dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0
aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAK
LSAgICBzdGF0aWMgT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBw
YXJzZUZvbnRXb3JrZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3Rh
bmRhcmRNb2RlKTsKLQogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGlt
cG9ydGFudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAKaW5kZXggMmY5ZmFjYTEwM2Q2MGY1NjRkMzNkMWQ0MWRhMmM1OGZiOTIyYjJhNi4u
ODMwMTE5MDEzMGI4NDcyMWIwZTI4ZWM2MDE0YWFmZGJlNjM1ZmZmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTE5MCw2ICsxOTAs
NyBAQCBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoU3RyaW5nVmlldyBzdHJpbmcpCiB9CiAg
ICAgCiB1c2luZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFt
ZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU7CiAKIENTU1Byb3BlcnR5
UGFyc2VyOjpDU1NQcm9wZXJ0eVBhcnNlcihjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAy
NTY+KiBwYXJzZWRQcm9wZXJ0aWVzLCBib29sIGNvbnN1bWVXaGl0ZXNwYWNlKQogICAgIDogbV9y
YW5nZShyYW5nZSkKQEAgLTQyNiw1NCArNDI3LDYgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZVdpbGxDaGFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJu
IHZhbHVlczsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1l
Rm9udEZlYXR1cmVUYWcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gRmVh
dHVyZSB0YWcgbmFtZSBjb25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gNDsKLQotICAgIGNvbnN0IENTU1BhcnNl
clRva2VuJiB0b2tlbiA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAg
Ly8gRmVhdHVyZSB0YWcgbmFtZSBjb21lcyBmaXJzdAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0g
U3RyaW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0b2tlbi52YWx1
ZSgpLmxlbmd0aCgpICE9IHRhZ05hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIEZvbnRUYWcgdGFnOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJz
IHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5kIGluIHRo
ZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2tl
bi52YWx1ZSgpW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIg
PiAweDdFKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHRhZ1tpXSA9IHRv
QVNDSUlMb3dlcihjaGFyYWN0ZXIpOwotICAgIH0KLQotICAgIGludCB0YWdWYWx1ZSA9IDE7Ci0g
ICAgaWYgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29tbWFUb2tl
bikgewotICAgICAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8aW50ZWdl
cj4gfCBvbiB8IG9mZgotICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJS
YXcocmFuZ2UsIDApKQotICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKLSAgICAgICAg
ZWxzZSBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5wZWVrKCku
aWQoKSA9PSBDU1NWYWx1ZU9mZikKLSAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTRm9udEZl
YXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOwotfQotCi1zdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVO
b3JtYWwpCi0gICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IHNldHRpbmdzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwotICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRG
ZWF0dXJlVmFsdWUgPSBjb25zdW1lRm9udEZlYXR1cmVUYWcocmFuZ2UpOwotICAgICAgICBpZiAo
IWZvbnRGZWF0dXJlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
c2V0dGluZ3MtPmFwcGVuZChmb250RmVhdHVyZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
IH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKLSAgICBy
ZXR1cm4gc2V0dGluZ3M7Ci19Ci0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYXRpb25UYWcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7CkBAIC04NTAsMTQwICs4MDMsNiBAQCBzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFs
LCBDU1NWYWx1ZUJvbGQ+KHJhbmdlKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMp
Ci1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgYXV0byBmaXJzdE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
KHJhbmdlKTsKLSAgICBpZiAoIWZpcnN0TnVtYmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAocmFuZ2UuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyOwotICAg
IGF1dG8gc2Vjb25kTnVtYmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotICAg
IGlmICghc2Vjb25kTnVtYmVyIHx8IGZpcnN0TnVtYmVyLT5mbG9hdFZhbHVlKCkgPiBzZWNvbmRO
dW1iZXItPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBy
ZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmQoZmlyc3ROdW1iZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmVzdWx0LT5hcHBl
bmQoc2Vjb25kTnVtYmVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBSZWZQdHI8Q1NT
VmFsdWU+KFdURk1vdmUocmVzdWx0KSk7Ci19Ci0jZWxzZQotc3RhdGljIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEFic29s
dXRlS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29u
c3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1z
dGF0aWMgYm9vbCBmb250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmxvYXQgc3RyZXRjaCkKLXsKLSAg
ICByZXR1cm4gc3RyZXRjaCA+PSAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFs
dWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi0gICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1
ZVJhbmdlTm9uTmVnYXRpdmUpKQotICAgICAgICByZXR1cm4gZm9udFN0cmV0Y2hJc1dpdGhpblJh
bmdlKHBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSA/IHBlcmNlbnQgOiBudWxscHRyOwotI2VuZGlm
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQot
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRT
dHJldGNoS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBh
dXRvIGZpcnN0UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUpOwotICAgIGlmICghZmlyc3RQZXJjZW50IHx8ICFmb250U3RyZXRjaElzV2l0aGluUmFu
Z2UoZmlyc3RQZXJjZW50LT52YWx1ZTxmbG9hdD4oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmIChyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RQZXJjZW50Owot
ICAgIGF1dG8gc2Vjb25kUGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUpOwotICAgIGlmICghc2Vjb25kUGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dp
dGhpblJhbmdlKHNlY29uZFBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSB8fCBmaXJzdFBlcmNlbnQt
PmZsb2F0VmFsdWUoKSA+IHNlY29uZFBlcmNlbnQtPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RQZXJjZW50LnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZFBlcmNlbnQucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgcmV0dXJuIFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1bHQpKTsKLX0KLSNl
bmRpZgotCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxl
S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBj
b25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlx
dWU+KHJhbmdlKTsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3Vt
ZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICAgICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5n
bGUpIHsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1
ZSksCi0gICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShyZXN1bHQtPmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkp
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi1zdGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250
U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGF1dG8ga2V5d29yZCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3Jk
VmFsdWUocmFuZ2UpOwotICAgIGlmICgha2V5d29yZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoa2V5d29yZC0+dmFsdWVJRCgpICE9IENTU1ZhbHVlT2JsaXF1ZSB8fCByYW5n
ZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRl
KGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgbm90IGFsbG93IHRoZSB1bml0bGVzcyB6ZXJvLgotICAgIGlmIChhdXRvIGZpcnN0
QW5nbGUgPSBjb25zdW1lQW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgewotICAgICAgICBhdXRvIGZpcnN0
QW5nbGVJbkRlZ3JlZXMgPSBmaXJzdEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NT
X0RFRyk7Ci0gICAgICAgIGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZmlyc3RBbmdsZUlu
RGVncmVlcykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKHJhbmdl
LmF0RW5kKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmds
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5n
ZVZhbHVlOjpjcmVhdGUoa2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5v
dCBhbGxvdyB0aGUgdW5pdGxlc3MgemVyby4KLSAgICAgICAgYXV0byBzZWNvbmRBbmdsZSA9IGNv
bnN1bWVBbmdsZShyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBV
bml0bGVzc1plcm9RdWlyazo6QWxsb3cpOwotICAgICAgICBpZiAoIXNlY29uZEFuZ2xlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc2Vjb25kQW5nbGVJbkRlZ3Jl
ZXMgPSBzZWNvbmRBbmdsZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOwotICAg
ICAgICBpZiAoIWlzRm9udFN0eWxlQW5nbGVJblJhbmdlKHNlY29uZEFuZ2xlSW5EZWdyZWVzKSB8
fCBmaXJzdEFuZ2xlSW5EZWdyZWVzID4gc2Vjb25kQW5nbGVJbkRlZ3JlZXMpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZEFuZ2xlLnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6
Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAg
ICBhdXRvIGZhbWlseU5hbWUgPSBjb25zdW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CkBAIC00MDc4
LDE1ICszODk3LDE1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
U2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFuOgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRWYXJp
YW50RWFzdEFzaWFuKG1fcmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzOgotICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRGZWF0dXJlU2V0dGluZ3MobV9yYW5n
ZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhtX3JhbmdlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWls
eToKICAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250RmFtaWx5KG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250V2VpZ2h0OgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRXZWlnaHQo
bV9yYW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgICAgICByZXR1
cm4gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UpOworICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgICAgIHJldHVybiBjb25zdW1lRm9udFN0eWxlKG1f
cmFuZ2UsIG1fY29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250U3R5bGUo
bV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3ludGhlc2lzOgogICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTeW50aGVzaXMobV9yYW5nZSk7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTQ2
MTUsOTAgKzQ0MzQsNiBAQCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVy
dHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRGYWNlVW5p
Y29kZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
LQotICAgIGRvIHsKLSAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAh
PSBVbmljb2RlUmFuZ2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIFVDaGFyMzIgc3RhcnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOwotICAgICAgICBV
Q2hhcjMyIGVuZCA9IHRva2VuLnVuaWNvZGVSYW5nZUVuZCgpOwotICAgICAgICBpZiAoc3RhcnQg
PiBlbmQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWVzLT5hcHBl
bmQoQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7Ci0gICAgfSB3aGls
ZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwotCi0gICAgcmV0dXJu
IHZhbHVlczsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRGYWNlRm9udERpc3BsYXkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0
dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZUF1dG8sIENTU1ZhbHVlQmxvY2ssIENTU1ZhbHVlU3dh
cCwgQ1NTVmFsdWVGYWxsYmFjaywgQ1NTVmFsdWVPcHRpb25hbD4ocmFuZ2UpOwotfQotCi1zdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZhY2VTcmNVUkkoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgU3Ry
aW5nIHVybCA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvU3RyaW5nKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8
Q1NTRm9udEZhY2VTcmNWYWx1ZT4gdXJpVmFsdWUgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVh
dGUoY29udGV4dC5jb21wbGV0ZVVSTCh1cmwpLnN0cmluZygpLCBjb250ZXh0LmlzQ29udGVudE9w
YXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3Vy
Y2U6Ok5vKTsKLQotICAgIGlmIChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpICE9IENTU1ZhbHVl
Rm9ybWF0KQotICAgICAgICByZXR1cm4gdXJpVmFsdWU7Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250cyBzYXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMg
YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFj
ZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBmb3JtYXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9y
IG5vdy4KLSAgICAvLyBGSVhNRTogV2UncmUgYWxsb3dpbmcgdGhlIGZvcm1hdCB0byBiZSBhbiBp
ZGVudGlmaWVyIGFzIHdlbGwgYXMgYSBzdHJpbmcsIGJlY2F1c2UgdGhlIG9sZAotICAgIC8vIHBh
cnNlciBkaWQuIEl0J3Mgbm90IGNsZWFyIGlmIHdlIG5lZWQgdG8gY29udGludWUgdG8gc3VwcG9y
dCB0aGlzIGJlaGF2aW9yLCBidXQgd2UgaGF2ZSBsb3RzIG9mCi0gICAgLy8gbGF5b3V0IHRlc3Rz
IHRoYXQgcmVseSBvbiBpdC4KLSAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2UpOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhcmcgPSBhcmdzLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKChhcmcudHlwZSgpICE9IFN0cmlu
Z1Rva2VuICYmIGFyZy50eXBlKCkgIT0gSWRlbnRUb2tlbikgfHwgIWFyZ3MuYXRFbmQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgdXJpVmFsdWUtPnNldEZvcm1hdChhcmcudmFsdWUo
KS50b1N0cmluZygpKTsKLSAgICByZXR1cm4gdXJpVmFsdWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250RmFjZVNyY0xvY2FsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQotewotICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihy
YW5nZSk7Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgewotICAg
ICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOwotICAgICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9j
YWwoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChhcmdzLnBlZWsoKS50
eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNvbmNh
dGVuYXRlRmFtaWx5TmFtZShhcmdzKTsKLSAgICAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFs
dWU6OmNyZWF0ZUxvY2FsKGZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKLSAgICAgICAgaWYgKHRva2VuLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2Fs
KQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5n
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlU3JjVVJJKHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLX0KLQogYm9vbCBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3IoQ1NTUHJvcGVydHlJRCBwcm9w
SWQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTQ3MTMsMjcgKzQ0
NDgsMjcgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3Io
Q1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlVW5pY29kZVJhbmdlKG1fcmFuZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5Rm9udERpc3BsYXk6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNl
Rm9udERpc3BsYXkobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlRm9udERpc3BsYXkobV9yYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgogI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZVJhbmdlKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGVSYW5nZShtX3JhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
ICNlbHNlCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZSht
X3JhbmdlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2Vsc2UKLSAgICAgICAgcGFy
c2VkVmFsdWUgPSBjb25zdW1lRm9udFN0cmV0Y2gobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5
bGU6CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBj
b25zdW1lRm9udFN0eWxlUmFuZ2UobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGVSYW5nZShtX3JhbmdlLCBtX2NvbnRleHQubW9k
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAjZWxzZQotICAgICAgICBwYXJzZWRWYWx1
ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6CkBAIC00NzU3LDcgKzQ0OTIsNyBAQCBib29s
IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlE
IHByb3BJZCkKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CiAgICAgICAgIHJldHVy
biBjb25zdW1lRm9udFZhcmlhbnRTaG9ydGhhbmQoZmFsc2UpOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250RmVhdHVyZVNldHRpbmdzOgotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVG
b250RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQ4MTQsNyAr
NDU0OSw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJvb2wgaW1wb3J0
YW50KQogICAgIHdoaWxlICghbV9yYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIENTU1ZhbHVlSUQg
aWQgPSBtX3JhbmdlLnBlZWsoKS5pZCgpOwogICAgICAgICBpZiAoIWZvbnRTdHlsZSkgewotICAg
ICAgICAgICAgZm9udFN0eWxlID0gY29uc3VtZUZvbnRTdHlsZShtX3JhbmdlLCBtX2NvbnRleHQu
bW9kZSk7CisgICAgICAgICAgICBmb250U3R5bGUgPSBjb25zdW1lRm9udFN0eWxlKG1fcmFuZ2Us
IG1fY29udGV4dC5tb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICAgICAgICAg
IGlmIChmb250U3R5bGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAg
LTQ4MzEsNyArNDU2Niw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJv
b2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghZm9udFN0cmV0Y2gpIHsKLSAgICAgICAgICAgIGZvbnRTdHJldGNoID0gY29uc3Vt
ZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKG1fcmFuZ2UpOworICAgICAgICAgICAgZm9udFN0cmV0
Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUobV9yYW5nZSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CiAgICAgICAgICAgICBpZiAoZm9udFN0cmV0Y2gpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCAwYTBiYTRiOTE0MjRhMWFkYzBhYmIxYTM2Yjc5OWM2
MmU5ZjFlMjIwLi43MWExYWQ4YjBiNmMwZTU2M2NiYWI1ZDZlYjFhYThhZmM4MTJlMDZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0yNCw2
ICsyNCw3IEBACiAKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0zMSw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsK
IGNsYXNzIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCBkYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVk
MGU5Li5lYjdlZmJjZmNjOTIzNTFhNTVlNWM5ZWEzNmExZmRhZWViNTk5ZDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC05Nyw5ICs5NywxMCBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVt
YmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZwogLy8gRklYTUU6
IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlv
blZhbHVlLmNwcC4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IENh
bGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFs
bCkKKyAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2VBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSkKICAgICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAg
ICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV9jc3NWYWx1ZVBvb2woY3NzVmFsdWVQ
b29sKQogICAgIHsKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CkBA
IC0xMTQsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3Jhbmdl
OwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShX
VEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX2Nzc1ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTIy
LDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RkOjpy
b3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSks
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIG1fY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gT3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUlu
dGVnZXJUeXBlUmF3KGRvdWJsZSBtaW5pbXVtVmFsdWUpCkBAIC0xMzgsNyArMTM5LDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91YmxlVmFs
dWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gbV9jc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1i
ZXJSYXcoKQpAQCAtMTk5LDYgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CiAg
ICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjVmFsdWU7CisgICAgQ1NTVmFsdWVQb29sJiBt
X2Nzc1ZhbHVlUG9vbDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IE9wdGlvbmFs
PEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKQEAgLTMxNiw5ICszMTgsMTQgQEAgT3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcldv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFs
dWVQb29sKQogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDE3LDEwICs0MjQsMTUgQEAgT3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZSB2YWx1ZVIKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkK
IHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIg
Y2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNv
bnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAg
ICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOwpAQCAtNDI5LDcgKzQ0MSw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKICAgICB9
CiAKICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19Q
RVJDRU5UQUdFKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNTIyLDEwICs1MzQsMTUg
QEAgT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3MKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsg
dW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCiB7CiAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgQ2FsY1Bh
cnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVS
YW5nZUFsbCwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSog
Y2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChjYWxj
dWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKQEAgLTUzNCw3ICs1
NTEsNyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZQogICAgIH0KIAogICAgIGlmIChhdXRvIGFu
Z2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CiAKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTYyNSw5ICs2NDIsMTQgQEAgT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogfQogCiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZShyYW5nZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtMjk5OCw3ICszMDIwLDcgQEAgT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxp
bmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnMKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1PcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtl
clNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7CiAgICAgLy8gTGV0J3Mg
Y2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3aGVyZSBpbiB0aGUg
c2hvcnRoYW5kLgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAppbmRleCA4MmY0NDJmYjcwMmMzNjAxOGZkNmEwNWYzZDNmYTQ4NmE2OTY5MDkxLi40NzMy
ODJhNGM3YzMwNjYyMDE1ODYxOTliYjAxMWFlODk5YTY4MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTgyLDI0
ICs4MiwyOSBAQCBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQQogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIE9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFs
dWVQb29sJik7CiBPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBV
bml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFu
Z2UsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7
CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRp
b25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkZvcmJpZCk7CiAKIE9wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlk
ZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1Zh
bHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5n
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBl
cik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlELi4uPiBpbmxpbmUgYm9vbCBpZGVu
dE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJ
ZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK3Rl
bXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1
ZVBvb2wmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3VzdG9tSWRlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
U3RyaW5nKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTE3Miw3ICsxNzcsNyBAQCBPcHRpb25h
bDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CiBPcHRpb25hbDxWZWN0b3I8Rm9udEZhbWlseVJhdz4+IGNvbnN1bWVGb250RmFtaWx5UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIE9wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9u
dFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29u
c3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwot
T3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKIGNvbnN0IEF0b21TdHJpbmcmIGdl
bmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQpOwogV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1p
bHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFtaWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKQEAgLTE5
NCwxMCArMTk5LDE1IEBAIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IE9wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlCiB9CiAKIHRlbXBsYXRlPENT
U1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRX
b3JrZXJTYWZlPG5hbWVzLi4uPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9
CisKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
VmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkg
IT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLmlkKCkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSk7CiB9CiAKIGlu
bGluZSBib29sIGlzRm9udFN0eWxlQW5nbGVJblJhbmdlKGRvdWJsZSBhbmdsZUluRGVncmVlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjMzMzgzMTQ3ZDljYjk5NGUwMzgzYmFiZjYw
MTViMjhlN2NlNTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCkBAIC0wLDAgKzEsNDU2IEBACisvLyBD
b3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKEMpIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKy8vIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U3R5bGVWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU1BhcnNlckZhc3RQYXRocy5oIgorI2luY2x1ZGUgIkNTU1BhcnNlckltcGwuaCIKKyNp
bmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJD
U1NUb2tlbml6ZXIuaCIKKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisjaW5jbHVkZSAi
Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczsKK3VzaW5nIG5hbWVz
cGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOworCitPcHRpb25hbDxGb250
UmF3PiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udChjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIENTU1Rva2VuaXpl
ciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2Vu
aXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAg
ICByZXR1cm4gY29uc3VtZUZvbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCitDb2xv
ciBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgaWYgKGF1dG8gY29sb3IgPSBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNl
U2ltcGxlQ29sb3Ioc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICpjb2xvcjsKKworICAgIENTU1Rv
a2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
KHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7
CisKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yV29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyhjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJ
bXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFu
Z2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1l
V2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjKHJhbmdlLCBj
b250ZXh0KTsKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRy
PENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTdHls
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIo
Y29udGV4dCwgc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gcGFyc2Vy
LnRva2VuaXplcigpLT50b2tlblJhbmdlKCk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2Uo
KTsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBwYXJzZWRWYWx1ZSA9CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAg
Y29uc3VtZUZvbnRTdHlsZVJhbmdlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNzc1ZhbHVlUG9vbCk7
CisjZWxzZQorICAgICAgICBjb25zdW1lRm9udFN0eWxlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNz
c1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsK
K30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNl
Rm9udEZhY2VXZWlnaHQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIENTU1BhcnNl
ckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUgPQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9O
VFMpCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVSYW5nZShyYW5nZSwgY3NzVmFs
dWVQb29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUocmFuZ2Us
IGNzc1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5h
dEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1
ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBh
cnNlRm9udEZhY2VTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQ
YXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFu
Z2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5j
b25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0KKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgICAgICBjb25zdW1lRm9udFN0cmV0Y2hSYW5nZShyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250U3RyZXRjaChyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbmRpZgorICAgIGlmICghcGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitS
ZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFj
ZVVuaWNvZGVSYW5nZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcp
OworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRv
a2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVl
ID0gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKHJhbmdlKTsKKyAgICBpZiAoIXBhcnNlZFZh
bHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNl
cldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9r
ZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdl
LmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUg
PSBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhyYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICBp
ZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
cm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VEaXNwbGF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wm
IGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJp
bmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCkt
PnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChy
YW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXkocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cisg
ICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAhcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK25hbWVzcGFjZSBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlIHsKKworc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUZvbnRGYWNlU3JjVVJJKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAgIFN0cmluZyB1cmwgPSBjb25zdW1lVXJs
QXNTdHJpbmdWaWV3KHJhbmdlKS50b1N0cmluZygpOworICAgIGlmICh1cmwuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+
IHVyaVZhbHVlID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKGNvbnRleHQuY29tcGxldGVV
UkwodXJsKS5zdHJpbmcoKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3Bh
cXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CisKKyAgICBpZiAo
cmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSAhPSBDU1NWYWx1ZUZvcm1hdCkKKyAgICAgICAgcmV0
dXJuIHVyaVZhbHVlOworCisgICAgLy8gRklYTUU6IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtZm9udHMgc2F5cyB0aGF0IGZvcm1hdCgpIGNvbnRhaW5zIGEgY29tbWEtc2VwYXJhdGVkIGxp
c3Qgb2Ygc3RyaW5ncywKKyAgICAvLyBidXQgQ1NTRm9udEZhY2VTcmNWYWx1ZSBzdG9yZXMgb25s
eSBvbmUgZm9ybWF0LiBBbGxvd2luZyBvbmUgZm9ybWF0IGZvciBub3cuCisgICAgLy8gRklYTUU6
IFdlJ3JlIGFsbG93aW5nIHRoZSBmb3JtYXQgdG8gYmUgYW4gaWRlbnRpZmllciBhcyB3ZWxsIGFz
IGEgc3RyaW5nLCBiZWNhdXNlIHRoZSBvbGQKKyAgICAvLyBwYXJzZXIgZGlkLiBJdCdzIG5vdCBj
bGVhciBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYnV0
IHdlIGhhdmUgbG90cyBvZgorICAgIC8vIGxheW91dCB0ZXN0cyB0aGF0IHJlbHkgb24gaXQuCisg
ICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOworICAgIGlmICgoYXJnLnR5cGUoKSAhPSBTdHJpbmdUb2tlbiAmJiBhcmcudHlwZSgp
ICE9IElkZW50VG9rZW4pIHx8ICFhcmdzLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7CisgICAg
cmV0dXJuIHVyaVZhbHVlOworfQorCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9u
dEZhY2VTcmNMb2NhbChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGlmIChhcmdz
LnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pIHsKKyAgICAgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIGFyZyA9IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAg
aWYgKCFhcmdzLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZy52YWx1ZSgpLnRvU3Ry
aW5nKCkpOworICAgIH0KKyAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4p
IHsKKyAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRlbmF0ZUZhbWlseU5hbWUoYXJn
cyk7CisgICAgICAgIGlmICghYXJncy5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChmYW1p
bHlOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisKKyAgICBk
byB7CisgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsK
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKyAgICAgICAgaWYgKHRva2Vu
LmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2FsKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5nZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjVVJJKHJhbmdlLCBjb250ZXh0KTsK
KyAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CisgICAg
cmV0dXJuIHZhbHVlczsKK30KKworUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9u
dFN0eWxlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CisjaWYgRU5B
QkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFs
dWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NGb250
U3R5bGVWYWx1ZTo6Y3JlYXRlKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
cmVzdWx0LT5hbmdsZS0+dmFsdWUsIHJlc3VsdC0+YW5nbGUtPnR5cGUpKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIHJl
dHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlPENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxp
YywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSwgY3NzVmFsdWVQb29sKTsKK30KKworUmVmUHRyPENT
U0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wm
IGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBhdXRvIGtleXdvcmQgPSBjb25zdW1lRm9udFN0eWxlS2V5
d29yZFZhbHVlKHJhbmdlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlmICgha2V5d29yZCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoa2V5d29yZC0+dmFsdWVJRCgpICE9IENTU1Zh
bHVlT2JsaXF1ZSB8fCByYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxl
UmFuZ2VWYWx1ZTo6Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbm90IGFsbG93IHRoZSB1bml0bGVzcyB6ZXJvLgor
ICAgIGlmIChhdXRvIGZpcnN0QW5nbGUgPSBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBj
c3NQYXJzZXJNb2RlLCBjc3NWYWx1ZVBvb2wsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxl
c3NaZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICBhdXRvIGZpcnN0QW5nbGVJbkRlZ3JlZXMg
PSBmaXJzdEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX0RFRyk7CisgICAgICAg
IGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZmlyc3RBbmdsZUluRGVncmVlcykpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKHJhbmdlLmF0RW5kKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOworICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmdsZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5nZVZhbHVlOjpjcmVhdGUo
a2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5vdCBhbGxvdyB0aGUgdW5p
dGxlc3MgemVyby4KKyAgICAgICAgYXV0byBzZWNvbmRBbmdsZSA9IGNvbnN1bWVBbmdsZVdvcmtl
clNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIGNzc1ZhbHVlUG9vbCwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpOworICAgICAgICBpZiAoIXNlY29uZEFu
Z2xlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8gc2Vjb25kQW5n
bGVJbkRlZ3JlZXMgPSBzZWNvbmRBbmdsZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19E
RUcpOworICAgICAgICBpZiAoIWlzRm9udFN0eWxlQW5nbGVJblJhbmdlKHNlY29uZEFuZ2xlSW5E
ZWdyZWVzKSB8fCBmaXJzdEFuZ2xlSW5EZWdyZWVzID4gc2Vjb25kQW5nbGVJbkRlZ3JlZXMpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGZp
cnN0QW5nbGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKHNlY29u
ZEFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFu
Z2VWYWx1ZTo6Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKyNlbmRpZgorCitzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlS2V5d29yZFZh
bHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9v
bCkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZTxDU1NWYWx1ZU5vcm1hbCwg
Q1NTVmFsdWVCb2xkPihyYW5nZSwgY3NzVmFsdWVQb29sKTsKK30KKworI2lmIEVOQUJMRShWQVJJ
QVRJT05fRk9OVFMpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVS
YW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBv
b2wpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtl
eXdvcmRWYWx1ZShyYW5nZSwgY3NzVmFsdWVQb29sKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBhdXRvIGZpcnN0TnVtYmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZl
KHJhbmdlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlmICghZmlyc3ROdW1iZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gZmly
c3ROdW1iZXI7CisgICAgYXV0byBzZWNvbmROdW1iZXIgPSBjb25zdW1lRm9udFdlaWdodE51bWJl
cldvcmtlclNhZmUocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7CisgICAgaWYgKCFzZWNvbmROdW1iZXIg
fHwgZmlyc3ROdW1iZXItPmZsb2F0VmFsdWUoKSA+IHNlY29uZE51bWJlci0+ZmxvYXRWYWx1ZSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHJlc3VsdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICByZXN1bHQtPmFwcGVuZChmaXJzdE51bWJl
ci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZXN1bHQtPmFwcGVuZChzZWNvbmROdW1iZXIucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1
bHQpKTsKK30KKyNlbHNlCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2Vp
Z2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0QWJz
b2x1dGVLZXl3b3JkVmFsdWUocmFuZ2UsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKHJhbmdlLCBjc3NWYWx1
ZVBvb2wpOworfQorI2VuZGlmCisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29uc3VtZUZv
bnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBudWxscHRy
OworfQorCisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKK3N0YXRpYyBib29sIGZvbnRTdHJl
dGNoSXNXaXRoaW5SYW5nZShmbG9hdCBzdHJldGNoKQoreworICAgIHJldHVybiBzdHJldGNoID49
IDA7Cit9CisjZW5kaWYKKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0
cmV0Y2goQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQ
b29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRW
YWx1ZShyYW5nZSwgY3NzVmFsdWVQb29sKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNpZiBF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVy
Y2VudFdvcmtlclNhZmUocmFuZ2UsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwgY3NzVmFsdWVQb29s
KSkKKyAgICAgICAgcmV0dXJuIGZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZShwZXJjZW50LT52YWx1
ZTxmbG9hdD4oKSkgPyBwZXJjZW50IDogbnVsbHB0cjsKKyNlbmRpZgorICAgIHJldHVybiBudWxs
cHRyOworfQorCisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKK1JlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Zh
bHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVG
b250U3RyZXRjaEtleXdvcmRWYWx1ZShyYW5nZSwgY3NzVmFsdWVQb29sKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBhdXRvIGZpcnN0UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50V29ya2Vy
U2FmZShyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlm
ICghZmlyc3RQZXJjZW50IHx8ICFmb250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmlyc3RQZXJjZW50
LT52YWx1ZTxmbG9hdD4oKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gZmlyc3RQZXJjZW50OworICAgIGF1dG8gc2Vjb25k
UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5nZSwgVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlmICghc2Vjb25kUGVyY2VudCB8fCAhZm9udFN0
cmV0Y2hJc1dpdGhpblJhbmdlKHNlY29uZFBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSB8fCBmaXJz
dFBlcmNlbnQtPmZsb2F0VmFsdWUoKSA+IHNlY29uZFBlcmNlbnQtPmZsb2F0VmFsdWUoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RQZXJjZW50LnJl
bGVhc2VOb25OdWxsKCkpOworICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZFBlcmNlbnQucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1bHQp
KTsKK30KKyNlbmRpZgorCitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9udEZhY2VVbmlj
b2RlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwor
CisgICAgZG8geworICAgICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAodG9rZW4udHlwZSgpICE9
IFVuaWNvZGVSYW5nZVRva2VuKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgVUNoYXIzMiBzdGFydCA9IHRva2VuLnVuaWNvZGVSYW5nZVN0YXJ0KCk7CisgICAgICAgIFVD
aGFyMzIgZW5kID0gdG9rZW4udW5pY29kZVJhbmdlRW5kKCk7CisgICAgICAgIGlmIChzdGFydCA+
IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB2YWx1ZXMtPmFwcGVu
ZChDU1NVbmljb2RlUmFuZ2VWYWx1ZTo6Y3JlYXRlKHN0YXJ0LCBlbmQpKTsKKyAgICB9IHdoaWxl
IChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CisKKyAgICByZXR1cm4g
dmFsdWVzOworfQorCitzdGF0aWMgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGNvbnN1bWVG
b250RmVhdHVyZVRhZyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICAvLyBGZWF0
dXJlIHRhZyBuYW1lIGNvbnNpc3RzIG9mIDQtbGV0dGVyIGNoYXJhY3RlcnMuCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHRhZ05hbWVMZW5ndGggPSA0OworCisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAv
LyBGZWF0dXJlIHRhZyBuYW1lIGNvbWVzIGZpcnN0CisgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBT
dHJpbmdUb2tlbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHRva2VuLnZhbHVl
KCkubGVuZ3RoKCkgIT0gdGFnTmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgCisgICAgRm9udFRhZyB0YWc7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5z
aXplKCk7ICsraSkgeworICAgICAgICAvLyBMaW1pdHMgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMg
dG8gMHgyMC0weDdFLCBmb2xsb3dpbmcgdGhlIHRhZyBuYW1lIHJ1bGVzIGRlZmllbmQgaW4gdGhl
IE9wZW5UeXBlIHNwZWNpZmljYXRpb24uCisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHRva2Vu
LnZhbHVlKClbaV07CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPCAweDIwIHx8IGNoYXJhY3RlciA+
IDB4N0UpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdGFnW2ldID0gdG9B
U0NJSUxvd2VyKGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgaW50IHRhZ1ZhbHVlID0gMTsKKyAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBDb21tYVRva2Vu
KSB7CisgICAgICAgIC8vIEZlYXR1cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6IDxpbnRlZ2Vy
PiB8IG9uIHwgb2ZmCisgICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclJh
dyhyYW5nZSwgMCkpCisgICAgICAgICAgICB0YWdWYWx1ZSA9ICppbnRlZ2VyOworICAgICAgICBl
bHNlIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU9uIHx8IHJhbmdlLnBlZWsoKS5p
ZCgpID09IENTU1ZhbHVlT2ZmKQorICAgICAgICAgICAgdGFnVmFsdWUgPSByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkgPT0gQ1NTVmFsdWVPbjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBDU1NGb250RmVh
dHVyZVZhbHVlOjpjcmVhdGUoV1RGTW92ZSh0YWcpLCB0YWdWYWx1ZSk7Cit9CisKK1JlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUZvbnRGZWF0dXJlU2V0dGluZ3MoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIGlmIChyYW5nZS5wZWVr
KCkuaWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudFdv
cmtlclNhZmUocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
c2V0dGluZ3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisgICAgZG8g
eworICAgICAgICBSZWZQdHI8Q1NTRm9udEZlYXR1cmVWYWx1ZT4gZm9udEZlYXR1cmVWYWx1ZSA9
IGNvbnN1bWVGb250RmVhdHVyZVRhZyhyYW5nZSk7CisgICAgICAgIGlmICghZm9udEZlYXR1cmVW
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBzZXR0aW5ncy0+YXBw
ZW5kKGZvbnRGZWF0dXJlVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSB3aGlsZSAoY29u
c3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOworICAgIHJldHVybiBzZXR0aW5n
czsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udEZhY2VGb250RGlz
cGxheShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBv
b2wpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFdvcmtlclNhZmU8Q1NTVmFsdWVBdXRvLCBD
U1NWYWx1ZUJsb2NrLCBDU1NWYWx1ZVN3YXAsIENTU1ZhbHVlRmFsbGJhY2ssIENTU1ZhbHVlT3B0
aW9uYWw+KHJhbmdlLCBjc3NWYWx1ZVBvb2wpOworfQorCit9IC8vIG5hbWVzcGFjZSBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29y
a2VyU2FmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMDkyYTAwZTU0NDNmYTFlNTVjMjg2NDBkZGFiNDI3YWJm
MzRkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NQ
YXJzZXJDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENTU0ZvbnRTdHlsZVZhbHVlOworY2xhc3MgQ1NTRm9udFN0eWxl
UmFuZ2VWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTVmFsdWVMaXN0OworY2xhc3Mg
Q1NTVmFsdWVQb29sOworY2xhc3MgQ29sb3I7CisKK25hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMgeworc3RydWN0IEZvbnRSYXc7Cit9CisKK2NsYXNzIENTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZSB7CitwdWJsaWM6CisgICAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Rm9udFJhdz4gcGFyc2VGb250KGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3Rh
bmRhcmRNb2RlKTsKKworICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRG
YWNlU3JjKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKKyAgICBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNlU3R5bGUoY29uc3QgU3RyaW5nJiwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYsIENTU1ZhbHVlUG9vbCYpOworICAgIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlRm9udEZhY2VXZWlnaHQoY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYsIENTU1ZhbHVlUG9vbCYpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IHBhcnNlRm9udEZhY2VTdHJldGNoKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmLCBDU1NWYWx1ZVBvb2wmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZv
bnRGYWNlVW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNlRmVhdHVyZVNldHRp
bmdzKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBDU1NWYWx1ZVBvb2wm
KTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNlRGlzcGxheShjb25z
dCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQ1NTVmFsdWVQb29sJik7Cit9Owor
CituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZSB7CisKK1JlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25z
dW1lRm9udFN0eWxlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1
ZVBvb2wmKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5
d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKK1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NWYWx1ZVBvb2wmKTsKK1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVVu
aWNvZGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVGb250RmVhdHVyZVNldHRpbmdzKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wm
KTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXko
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOworI2lmIEVOQUJMRShWQVJJQVRJ
T05fRk9OVFMpCitSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29uc3VtZUZvbnRTdHls
ZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wm
KTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZVJhbmdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwor
I2VuZGlmCisjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1ZhbHVlUG9vbCYpOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyc1dvcmtlclNhZmUKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCmluZGV4IGU3NTBhNjI3YWI2MGJj
OTNmZGI1Zjc1ODU5ODNlNmRhNTQ5ZWJiNmQuLjdlY2NkNjEwODBjYzhiYjgwMTI0MzRkZWZiZTk1
MGYyMDE0ODMxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKKyNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIK
ICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJDb21tb25WTS5oIgogI2luY2x1
ZGUgIkRPTVRpbWVyLmgiCkBAIC0yMzMsNiArMjM0LDExIEBAIEZvbnRDYWNoZSYgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6Zm9udENhY2hlKCkKICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0
b24oKTsKIH0KIAorQ1NTVmFsdWVQb29sJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpjc3NWYWx1
ZVBvb2woKQoreworICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpOworfQorCiBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udExvYWRSZXF1ZXN0PiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpm
b250TG9hZFJlcXVlc3QoU3RyaW5nJiwgYm9vbCwgYm9vbCwgTG9hZGVkRnJvbU9wYXF1ZVNvdXJj
ZSkKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oCmluZGV4IGM5OThiMTJmMjljYzY5NjhiOWM5NjY1YjA2NWZkMTJkNzhk
NTdiODIuLjEyYmE0NjdkZjFjMjM3ZmI4MjNjOWFmZTkxNDMzZTA4ZDk1YThhMzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtNjIsNiArNjIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFdmVudExvb3A7CiBjbGFzcyBDYWNoZWRTY3Jp
cHQ7CiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CitjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBE
YXRhYmFzZUNvbnRleHQ7CiBjbGFzcyBFdmVudFF1ZXVlOwogY2xhc3MgRXZlbnRMb29wVGFza0dy
b3VwOwpAQCAtMTY3LDYgKzE2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRm9udENhY2hl
JiBmb250Q2FjaGUoKTsKICAgICB2aXJ0dWFsIENTU0ZvbnRTZWxlY3RvciogY3NzRm9udFNlbGVj
dG9yKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgQ1NTVmFsdWVQb29sJiBjc3NW
YWx1ZVBvb2woKTsKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxGb250TG9hZFJlcXVlc3Q+
IGZvbnRMb2FkUmVxdWVzdChTdHJpbmcmIHVybCwgYm9vbCBpc1NWRywgYm9vbCBpc0luaXRpYXRp
bmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlLCBMb2FkZWRGcm9tT3BhcXVlU291cmNlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oRm9udExvYWRSZXF1ZXN0Jikg
eyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDE0MTU1N2ZkYzk3YjQyMGJjMTIzOWMxMzE3NzRmMzQ3
YzZlY2MwNGYuLmJmMjdkOTE1NzllM2ViODNhMDA5NzExZGFjYTk2OGEwMjBiNmM2MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcApAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5UGFyc2VySGVscGVycy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyV29ya2Vy
U2FmZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTEyNSw4ICsxMjUsOCBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0eWxlKGNvbnN0IFN0cmlu
ZyYgbmV3Rm9udAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDov
L2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLWh0bWwvMjAwOUp1bC8wOTQ3Lmh0
bWwsCi0gICAgLy8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGln
bm9yZWQuIHBhcnNlRm9udFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgotICAgIGF1dG8gZm9u
dFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NT
U1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKCkpKTsKKyAgICAvLyB0
aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4gQ1NTUHJv
cGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1
dG8gZm9udFJhdyA9IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250KG5ld0Zv
bnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUo
KSkpOwogICAgIGlmICghZm9udFJhdykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKaW5kZXggOTE4ZTdjMDlmMDY1YjFmZTEwYjE3
YTk5MTRmYzgyNWM0NTQzYTRhOS4uYjBjNjI1OTQyYjJiNTBiODFiNDg2MGQ0Y2JlYjllOGEyY2Y4
MWY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcApAQCAt
MzcsMTAgKzM3LDEyIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlUHJvcGVydGllcy5oIgorCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2Fu
dmFzLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAogI2lmIFVTRShD
RykKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CkBAIC01Nyw3ICs1OSw3IEBA
IENvbG9yIHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgQ2FudmFzQmFzZSYg
Y2FudmFzQmFzZSkKIHsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAoY2Fu
dmFzQmFzZS5pc09mZnNjcmVlbkNhbnZhcygpKQotICAgICAgICByZXR1cm4gQ1NTUGFyc2VyOjpw
YXJzZUNvbG9yV29ya2VyU2FmZShjb2xvclN0cmluZyk7CisgICAgICAgIHJldHVybiBDU1NQcm9w
ZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlQ29sb3IoY29sb3JTdHJpbmcpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oY2FudmFzQmFzZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCmluZGV4IDhhZTQ5ODQyYjkwYThiZmZhZDE2ZDczOTM3YTUyMWQzMWFmYTU5MDIu
LjA0ZDk4YjY5ZDY5MzI0OTg1NTMyZjg4YWJjYmNiYmFlYTBkZWRkNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzYsOCArMzYsOCBAQAogI2lmIEVOQUJMRShPRkZTQ1JF
RU5fQ0FOVkFTKQogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlRm9yRm9udFJhdy5oIgpAQCAtNzEsOCArNzEsOCBAQCB2b2lkIE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vbGlzdHMudzMub3JnL0Fy
Y2hpdmVzL1B1YmxpYy9wdWJsaWMtaHRtbC8yMDA5SnVsLzA5NDcuaHRtbCwKLSAgICAvLyB0aGUg
ImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4gcGFyc2VGb250
V29ya2VyU2FmZSgpIGlnbm9yZXMgdGhlc2UuCi0gICAgYXV0byBmb250UmF3ID0gQ1NTUGFyc2Vy
OjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0ZvbnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghdXNl
c0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUoKSkpOworICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5k
ICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmU6OnBhcnNlRm9udCgpIGlnbm9yZXMgdGhlc2UuCisgICAgYXV0byBmb250UmF3ID0gQ1NT
UHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQobmV3Rm9udCwgc3RyaWN0VG9DU1NQ
YXJzZXJNb2RlKCF1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpKSk7CiAgICAgaWYgKCFm
b250UmF3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuaAppbmRleCAzN2JkZjI5MTQ3ZTM2ZTQ3NjJiYmZiYTRlMzhlNjg3ZjJlODQy
MjVlLi42MmRhMzE4MzUzNjFkNDBjMzA2NTg5ZWZhYzA4ZGYxNDM0MWZjZTA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCkBAIC0xMTcsNyArMTE3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCaXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYm
LCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJik7CiAgICAgdm9p
ZCBjcmVhdGVJbWFnZUJpdG1hcChJbWFnZUJpdG1hcDo6U291cmNlJiYsIGludCBzeCwgaW50IHN5
LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIEltYWdlQml0bWFwOjpQcm9t
aXNlJiYpOwogCi0gICAgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2woKTsKKyAgICBDU1NWYWx1
ZVBvb2wmIGNzc1ZhbHVlUG9vbCgpIGZpbmFsOwogICAgIENTU0ZvbnRTZWxlY3RvciogY3NzRm9u
dFNlbGVjdG9yKCkgZmluYWw7CiAgICAgRm9udENhY2hlJiBmb250Q2FjaGUoKSBmaW5hbDsKIAo=
</data>
<flag name="commit-queue"
          id="446158"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426012</attachid>
            <date>2021-04-14 10:51:41 -0700</date>
            <delta_ts>2021-04-15 02:10:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224426-20210414185139.patch</filename>
            <type>text/plain</type>
            <size>83283</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlMTA0ZGU3MTkyMDhk
ZTJlODc1YTU2OGRhYTkzNjAzZTM3ZTViMi4uMTVlZWQwMWVmNDA4NzVhZjM0NmMxZTJjM2MwMDNh
MmRhMmQyYzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMS0wNC0xNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWFrZSBGb250RmFjZSBwYXJz
aW5nIHdvcmtlci1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIENTUyBGb250RmFjZSBwcm9wZXJ0eSBwYXJzaW5nIHNhZmUgdG8gZG8gaW4g
YSBXb3JrZXIuIEluc3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgcnVsZSBwZXIgcHJv
cGVydHkgYW5kIHVzaW5nIHRoZSBmdWxsIENTU1Byb3BlcnR5UGFyc2VyCisgICAgICAgIHBhdGgs
IGluc3RlYWQgZmFjdG9yIG91dCB0aGUgc3BlY2lmaWMsIG5lY2Vzc2FyeSBwcm9wZXJ0eSBwYXJz
ZXJzIGludG8gYQorICAgICAgICBuZXcgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlIGFuZCBt
YWtlIHN1cmUgdGhleSdyZSBzYWZlIHRvIHVzZSBpbiBhCisgICAgICAgIFdvcmtlciAobWFpbmx5
IGJ5IGFsbG93aW5nIGZvciBzcGVjaWZ5aW5nIHRoZSBDU1NWYWx1ZVBvb2wgc28gdGhhdAorICAg
ICAgICBtYWluLXRocmVhZCBzaW5nbGV0b25zIGRvbid0IGdldCB1c2VkKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OiBBZGQgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcC8uaAorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGNzcy9Gb250RmFj
ZS5jcHA6IENhbGwgc2V0dGVycyB3aXRoIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvCisg
ICAgICAgICAgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byA6OmNzc1ZhbHVlUG9vbCgpIGFuZCB1c2Ug
bmV3IHdvcmtlci1zYWZlCisgICAgICAgICAgcGFyc2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNl
dEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldFdlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RmFjZTo6c2V0U3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0VW5pY29k
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldERpc3BsYXkpOgorICAgICAgICAqIGNz
cy9Gb250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5pZGw6CisKKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6IE1vdmUgV29ya2VyU2FmZSBwYXJzaW5nIGZ1bmN0aW9u
cyB0bworICAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZSBhbmQgcmVtb3ZlIG5v
dy11bm5lY2Vzc2FyeQorICAgICAgICAgIHBhcnNlRm9udEZhY2VEZXNjcmlwdG9yLgorICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyLmNwcDogTW92ZSBGb250RmFjZSBwcm9wZXJ0eSBwYXJzZXJzIHRvCisgICAg
ICAgICAgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlRm9udEZhY2VEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRm9udCk6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuY3BwOiBBZGQgV29ya2VyU2FmZSB2YXJpYW50cyBmb3IKKyAgICAgICAg
ICBzb21lIG9mIHRoZSBiYXNpYyBjb25zdW1lIGhlbHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1l
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxj
UGFyc2VyOjpjb25zdW1lSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2Vp
Z2h0TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2VyU2FmZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJ
ZGVudFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRm9udFJhdyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUlkZW50V29ya2VyU2FmZSk6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZh
Y2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6
OnBhcnNlRm9udEZhY2VXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlU3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRG
YWNlRmVhdHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZTo6cGFyc2VGb250RmFjZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlU3JjVVJJKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNv
bnN1bWVGb250RmFjZVNyY0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6
OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHlsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1
bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtl
clNhZmU6OmZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0cmV0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3Vt
ZUZvbnRTdHJldGNoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250
RmVhdHVyZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNX
b3JrZXJTYWZlOjpjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VGb250
RGlzcGxheSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNh
ZmUuaDogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6
IEFkZCA6OmNzc1ZhbHVlUG9vbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y3NzVmFsdWVQb29sKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDogVXBkYXRlIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0eWxlKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUNvbG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
Lmg6CisKIDIwMjEtMDQtMDcgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJlZmFjdG9yIGZvbnQgbG9hZGluZyB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBXb3JrZXIg
dG8gaW1wbGVtZW50IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmZDM4ZGFhOTViNDZjMTE5NTE2NDY0
ZjViOWVjNDVjMTkwOGMyNmUuLmRiYzUwODljYThhNGI4NWVhNzNiMDExYThmMmU2YzlmNDhjZDZj
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC04MzcsNiArODM3LDcgQEAgY3NzL3BhcnNlci9DU1NQYXJz
ZXJUb2tlbi5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAKIGNzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAKK2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAogY3Nz
L3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTU3VwcG9ydHNQYXJz
ZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGJhOGNhMTk1NjU4MThh
NzQxOGZhMGRkMjc4MDgwZGUxYzI1YmQ4Li40ZjNlYzE0NjBiOGE2YjEzNWJjZDk1ZGY4YmE5Y2I0
MWNhZWZmZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yOTM2LDYgKzI5MzYsNyBAQAogCQk5NDZEMzc0MDFENkNFM0MyMDA3
NzA4NEYgLyogQ1NTUGFyc2VyVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk0NkQzNzNEMUQ2Q0UzMUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tl
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk0
NkQzNzQ0MUQ2Q0Y3QjIwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0
RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAwNzcwODRG
IC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJz
ZXIuaCAqLzsgfTsKKwkJOTQ2RDM3NDYxRDZEMDFENTAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTQ2RDM3NDIxRDZEMDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2Vy
U2FmZS5oICovOyB9OwogCQk5NDZEMzc0QTFENkQwNjI4MDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0ODFE
NkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmggKi87IH07CiAJCTk0NkQzNzRFMUQ2RDA4QUEw
MDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFy
c2VyVG9rZW5SYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk0Nzk0OTI1MUUwMzA4QUYwMDAxOEQ4NSAvKiBEZXByZWNhdGVkQ1NTT01WYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ3OTQ5
MjMxRTAyRjkwQjAwMDE4RDg1IC8qIERlcHJlY2F0ZWRDU1NPTVZhbHVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzk5LDYgKzExODAwLDgg
QEAKIAkJOTQ2RDM3M0UxRDZDRTMxQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlclRva2VuLmNwcDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk0NkQzNzQxMUQ2Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlci5jcHA7
IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUHJvcGVydHlQYXJzZXIuaDsg
cGF0aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1Byb3Bl
cnR5UGFyc2VyV29ya2VyU2FmZS5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3NDIxRDZE
MDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgcGF0
aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTQ2RDM3NDMxRDZDRjc4ODAwNzcwODRGIC8qIENTU1BhcnNlcklkaW9t
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuaDsg
cGF0aCA9IHBhcnNlci9DU1NQYXJzZXJJZGlvbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTQ2RDM3NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NNYXJrdXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NDZEMzc0ODFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU01hcmt1cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjQwMDcsNiArMjQwMTAsOCBAQAogCQkJCTk0NkQzNzQyMUQ2
Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5oICovLAogCQkJCTk0OUM3NzAyMUQ2
RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwICovLAogCQkJCTk0
OUM3NzAzMUQ2RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCAqLywK
KwkJCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlLmNwcCAqLywKKwkJCQk5NDZEMzc0MjFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQ
YXJzZXJXb3JrZXJTYWZlLmggKi8sCiAJCQkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENT
U1NlbGVjdG9yUGFyc2VyLmNwcCAqLywKIAkJCQk5NERFNUM4QzFEODA4MDE1MDAxNjRGMkEgLyog
Q1NTU2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NERFNUM4RjFEODMwMENCMDAxNjRGMkEgLyog
Q1NTU3VwcG9ydHNQYXJzZXIuY3BwICovLApAQCAtMzE5OTYsNiArMzIwMDEsNyBAQAogCQkJCTY1
NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTk0OUM3NzA1MUQ2RTM5RUEwMEMwREU0RiAvKiBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzQ2MUQ2RDAxRDUwMDc3
MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgyRTNEOERGMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNUExMkUwMERDMDQxNDgwMEM5QUZBRCAvKiBDU1NSZWZsZWN0VmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCREE0MDAxMjE1MUI2RjUwMEZENjYwNCAvKiBDU1NS
ZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5jcHAKaW5kZXggMzVmZmMwMzgyYTE1YTIwZmE0ZWU4NzFjODYzOGVhNjE2OGUzYmUxYi4uOGMz
ODA2OGEyMDZmMTdmN2RkNzRiMGUxNmEyN2M5NzdmN2NjOWY5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZh
Y2UuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVk
ZSAiQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTc2LDExICs3NywxMSBAQCBSZWY8Rm9udEZhY2U+
IEZvbnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGZhbWls
eSwgU291cmNlJgogCiAgICAgYXV0byBzb3VyY2VDb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpzd2l0
Y2hPbihzb3VyY2UsCiAgICAgICAgIFsmXSAoU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9y
PHZvaWQ+IHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmco
c3RyaW5nLCBDU1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4odmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwotICAgICAgICAgICAgQ1NTRm9udEZhY2U6OmFwcGVuZFNvdXJjZXMocmVzdWx0LT5iYWNr
aW5nKCksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgJmRvY3VtZW50LCBmYWxzZSk7
Ci0gICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBD
U1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTcmMoc3RyaW5nLCBDU1NQ
YXJzZXJDb250ZXh0KGRvY3VtZW50KSkpIHsKKyAgICAgICAgICAgICAgICBDU1NGb250RmFjZTo6
YXBwZW5kU291cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgKnZhbHVlLCAmZG9jdW1lbnQsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAgICAgICAgIH0sCiAgICAgICAg
IFsmXSAoUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mIGFycmF5QnVmZmVyVmlldykgLT4gRXhjZXB0
aW9uT3I8dm9pZD4gewogICAgICAgICAgICAgZGF0YVJlcXVpcmVzQXN5bmNocm9ub3VzTG9hZGlu
ZyA9IHBvcHVsYXRlRm9udEZhY2VXaXRoQXJyYXlCdWZmZXIocmVzdWx0LT5iYWNraW5nKCksIGFy
cmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTEwMCwxNyArMTAxLDE3IEBAIFJl
ZjxGb250RmFjZT4gRm9udEZhY2U6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBTb3VyY2UmCiAgICAgfQogCiAgICAgLy8gVGhlc2UgdGVybmFyaWVzIG1h
dGNoIHRoZSBkZWZhdWx0IHN0cmluZ3MgaW5zaWRlIHRoZSBGb250RmFjZURlc2NyaXB0b3JzIGRp
Y3Rpb25hcnkgaW5zaWRlIEZvbnRGYWNlLmlkbC4KLSAgICBhdXRvIHNldFN0eWxlUmVzdWx0ID0g
cmVzdWx0LT5zZXRTdHlsZShkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuc3R5bGUpOworICAgIGF1dG8gc2V0U3R5bGVSZXN1bHQgPSByZXN1bHQt
PnNldFN0eWxlKGRvY3VtZW50LCBkZXNjcmlwdG9ycy5zdHlsZS5pc0VtcHR5KCkgPyAibm9ybWFs
Il9zIDogZGVzY3JpcHRvcnMuc3R5bGUpOwogICAgIGlmIChzZXRTdHlsZVJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICByZXN1bHQtPnNldEVycm9yU3RhdGUoKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNl
dFdlaWdodChkZXNjcmlwdG9ycy53ZWlnaHQuaXNFbXB0eSgpID8gIm5vcm1hbCJfcyA6IGRlc2Ny
aXB0b3JzLndlaWdodCk7CisgICAgYXV0byBzZXRXZWlnaHRSZXN1bHQgPSByZXN1bHQtPnNldFdl
aWdodChkb2N1bWVudCwgZGVzY3JpcHRvcnMud2VpZ2h0LmlzRW1wdHkoKSA/ICJub3JtYWwiX3Mg
OiBkZXNjcmlwdG9ycy53ZWlnaHQpOwogICAgIGlmIChzZXRXZWlnaHRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0U3RyZXRjaFJlc3VsdCA9IHJlc3VsdC0+c2V0
U3RyZXRjaChkZXNjcmlwdG9ycy5zdHJldGNoLmlzRW1wdHkoKSA/ICJub3JtYWwiX3MgOiBkZXNj
cmlwdG9ycy5zdHJldGNoKTsKKyAgICBhdXRvIHNldFN0cmV0Y2hSZXN1bHQgPSByZXN1bHQtPnNl
dFN0cmV0Y2goZG9jdW1lbnQsIGRlc2NyaXB0b3JzLnN0cmV0Y2guaXNFbXB0eSgpID8gIm5vcm1h
bCJfcyA6IGRlc2NyaXB0b3JzLnN0cmV0Y2gpOwogICAgIGlmIChzZXRTdHJldGNoUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0ZSgpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMTIwLDEyICsxMjEsMTIgQEAgUmVmPEZvbnRGYWNlPiBGb250
RmFjZTo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNv
dXJjZSYKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0
LT5zZXRGZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzLmlzRW1wdHko
KSA/ICJub3JtYWwiX3MgOiBkZXNjcmlwdG9ycy5mZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8g
c2V0RmVhdHVyZVNldHRpbmdzUmVzdWx0ID0gcmVzdWx0LT5zZXRGZWF0dXJlU2V0dGluZ3MoZG9j
dW1lbnQsIGRlc2NyaXB0b3JzLmZlYXR1cmVTZXR0aW5ncy5pc0VtcHR5KCkgPyAibm9ybWFsIl9z
IDogZGVzY3JpcHRvcnMuZmVhdHVyZVNldHRpbmdzKTsKICAgICBpZiAoc2V0RmVhdHVyZVNldHRp
bmdzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0
ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBhdXRvIHNldERpc3BsYXlS
ZXN1bHQgPSByZXN1bHQtPnNldERpc3BsYXkoZGVzY3JpcHRvcnMuZGlzcGxheS5pc0VtcHR5KCkg
PyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOworICAgIGF1dG8gc2V0RGlzcGxheVJl
c3VsdCA9IHJlc3VsdC0+c2V0RGlzcGxheShkb2N1bWVudCwgZGVzY3JpcHRvcnMuZGlzcGxheS5p
c0VtcHR5KCkgPyAiYXV0byJfcyA6IGRlc2NyaXB0b3JzLmRpc3BsYXkpOwogICAgIGlmIChzZXRE
aXNwbGF5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JT
dGF0ZSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTY4LDYxICsxNjksNTUgQEAgRm9u
dEZhY2U6On5Gb250RmFjZSgpCiAgICAgbV9iYWNraW5nLT5yZW1vdmVDbGllbnQoKnRoaXMpOwog
fQogCi1SZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQotewotICAgIC8vIEZJWE1FOiBTaG91
bGQgdXNlIHRoZSBEb2N1bWVudCB0byBnZXQgdGhlIHJpZ2h0IHBhcnNpbmcgbW9kZS4KLSAgICBy
ZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihwcm9wZXJ0eUlELCBzdHJp
bmcsIEhUTUxTdGFuZGFyZE1vZGUpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6
c2V0RmFtaWx5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHkpCitFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmFtaWx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIGlmIChmYW1pbHkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAogICAgIFN0
cmluZyBmYW1pbHlOYW1lVG9Vc2UgPSBmYW1pbHk7Ci0gICAgaWYgKGZhbWlseU5hbWVUb1VzZS5j
b250YWlucygnXCcnKSAmJiBkb2N1bWVudC5xdWlya3MoKS5zaG91bGRTdHJpcFF1b3RhdGlvbk1h
cmtJbkZvbnRGYWNlU2V0RmFtaWx5KCkpCisgICAgaWYgKGZhbWlseU5hbWVUb1VzZS5jb250YWlu
cygnXCcnKSAmJiBpczxEb2N1bWVudD4oY29udGV4dCkgJiYgZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLnF1aXJrcygpLnNob3VsZFN0cmlwUXVvdGF0aW9uTWFya0luRm9udEZhY2VTZXRGYW1p
bHkoKSkKICAgICAgICAgZmFtaWx5TmFtZVRvVXNlID0gZmFtaWx5LnJlbW92ZUNoYXJhY3RlcnMo
W10oYXV0byBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnOyB9KTsKIAogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2Mzgx
IERvbid0IHVzZSBhIGxpc3QgaGVyZS4KICAgICAvLyBTZWUgY29uc3VtZUZvbnRGYW1pbHlEZXNj
cmlwdG9yKCkgaW4gQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGZvciB3aHkgd2UncmUgdXNpbmcgaXQu
CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwot
ICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1p
bHlWYWx1ZShmYW1pbHlOYW1lVG9Vc2UpKTsKKyAgICBsaXN0LT5hcHBlbmQoY29udGV4dC5jc3NW
YWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZVRvVXNlKSk7CiAgICAg
Ym9vbCBzdWNjZXNzID0gbV9iYWNraW5nLT5zZXRGYW1pbGllcyhsaXN0KTsKICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogICAgIHJl
dHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHlsZShjb25z
dCBTdHJpbmcmIHN0eWxlKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFN0eWxlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3R5bGUpCiB7CiAg
ICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVN0eWxlKHN0eWxlLCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0eWxl
KCp2YWx1ZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0
V2VpZ2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0KQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldFdlaWdodChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHdlaWdodCkKIHsKICAgICBpZiAod2VpZ2h0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3Ry
aW5nKHdlaWdodCwgQ1NTUHJvcGVydHlGb250V2VpZ2h0KSkgeworICAgIGlmIChhdXRvIHZhbHVl
ID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlV2VpZ2h0KHdlaWdo
dCwgSFRNTFN0YW5kYXJkTW9kZSwgY29udGV4dC5jc3NWYWx1ZVBvb2woKSkpIHsKICAgICAgICAg
bV9iYWNraW5nLT5zZXRXZWlnaHQoKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9y
PHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKK0V4Y2Vw
dGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKIHsKICAgICBpZiAoc3RyZXRjaC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAg
aWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhzdHJldGNoLCBDU1NQcm9wZXJ0eUZvbnRTdHJl
dGNoKSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
OjpwYXJzZUZvbnRGYWNlU3RyZXRjaChzdHJldGNoLCBIVE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0
LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldFN0cmV0Y2goKnZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yMzUsMzEgKzIzMCwzMSBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgdW5p
Y29kZVJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKIAog
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VTdHJp
bmcodW5pY29kZVJhbmdlLCBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSkpCisgICAgaWYgKGF1dG8g
dmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2Rl
UmFuZ2UodW5pY29kZVJhbmdlLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgc3VjY2VzcyA9
IG1fYmFja2luZy0+c2V0VW5pY29kZVJhbmdlKCp2YWx1ZSk7CiAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICByZXR1cm4geyB9
OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmVhdHVyZVNldHRpbmdzKGNv
bnN0IFN0cmluZyYgZmVhdHVyZVNldHRpbmdzKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6
OnNldEZlYXR1cmVTZXR0aW5ncyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIGZlYXR1cmVTZXR0aW5ncykKIHsKICAgICBpZiAoZmVhdHVyZVNldHRpbmdzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAg
ICBhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdzLCBDU1NQcm9wZXJ0eUZv
bnRGZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldv
cmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoZmVhdHVyZVNldHRpbmdzLCBI
VE1MU3RhbmRhcmRNb2RlLCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBtX2JhY2tp
bmctPnNldEZlYXR1cmVTZXR0aW5ncygqdmFsdWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUV4
Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KGNvbnN0IFN0cmluZyYgZGlzcGxh
eSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXREaXNwbGF5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZGlzcGxheSkKIHsKICAgICBpZiAoZGlz
cGxheS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCi0gICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhkaXNwbGF5LCBDU1NQcm9wZXJ0
eUZvbnREaXNwbGF5KSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlRGlzcGxheShkaXNwbGF5LCBIVE1MU3RhbmRhcmRNb2Rl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKSkgewogICAgICAgICBtX2JhY2tpbmctPnNldExvYWRp
bmdCZWhhdmlvcigqdmFsdWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmgKaW5kZXggZmMxN2VhNjFkNmY5MzRhZWVlYWVlM2E2MjRkZWNkMWQ0N2NlMmM2ZC4u
MTQ5ZTBhM2E1YTA0Mjc4M2IyYjFkMTQ2N2QxMTE1MWVmODA5ZjQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmgKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGb250RmFj
ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDU1NGb250RmFjZSYpOwogICAgIHZp
cnR1YWwgfkZvbnRGYWNlKCk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoRG9j
dW1lbnQmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZShj
b25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRXZWlnaHQoY29uc3QgU3Ry
aW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RyZXRjaChjb25zdCBTdHJpbmcmKTsK
KyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRXZWlnaHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldFN0cmV0Y2goU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFVuaWNvZGVSYW5nZShjb25zdCBT
dHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoY29uc3Qg
U3RyaW5nJik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RGlzcGxheShjb25zdCBTdHJpbmcm
KTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGZWF0dXJlU2V0dGluZ3MoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldERp
c3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgU3Ry
aW5nIGZhbWlseSgpIGNvbnN0OwogICAgIFN0cmluZyBzdHlsZSgpIGNvbnN0OwpAQCAtODUsOCAr
ODUsNiBAQCBwdWJsaWM6CiAKICAgICBDU1NGb250RmFjZSYgYmFja2luZygpIHsgcmV0dXJuIG1f
YmFja2luZzsgfQogCi0gICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgQ1NTUHJvcGVydHlJRCk7Ci0KICAgICB2b2lkIGZvbnRTdGF0ZUNoYW5nZWQo
Q1NTRm9udEZhY2UmLCBDU1NGb250RmFjZTo6U3RhdHVzIG9sZFN0YXRlLCBDU1NGb250RmFjZTo6
U3RhdHVzIG5ld1N0YXRlKSBmaW5hbDsKIAogICAgIHZvaWQgcmVmKCkgZmluYWwgeyBSZWZDb3Vu
dGVkOjpyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5pZGwKaW5kZXggYTkwMmNiMDFkOTEzMDJj
ZGY4OWQ3N2QwMjk5Y2NiYWU1ZjVmMjVjMC4uMzc3ZmUxZjVlNzQ4NGQwN2M3MmM4Y2Q0MGNiMGQ5
YWM2MTNlNzk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaWRsCkBAIC00NywxMyArNDcsMTMgQEAg
ZGljdGlvbmFyeSBGb250RmFjZURlc2NyaXB0b3JzIHsKIF0gaW50ZXJmYWNlIEZvbnRGYWNlIHsK
ICAgICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKERPTVN0cmluZyBmYW1pbHksIChE
T01TdHJpbmcgb3IgQmluYXJ5RGF0YSkgc291cmNlLCBvcHRpb25hbCBGb250RmFjZURlc2NyaXB0
b3JzIGRlc2NyaXB0b3JzKTsKIAotICAgIFtTZXR0ZXJDYWxsV2l0aD1Eb2N1bWVudF0gYXR0cmli
dXRlIERPTVN0cmluZyBmYW1pbHk7Ci0gICAgYXR0cmlidXRlIERPTVN0cmluZyBzdHlsZTsKLSAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0
cmV0Y2g7CisgICAgW1NldHRlckNhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJp
YnV0ZSBET01TdHJpbmcgZmFtaWx5OworICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0eWxlOworICAgIFtTZXR0ZXJDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlaWdodDsKKyAg
ICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gYXR0cmlidXRlIERPTVN0
cmluZyBzdHJldGNoOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdW5pY29kZVJhbmdlOwotICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgZmVhdHVyZVNldHRpbmdzOwotICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgZGlzcGxheTsKKyAgICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gYXR0cmlidXRlIERPTVN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CisgICAgW1NldHRlckNhbGxX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZGlzcGxheTsK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGb250RmFjZUxvYWRTdGF0dXMgc3RhdHVzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggNzY0OGY1MDRhNWQ3YTMw
ODAzOTU1NjZkYWIzOGU0M2ZiMDg4MWI4My4uOWRmYzNjNzBmYWRlY2EzY2RmYjBiMGNkNjM3MThl
NDJhMjQ3ZDY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAt
MTA4LDE4ICsxMDgsNiBAQCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigp
OwogfQogCi1Db2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIGlmIChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpw
YXJzZVNpbXBsZUNvbG9yKHN0cmluZykpCi0gICAgICAgIHJldHVybiAqY29sb3I7Ci0KLSAgICBD
U1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFj
ZSgpOwotCi0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9y
V29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29udGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Ci19
Ci0KIENvbG9yIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3IHN0cmluZykK
IHsKICAgICBhdXRvIGtleXdvcmQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwpAQCAtMTM4
LDE1ICsxMjYsNiBAQCBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhl
eENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6
OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsKIH0KIAotT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpGb250UmF3PiBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBDU1NUb2tl
bml6ZXIgdG9rZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0
b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwot
Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJT
YWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLX0KLQogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAo
c3RyaW5nLmlzRW1wdHkoKSkKQEAgLTI2MSwxMyArMjQwLDQgQEAgVmVjdG9yPGRvdWJsZT4gQ1NT
UGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAg
IHJldHVybiBDU1NQYXJzZXJJbXBsOjpwYXJzZUtleWZyYW1lS2V5TGlzdChzZWxlY3Rvcik7CiB9
CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gbWFr
ZVN0cmluZygiQGZvbnQtZmFjZSB7ICIsIGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlE
KSwgIiA6ICIsIHByb3BlcnR5VmFsdWUsICI7IH0iKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gcnVsZSA9IHBhcnNlUnVsZShjb250ZXh0LCBudWxscHRyLCBzdHJpbmcpOwotICAgIGlmICgh
cnVsZSB8fCAhcnVsZS0+aXNGb250RmFjZVJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSkucHJv
cGVydGllcygpLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci19Ci0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGYyMjFkMTgxMWE5NGQyNzQzOGIxYmZi
NzI2NTVjY2Q1NDBjYmYxMDUuLjYwZjE0ZDc4YzUxMTdlZTEyMTU2ZWMzZWY0NDY2NDFjMWNmOWMy
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzQsNiArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3Mg
Q1NTU2VsZWN0b3JMaXN0OworY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29s
OwogY2xhc3MgQ29sb3I7CiBjbGFzcyBFbGVtZW50OwpAQCAtNzksOCArODAsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJv
cGVydHlWYWx1ZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbVN0cmluZyYgcHJv
cGVydHlOYW1lLCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOwogICAgIAotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRm9udEZh
Y2VEZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKLQogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFs
dWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
PSBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBw
YXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBTdHJpbmcmKTsK
QEAgLTkxLDEzICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZh
bHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYs
IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0
aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U1JHQkE8dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0
aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAK
LSAgICBzdGF0aWMgT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBw
YXJzZUZvbnRXb3JrZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3Rh
bmRhcmRNb2RlKTsKLQogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFi
bGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGlt
cG9ydGFudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAKaW5kZXggMmY5ZmFjYTEwM2Q2MGY1NjRkMzNkMWQ0MWRhMmM1OGZiOTIyYjJhNi4u
ODMwMTE5MDEzMGI4NDcyMWIwZTI4ZWM2MDE0YWFmZGJlNjM1ZmZmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTE5MCw2ICsxOTAs
NyBAQCBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoU3RyaW5nVmlldyBzdHJpbmcpCiB9CiAg
ICAgCiB1c2luZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFt
ZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU7CiAKIENTU1Byb3BlcnR5
UGFyc2VyOjpDU1NQcm9wZXJ0eVBhcnNlcihjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAy
NTY+KiBwYXJzZWRQcm9wZXJ0aWVzLCBib29sIGNvbnN1bWVXaGl0ZXNwYWNlKQogICAgIDogbV9y
YW5nZShyYW5nZSkKQEAgLTQyNiw1NCArNDI3LDYgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZVdpbGxDaGFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJu
IHZhbHVlczsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1l
Rm9udEZlYXR1cmVUYWcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gRmVh
dHVyZSB0YWcgbmFtZSBjb25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gNDsKLQotICAgIGNvbnN0IENTU1BhcnNl
clRva2VuJiB0b2tlbiA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAg
Ly8gRmVhdHVyZSB0YWcgbmFtZSBjb21lcyBmaXJzdAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0g
U3RyaW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0b2tlbi52YWx1
ZSgpLmxlbmd0aCgpICE9IHRhZ05hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIEZvbnRUYWcgdGFnOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJz
IHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5kIGluIHRo
ZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2tl
bi52YWx1ZSgpW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIg
PiAweDdFKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHRhZ1tpXSA9IHRv
QVNDSUlMb3dlcihjaGFyYWN0ZXIpOwotICAgIH0KLQotICAgIGludCB0YWdWYWx1ZSA9IDE7Ci0g
ICAgaWYgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29tbWFUb2tl
bikgewotICAgICAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8aW50ZWdl
cj4gfCBvbiB8IG9mZgotICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJS
YXcocmFuZ2UsIDApKQotICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKLSAgICAgICAg
ZWxzZSBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5wZWVrKCku
aWQoKSA9PSBDU1NWYWx1ZU9mZikKLSAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTRm9udEZl
YXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOwotfQotCi1zdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVO
b3JtYWwpCi0gICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IHNldHRpbmdzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwotICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRG
ZWF0dXJlVmFsdWUgPSBjb25zdW1lRm9udEZlYXR1cmVUYWcocmFuZ2UpOwotICAgICAgICBpZiAo
IWZvbnRGZWF0dXJlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
c2V0dGluZ3MtPmFwcGVuZChmb250RmVhdHVyZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
IH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKLSAgICBy
ZXR1cm4gc2V0dGluZ3M7Ci19Ci0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYXRpb25UYWcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7CkBAIC04NTAsMTQwICs4MDMsNiBAQCBzdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFs
LCBDU1NWYWx1ZUJvbGQ+KHJhbmdlKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMp
Ci1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgYXV0byBmaXJzdE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
KHJhbmdlKTsKLSAgICBpZiAoIWZpcnN0TnVtYmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAocmFuZ2UuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyOwotICAg
IGF1dG8gc2Vjb25kTnVtYmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotICAg
IGlmICghc2Vjb25kTnVtYmVyIHx8IGZpcnN0TnVtYmVyLT5mbG9hdFZhbHVlKCkgPiBzZWNvbmRO
dW1iZXItPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBy
ZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmQoZmlyc3ROdW1iZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmVzdWx0LT5hcHBl
bmQoc2Vjb25kTnVtYmVyLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBSZWZQdHI8Q1NT
VmFsdWU+KFdURk1vdmUocmVzdWx0KSk7Ci19Ci0jZWxzZQotc3RhdGljIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEFic29s
dXRlS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29u
c3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1z
dGF0aWMgYm9vbCBmb250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmxvYXQgc3RyZXRjaCkKLXsKLSAg
ICByZXR1cm4gc3RyZXRjaCA+PSAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFs
dWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi0gICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1
ZVJhbmdlTm9uTmVnYXRpdmUpKQotICAgICAgICByZXR1cm4gZm9udFN0cmV0Y2hJc1dpdGhpblJh
bmdlKHBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSA/IHBlcmNlbnQgOiBudWxscHRyOwotI2VuZGlm
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQot
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRT
dHJldGNoS2V5d29yZFZhbHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBh
dXRvIGZpcnN0UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVn
YXRpdmUpOwotICAgIGlmICghZmlyc3RQZXJjZW50IHx8ICFmb250U3RyZXRjaElzV2l0aGluUmFu
Z2UoZmlyc3RQZXJjZW50LT52YWx1ZTxmbG9hdD4oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmIChyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RQZXJjZW50Owot
ICAgIGF1dG8gc2Vjb25kUGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUpOwotICAgIGlmICghc2Vjb25kUGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dp
dGhpblJhbmdlKHNlY29uZFBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSB8fCBmaXJzdFBlcmNlbnQt
PmZsb2F0VmFsdWUoKSA+IHNlY29uZFBlcmNlbnQtPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNl
U2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RQZXJjZW50LnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZFBlcmNlbnQucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgcmV0dXJuIFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1bHQpKTsKLX0KLSNl
bmRpZgotCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxl
S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBj
b25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlx
dWU+KHJhbmdlKTsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3Vt
ZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICAgICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5n
bGUpIHsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1
ZSksCi0gICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShyZXN1bHQtPmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkp
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi1zdGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250
U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQotewotICAgIGF1dG8ga2V5d29yZCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3Jk
VmFsdWUocmFuZ2UpOwotICAgIGlmICgha2V5d29yZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoa2V5d29yZC0+dmFsdWVJRCgpICE9IENTU1ZhbHVlT2JsaXF1ZSB8fCByYW5n
ZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRl
KGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgbm90IGFsbG93IHRoZSB1bml0bGVzcyB6ZXJvLgotICAgIGlmIChhdXRvIGZpcnN0
QW5nbGUgPSBjb25zdW1lQW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgewotICAgICAgICBhdXRvIGZpcnN0
QW5nbGVJbkRlZ3JlZXMgPSBmaXJzdEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NT
X0RFRyk7Ci0gICAgICAgIGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZmlyc3RBbmdsZUlu
RGVncmVlcykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKHJhbmdl
LmF0RW5kKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmds
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5n
ZVZhbHVlOjpjcmVhdGUoa2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5v
dCBhbGxvdyB0aGUgdW5pdGxlc3MgemVyby4KLSAgICAgICAgYXV0byBzZWNvbmRBbmdsZSA9IGNv
bnN1bWVBbmdsZShyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBV
bml0bGVzc1plcm9RdWlyazo6QWxsb3cpOwotICAgICAgICBpZiAoIXNlY29uZEFuZ2xlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc2Vjb25kQW5nbGVJbkRlZ3Jl
ZXMgPSBzZWNvbmRBbmdsZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOwotICAg
ICAgICBpZiAoIWlzRm9udFN0eWxlQW5nbGVJblJhbmdlKHNlY29uZEFuZ2xlSW5EZWdyZWVzKSB8
fCBmaXJzdEFuZ2xlSW5EZWdyZWVzID4gc2Vjb25kQW5nbGVJbkRlZ3JlZXMpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZEFuZ2xlLnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6
Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAg
ICBhdXRvIGZhbWlseU5hbWUgPSBjb25zdW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CkBAIC00MDc4
LDE1ICszODk3LDE1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
U2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFuOgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRWYXJp
YW50RWFzdEFzaWFuKG1fcmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzOgotICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRGZWF0dXJlU2V0dGluZ3MobV9yYW5n
ZSk7CisgICAgICAgIHJldHVybiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhtX3JhbmdlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWls
eToKICAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250RmFtaWx5KG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250V2VpZ2h0OgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRXZWlnaHQo
bV9yYW5nZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgICAgICByZXR1
cm4gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UpOworICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgICAgIHJldHVybiBjb25zdW1lRm9udFN0eWxlKG1f
cmFuZ2UsIG1fY29udGV4dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250U3R5bGUo
bV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3ludGhlc2lzOgogICAgICAgICByZXR1cm4gY29uc3VtZUZv
bnRTeW50aGVzaXMobV9yYW5nZSk7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTQ2
MTUsOTAgKzQ0MzQsNiBAQCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVy
dHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRGYWNlVW5p
Y29kZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
LQotICAgIGRvIHsKLSAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAh
PSBVbmljb2RlUmFuZ2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIFVDaGFyMzIgc3RhcnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOwotICAgICAgICBV
Q2hhcjMyIGVuZCA9IHRva2VuLnVuaWNvZGVSYW5nZUVuZCgpOwotICAgICAgICBpZiAoc3RhcnQg
PiBlbmQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWVzLT5hcHBl
bmQoQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7Ci0gICAgfSB3aGls
ZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwotCi0gICAgcmV0dXJu
IHZhbHVlczsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRGYWNlRm9udERpc3BsYXkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0
dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZUF1dG8sIENTU1ZhbHVlQmxvY2ssIENTU1ZhbHVlU3dh
cCwgQ1NTVmFsdWVGYWxsYmFjaywgQ1NTVmFsdWVPcHRpb25hbD4ocmFuZ2UpOwotfQotCi1zdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZhY2VTcmNVUkkoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgU3Ry
aW5nIHVybCA9IGNvbnN1bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvU3RyaW5nKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8
Q1NTRm9udEZhY2VTcmNWYWx1ZT4gdXJpVmFsdWUgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVh
dGUoY29udGV4dC5jb21wbGV0ZVVSTCh1cmwpLnN0cmluZygpLCBjb250ZXh0LmlzQ29udGVudE9w
YXF1ZSA/IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3Vy
Y2U6Ok5vKTsKLQotICAgIGlmIChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpICE9IENTU1ZhbHVl
Rm9ybWF0KQotICAgICAgICByZXR1cm4gdXJpVmFsdWU7Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250cyBzYXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMg
YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFj
ZVNyY1ZhbHVlIHN0b3JlcyBvbmx5IG9uZSBmb3JtYXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9y
IG5vdy4KLSAgICAvLyBGSVhNRTogV2UncmUgYWxsb3dpbmcgdGhlIGZvcm1hdCB0byBiZSBhbiBp
ZGVudGlmaWVyIGFzIHdlbGwgYXMgYSBzdHJpbmcsIGJlY2F1c2UgdGhlIG9sZAotICAgIC8vIHBh
cnNlciBkaWQuIEl0J3Mgbm90IGNsZWFyIGlmIHdlIG5lZWQgdG8gY29udGludWUgdG8gc3VwcG9y
dCB0aGlzIGJlaGF2aW9yLCBidXQgd2UgaGF2ZSBsb3RzIG9mCi0gICAgLy8gbGF5b3V0IHRlc3Rz
IHRoYXQgcmVseSBvbiBpdC4KLSAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1l
RnVuY3Rpb24ocmFuZ2UpOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhcmcgPSBhcmdzLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKChhcmcudHlwZSgpICE9IFN0cmlu
Z1Rva2VuICYmIGFyZy50eXBlKCkgIT0gSWRlbnRUb2tlbikgfHwgIWFyZ3MuYXRFbmQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgdXJpVmFsdWUtPnNldEZvcm1hdChhcmcudmFsdWUo
KS50b1N0cmluZygpKTsKLSAgICByZXR1cm4gdXJpVmFsdWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250RmFjZVNyY0xvY2FsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQotewotICAgIENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihy
YW5nZSk7Ci0gICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgewotICAg
ICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOwotICAgICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9j
YWwoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChhcmdzLnBlZWsoKS50
eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNvbmNh
dGVuYXRlRmFtaWx5TmFtZShhcmdzKTsKLSAgICAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFs
dWU6OmNyZWF0ZUxvY2FsKGZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUNvbW1hU2VwYXJhdGVkKCk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZWRWYWx1ZTsKLSAgICAgICAgaWYgKHRva2VuLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2Fs
KQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5n
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlU3JjVVJJKHJhbmdlLCBjb250ZXh0KTsKLSAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLX0KLQogYm9vbCBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3IoQ1NTUHJvcGVydHlJRCBwcm9w
SWQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTQ3MTMsMjcgKzQ0
NDgsMjcgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3Io
Q1NTUHJvcGVydHlJRCBwcm9wSWQpCiAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlVW5pY29kZVJhbmdlKG1fcmFuZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1By
b3BlcnR5Rm9udERpc3BsYXk6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNl
Rm9udERpc3BsYXkobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRG
YWNlRm9udERpc3BsYXkobV9yYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgogI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZVJhbmdlKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGVSYW5nZShtX3JhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
ICNlbHNlCi0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZSht
X3JhbmdlKTsKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdl
KG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2Vsc2UKLSAgICAgICAgcGFy
c2VkVmFsdWUgPSBjb25zdW1lRm9udFN0cmV0Y2gobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5
bGU6CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBj
b25zdW1lRm9udFN0eWxlUmFuZ2UobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGVSYW5nZShtX3JhbmdlLCBtX2NvbnRleHQubW9k
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAjZWxzZQotICAgICAgICBwYXJzZWRWYWx1
ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6CkBAIC00NzU3LDcgKzQ0OTIsNyBAQCBib29s
IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlE
IHByb3BJZCkKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CiAgICAgICAgIHJldHVy
biBjb25zdW1lRm9udFZhcmlhbnRTaG9ydGhhbmQoZmFsc2UpOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250RmVhdHVyZVNldHRpbmdzOgotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVG
b250RmVhdHVyZVNldHRpbmdzKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQ4MTQsNyAr
NDU0OSw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJvb2wgaW1wb3J0
YW50KQogICAgIHdoaWxlICghbV9yYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIENTU1ZhbHVlSUQg
aWQgPSBtX3JhbmdlLnBlZWsoKS5pZCgpOwogICAgICAgICBpZiAoIWZvbnRTdHlsZSkgewotICAg
ICAgICAgICAgZm9udFN0eWxlID0gY29uc3VtZUZvbnRTdHlsZShtX3JhbmdlLCBtX2NvbnRleHQu
bW9kZSk7CisgICAgICAgICAgICBmb250U3R5bGUgPSBjb25zdW1lRm9udFN0eWxlKG1fcmFuZ2Us
IG1fY29udGV4dC5tb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICAgICAgICAg
IGlmIChmb250U3R5bGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAg
LTQ4MzEsNyArNDU2Niw3IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJv
b2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghZm9udFN0cmV0Y2gpIHsKLSAgICAgICAgICAgIGZvbnRTdHJldGNoID0gY29uc3Vt
ZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKG1fcmFuZ2UpOworICAgICAgICAgICAgZm9udFN0cmV0
Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUobV9yYW5nZSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CiAgICAgICAgICAgICBpZiAoZm9udFN0cmV0Y2gpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCAwYTBiYTRiOTE0MjRhMWFkYzBhYmIxYTM2Yjc5OWM2
MmU5ZjFlMjIwLi43MWExYWQ4YjBiNmMwZTU2M2NiYWI1ZDZlYjFhYThhZmM4MTJlMDZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0yNCw2
ICsyNCw3IEBACiAKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nVmlldy5oPgogCkBAIC0zMSw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsK
IGNsYXNzIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCBkYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVk
MGU5Li5lYjdlZmJjZmNjOTIzNTFhNTVlNWM5ZWEzNmExZmRhZWViNTk5ZDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC05Nyw5ICs5NywxMCBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVt
YmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZwogLy8gRklYTUU6
IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlv
blZhbHVlLmNwcC4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IENh
bGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFs
bCkKKyAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2VBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSkKICAgICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAg
ICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV9jc3NWYWx1ZVBvb2woY3NzVmFsdWVQ
b29sKQogICAgIHsKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CkBA
IC0xMTQsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3Jhbmdl
OwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShX
VEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CisgICAgICAgIHJldHVybiBtX2Nzc1ZhbHVlUG9vbC5jcmVh
dGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTIy
LDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RkOjpy
b3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSks
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIG1fY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gT3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUlu
dGVnZXJUeXBlUmF3KGRvdWJsZSBtaW5pbXVtVmFsdWUpCkBAIC0xMzgsNyArMTM5LDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91YmxlVmFs
dWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gbV9jc3NWYWx1
ZVBvb2wuY3JlYXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1i
ZXJSYXcoKQpAQCAtMTk5LDYgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CiAg
ICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9jYWxjVmFsdWU7CisgICAgQ1NTVmFsdWVQb29sJiBt
X2Nzc1ZhbHVlUG9vbDsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IE9wdGlvbmFs
PEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKQEAgLTMxNiw5ICszMTgsMTQgQEAgT3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcldv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFs
dWVQb29sKQogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNDE3LDEwICs0MjQsMTUgQEAgT3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZSB2YWx1ZVIKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkK
IHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIg
Y2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNv
bnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAg
ICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOwpAQCAtNDI5LDcgKzQ0MSw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKICAgICB9
CiAKICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19Q
RVJDRU5UQUdFKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtNTIyLDEwICs1MzQsMTUg
QEAgT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3MKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsg
dW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCiB7CiAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICAgICAgQ2FsY1Bh
cnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVS
YW5nZUFsbCwgY3NzVmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSog
Y2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChjYWxj
dWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKQEAgLTUzNCw3ICs1
NTEsNyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZQogICAgIH0KIAogICAgIGlmIChhdXRvIGFu
Z2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+dHlwZSk7CiAKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTYyNSw5ICs2NDIsMTQgQEAgT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogfQogCiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZShyYW5nZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50
UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtMjk5OCw3ICszMDIwLDcgQEAgT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxp
bmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnMKICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1PcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtl
clNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7CiAgICAgLy8gTGV0J3Mg
Y2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3aGVyZSBpbiB0aGUg
c2hvcnRoYW5kLgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAppbmRleCA4MmY0NDJmYjcwMmMzNjAxOGZkNmEwNWYzZDNmYTQ4NmE2OTY5MDkxLi40NzMy
ODJhNGM3YzMwNjYyMDE1ODYxOTliYjAxMWFlODk5YTY4MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTgyLDI0
ICs4MiwyOSBAQCBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQQogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIE9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFs
dWVQb29sJik7CiBPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBV
bml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFu
Z2UsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7
CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRp
b25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkZvcmJpZCk7CiAKIE9wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlk
ZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1Zh
bHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5n
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBl
cik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlELi4uPiBpbmxpbmUgYm9vbCBpZGVu
dE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJ
ZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK3Rl
bXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1
ZVBvb2wmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3VzdG9tSWRlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
U3RyaW5nKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTE3Miw3ICsxNzcsNyBAQCBPcHRpb25h
bDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CiBPcHRpb25hbDxWZWN0b3I8Rm9udEZhbWlseVJhdz4+IGNvbnN1bWVGb250RmFtaWx5UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIE9wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9u
dFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29u
c3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwot
T3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKIGNvbnN0IEF0b21TdHJpbmcmIGdl
bmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQpOwogV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1p
bHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFtaWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKQEAgLTE5
NCwxMCArMTk5LDE1IEBAIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IE9wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlCiB9CiAKIHRlbXBsYXRlPENT
U1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRX
b3JrZXJTYWZlPG5hbWVzLi4uPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9
CisKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
VmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkg
IT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLmlkKCkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSk7CiB9CiAKIGlu
bGluZSBib29sIGlzRm9udFN0eWxlQW5nbGVJblJhbmdlKGRvdWJsZSBhbmdsZUluRGVncmVlcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGE1Njc0OWFmNjRjOGJkNzkzZTA3ODY4Zjk0
ZDkwMmIzZWY3OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCkBAIC0wLDAgKzEsNDU2IEBACisvLyBD
b3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKEMpIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKy8vIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorLy8KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U3R5bGVWYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU1BhcnNlckZhc3RQYXRocy5oIgorI2luY2x1ZGUgIkNTU1BhcnNlckltcGwuaCIKKyNp
bmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJD
U1NUb2tlbml6ZXIuaCIKKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisjaW5jbHVkZSAi
Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczsKK3VzaW5nIG5hbWVz
cGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOworCitPcHRpb25hbDxGb250
UmF3PiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udChjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIENTU1Rva2VuaXpl
ciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlKHRva2Vu
aXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAg
ICByZXR1cm4gY29uc3VtZUZvbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCitDb2xv
ciBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgaWYgKGF1dG8gY29sb3IgPSBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNl
U2ltcGxlQ29sb3Ioc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICpjb2xvcjsKKworICAgIENTU1Rv
a2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdl
KHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7
CisKKyAgICByZXR1cm4gY29uc3VtZUNvbG9yV29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyhjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJ
bXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFu
Z2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1l
V2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjKHJhbmdlLCBj
b250ZXh0KTsKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRy
PENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VTdHls
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIo
Y29udGV4dCwgc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gcGFyc2Vy
LnRva2VuaXplcigpLT50b2tlblJhbmdlKCk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2Uo
KTsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBwYXJzZWRWYWx1ZSA9CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAg
Y29uc3VtZUZvbnRTdHlsZVJhbmdlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNzc1ZhbHVlUG9vbCk7
CisjZWxzZQorICAgICAgICBjb25zdW1lRm9udFN0eWxlKHJhbmdlLCBjb250ZXh0Lm1vZGUsIGNz
c1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVu
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsK
K30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNl
Rm9udEZhY2VXZWlnaHQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIENTU1BhcnNl
ckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBy
YW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUgPQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9O
VFMpCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVSYW5nZShyYW5nZSwgY3NzVmFs
dWVQb29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUocmFuZ2Us
IGNzc1ZhbHVlUG9vbCk7CisjZW5kaWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5h
dEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1
ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBh
cnNlRm9udEZhY2VTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQ
YXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFu
Z2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5j
b25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0KKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgICAgICBjb25zdW1lRm9udFN0cmV0Y2hSYW5nZShyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbHNlCisgICAgICAgIGNvbnN1bWVGb250U3RyZXRjaChyYW5nZSwgY3NzVmFsdWVQ
b29sKTsKKyNlbmRpZgorICAgIGlmICghcGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitS
ZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFj
ZVVuaWNvZGVSYW5nZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJpbmcp
OworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCktPnRv
a2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVl
ID0gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKHJhbmdlKTsKKyAgICBpZiAoIXBhcnNlZFZh
bHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNl
cldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9r
ZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdl
LmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUg
PSBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhyYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICBp
ZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
cm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VEaXNwbGF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBDU1NWYWx1ZVBvb2wm
IGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihjb250ZXh0LCBzdHJp
bmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVyKCkt
PnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlmIChy
YW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNlZFZh
bHVlID0gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXkocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cisg
ICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAhcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK25hbWVzcGFjZSBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlIHsKKworc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUZvbnRGYWNlU3JjVVJJKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAgIFN0cmluZyB1cmwgPSBjb25zdW1lVXJs
QXNTdHJpbmdWaWV3KHJhbmdlKS50b1N0cmluZygpOworICAgIGlmICh1cmwuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+
IHVyaVZhbHVlID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKGNvbnRleHQuY29tcGxldGVV
UkwodXJsKS5zdHJpbmcoKSwgY29udGV4dC5pc0NvbnRlbnRPcGFxdWUgPyBMb2FkZWRGcm9tT3Bh
cXVlU291cmNlOjpZZXMgOiBMb2FkZWRGcm9tT3BhcXVlU291cmNlOjpObyk7CisKKyAgICBpZiAo
cmFuZ2UucGVlaygpLmZ1bmN0aW9uSWQoKSAhPSBDU1NWYWx1ZUZvcm1hdCkKKyAgICAgICAgcmV0
dXJuIHVyaVZhbHVlOworCisgICAgLy8gRklYTUU6IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtZm9udHMgc2F5cyB0aGF0IGZvcm1hdCgpIGNvbnRhaW5zIGEgY29tbWEtc2VwYXJhdGVkIGxp
c3Qgb2Ygc3RyaW5ncywKKyAgICAvLyBidXQgQ1NTRm9udEZhY2VTcmNWYWx1ZSBzdG9yZXMgb25s
eSBvbmUgZm9ybWF0LiBBbGxvd2luZyBvbmUgZm9ybWF0IGZvciBub3cuCisgICAgLy8gRklYTUU6
IFdlJ3JlIGFsbG93aW5nIHRoZSBmb3JtYXQgdG8gYmUgYW4gaWRlbnRpZmllciBhcyB3ZWxsIGFz
IGEgc3RyaW5nLCBiZWNhdXNlIHRoZSBvbGQKKyAgICAvLyBwYXJzZXIgZGlkLiBJdCdzIG5vdCBj
bGVhciBpZiB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgYnV0
IHdlIGhhdmUgbG90cyBvZgorICAgIC8vIGxheW91dCB0ZXN0cyB0aGF0IHJlbHkgb24gaXQuCisg
ICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOworICAgIGlmICgoYXJnLnR5cGUoKSAhPSBTdHJpbmdUb2tlbiAmJiBhcmcudHlwZSgp
ICE9IElkZW50VG9rZW4pIHx8ICFhcmdzLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7CisgICAg
cmV0dXJuIHVyaVZhbHVlOworfQorCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9u
dEZhY2VTcmNMb2NhbChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOworICAgIGlmIChhcmdz
LnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pIHsKKyAgICAgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIGFyZyA9IGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAg
aWYgKCFhcmdzLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGFyZy52YWx1ZSgpLnRvU3Ry
aW5nKCkpOworICAgIH0KKyAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4p
IHsKKyAgICAgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRlbmF0ZUZhbWlseU5hbWUoYXJn
cyk7CisgICAgICAgIGlmICghYXJncy5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChmYW1p
bHlOYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CisKKyAgICBk
byB7CisgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsK
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKKyAgICAgICAgaWYgKHRva2Vu
LmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2FsKQorICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5nZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjVVJJKHJhbmdlLCBjb250ZXh0KTsK
KyAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSk7CisgICAg
cmV0dXJuIHZhbHVlczsKK30KKworUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9u
dFN0eWxlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CisjaWYgRU5B
QkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFs
dWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NGb250
U3R5bGVWYWx1ZTo6Y3JlYXRlKGNzc1ZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUo
cmVzdWx0LT5hbmdsZS0+dmFsdWUsIHJlc3VsdC0+YW5nbGUtPnR5cGUpKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKGNzc1ZhbHVl
UG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitzdGF0aWMg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sK
KyAgICByZXR1cm4gY29uc3VtZUlkZW50V29ya2VyU2FmZTxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFs
dWVJdGFsaWMsIENTU1ZhbHVlT2JsaXF1ZT4ocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cit9CisKK1Jl
ZlB0cjxDU1NGb250U3R5bGVSYW5nZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlUmFuZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTVmFs
dWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgYXV0byBrZXl3b3JkID0gY29uc3VtZUZvbnRT
dHlsZUtleXdvcmRWYWx1ZShyYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICBpZiAoIWtleXdvcmQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGtleXdvcmQtPnZhbHVlSUQoKSAh
PSBDU1NWYWx1ZU9ibGlxdWUgfHwgcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIENTU0Zv
bnRTdHlsZVJhbmdlVmFsdWU6OmNyZWF0ZShrZXl3b3JkLnJlbGVhc2VOb25OdWxsKCkpOworCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5vdCBhbGxvdyB0aGUgdW5pdGxlc3Mg
emVyby4KKyAgICBpZiAoYXV0byBmaXJzdEFuZ2xlID0gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShy
YW5nZSwgY3NzUGFyc2VyTW9kZSwgY3NzVmFsdWVQb29sLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKKyAgICAgICAgYXV0byBmaXJzdEFuZ2xlSW5E
ZWdyZWVzID0gZmlyc3RBbmdsZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOwor
ICAgICAgICBpZiAoIWlzRm9udFN0eWxlQW5nbGVJblJhbmdlKGZpcnN0QW5nbGVJbkRlZ3JlZXMp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChyYW5nZS5hdEVuZCgp
KSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6
Y3JlYXRlKGtleXdvcmQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBub3QgYWxsb3cg
dGhlIHVuaXRsZXNzIHplcm8uCisgICAgICAgIGF1dG8gc2Vjb25kQW5nbGUgPSBjb25zdW1lQW5n
bGVXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBjc3NWYWx1ZVBvb2wsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KTsKKyAgICAgICAgaWYgKCFz
ZWNvbmRBbmdsZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHNl
Y29uZEFuZ2xlSW5EZWdyZWVzID0gc2Vjb25kQW5nbGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
OjpDU1NfREVHKTsKKyAgICAgICAgaWYgKCFpc0ZvbnRTdHlsZUFuZ2xlSW5SYW5nZShzZWNvbmRB
bmdsZUluRGVncmVlcykgfHwgZmlyc3RBbmdsZUluRGVncmVlcyA+IHNlY29uZEFuZ2xlSW5EZWdy
ZWVzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICByZXN1bHQtPmFw
cGVuZChmaXJzdEFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICByZXN1bHQtPmFwcGVu
ZChzZWNvbmRBbmdsZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVJhbmdlVmFsdWU6OmNyZWF0ZShrZXl3b3JkLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
cmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisjZW5kaWYKKworc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZUtl
eXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NW
YWx1ZVBvb2wpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFdvcmtlclNhZmU8Q1NTVmFsdWVO
b3JtYWwsIENTU1ZhbHVlQm9sZD4ocmFuZ2UsIGNzc1ZhbHVlUG9vbCk7Cit9CisKKyNpZiBFTkFC
TEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFi
c29sdXRlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0QWJz
b2x1dGVLZXl3b3JkVmFsdWUocmFuZ2UsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgYXV0byBmaXJzdE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29y
a2VyU2FmZShyYW5nZSwgY3NzVmFsdWVQb29sKTsKKyAgICBpZiAoIWZpcnN0TnVtYmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZpcnN0TnVtYmVyOworICAgIGF1dG8gc2Vjb25kTnVtYmVyID0gY29uc3VtZUZvbnRXZWln
aHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBjc3NWYWx1ZVBvb2wpOworICAgIGlmICghc2Vjb25k
TnVtYmVyIHx8IGZpcnN0TnVtYmVyLT5mbG9hdFZhbHVlKCkgPiBzZWNvbmROdW1iZXItPmZsb2F0
VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgcmVzdWx0LT5hcHBlbmQoZmly
c3ROdW1iZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmVzdWx0LT5hcHBlbmQoc2Vjb25kTnVt
YmVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1v
dmUocmVzdWx0KSk7Cit9CisjZWxzZQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
Rm9udFdlaWdodEFic29sdXRlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBv
b2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdl
aWdodEFic29sdXRlS2V5d29yZFZhbHVlKHJhbmdlLCBjc3NWYWx1ZVBvb2wpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSwg
Y3NzVmFsdWVQb29sKTsKK30KKyNlbmRpZgorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCit7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNv
bnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitzdGF0aWMgYm9vbCBm
b250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmxvYXQgc3RyZXRjaCkKK3sKKyAgICByZXR1cm4gc3Ry
ZXRjaCA+PSAwOworfQorI2VuZGlmCisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUZvbnRTdHJldGNoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNz
c1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hL
ZXl3b3JkVmFsdWUocmFuZ2UsIGNzc1ZhbHVlUG9vbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoYXV0byBwZXJjZW50ID0gY29u
c3VtZVBlcmNlbnRXb3JrZXJTYWZlKHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUsIGNzc1Zh
bHVlUG9vbCkpCisgICAgICAgIHJldHVybiBmb250U3RyZXRjaElzV2l0aGluUmFuZ2UocGVyY2Vu
dC0+dmFsdWU8ZmxvYXQ+KCkpID8gcGVyY2VudCA6IG51bGxwdHI7CisjZW5kaWYKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBj
b25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUocmFuZ2UsIGNzc1ZhbHVlUG9vbCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBmaXJzdFBlcmNlbnQgPSBjb25zdW1lUGVyY2Vu
dFdvcmtlclNhZmUocmFuZ2UsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwgY3NzVmFsdWVQb29sKTsK
KyAgICBpZiAoIWZpcnN0UGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKGZpcnN0
UGVyY2VudC0+dmFsdWU8ZmxvYXQ+KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0UGVyY2VudDsKKyAgICBhdXRv
IHNlY29uZFBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSwgY3NzVmFsdWVQb29sKTsKKyAgICBpZiAoIXNlY29uZFBlcmNlbnQgfHwg
IWZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZShzZWNvbmRQZXJjZW50LT52YWx1ZTxmbG9hdD4oKSkg
fHwgZmlyc3RQZXJjZW50LT5mbG9hdFZhbHVlKCkgPiBzZWNvbmRQZXJjZW50LT5mbG9hdFZhbHVl
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0UGVy
Y2VudC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZXN1bHQtPmFwcGVuZChzZWNvbmRQZXJjZW50
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1vdmUo
cmVzdWx0KSk7Cit9CisjZW5kaWYKKworUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRG
YWNlVW5pY29kZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKKworICAgIGRvIHsKKyAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0g
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUoKSAhPSBVbmljb2RlUmFuZ2VUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIFVDaGFyMzIgc3RhcnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOworICAg
ICAgICBVQ2hhcjMyIGVuZCA9IHRva2VuLnVuaWNvZGVSYW5nZUVuZCgpOworICAgICAgICBpZiAo
c3RhcnQgPiBlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdmFsdWVz
LT5hcHBlbmQoQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7CisgICAg
fSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOworCisgICAg
cmV0dXJuIHZhbHVlczsKK30KKworc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBj
b25zdW1lRm9udEZlYXR1cmVUYWcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAg
Ly8gRmVhdHVyZSB0YWcgbmFtZSBjb25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0YWdOYW1lTGVuZ3RoID0gNDsKKworICAgIGNvbnN0IENT
U1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgLy8gRmVhdHVyZSB0YWcgbmFtZSBjb21lcyBmaXJzdAorICAgIGlmICh0b2tlbi50eXBl
KCkgIT0gU3RyaW5nVG9rZW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh0b2tl
bi52YWx1ZSgpLmxlbmd0aCgpICE9IHRhZ05hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIAorICAgIEZvbnRUYWcgdGFnOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0YWcuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFy
YWN0ZXJzIHRvIDB4MjAtMHg3RSwgZm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5k
IGluIHRoZSBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uLgorICAgICAgICBVQ2hhciBjaGFyYWN0ZXIg
PSB0b2tlbi52YWx1ZSgpW2ldOworICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFy
YWN0ZXIgPiAweDdFKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHRhZ1tp
XSA9IHRvQVNDSUlMb3dlcihjaGFyYWN0ZXIpOworICAgIH0KKworICAgIGludCB0YWdWYWx1ZSA9
IDE7CisgICAgaWYgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29t
bWFUb2tlbikgeworICAgICAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8
aW50ZWdlcj4gfCBvbiB8IG9mZgorICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUlu
dGVnZXJSYXcocmFuZ2UsIDApKQorICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKKyAg
ICAgICAgZWxzZSBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5w
ZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU9mZikKKyAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gQ1NT
Rm9udEZlYXR1cmVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOworfQorCitS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250RmVhdHVyZVNldHRpbmdzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKK3sKKyAgICBpZiAocmFu
Z2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgIHJldHVybiBjb25zdW1l
SWRlbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NWYWx1ZVBvb2wpOworICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHNldHRpbmdzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwor
ICAgIGRvIHsKKyAgICAgICAgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRGZWF0dXJl
VmFsdWUgPSBjb25zdW1lRm9udEZlYXR1cmVUYWcocmFuZ2UpOworICAgICAgICBpZiAoIWZvbnRG
ZWF0dXJlVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2V0dGlu
Z3MtPmFwcGVuZChmb250RmVhdHVyZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0gd2hp
bGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKKyAgICByZXR1cm4g
c2V0dGluZ3M7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRGYWNl
Rm9udERpc3BsYXkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3Nz
VmFsdWVQb29sKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlPENTU1ZhbHVl
QXV0bywgQ1NTVmFsdWVCbG9jaywgQ1NTVmFsdWVTd2FwLCBDU1NWYWx1ZUZhbGxiYWNrLCBDU1NW
YWx1ZU9wdGlvbmFsPihyYW5nZSwgY3NzVmFsdWVQb29sKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlcldvcmtlclNhZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjA5MmEwMGU1NDQzZmExZTU1YzI4NjQwZGRh
YjQyN2FiZjM0ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaApAQCAtMCwwICsxLDgwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ1NTUGFyc2VyQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NGb250U3R5bGVWYWx1ZTsKK2NsYXNzIENTU0Zv
bnRTdHlsZVJhbmdlVmFsdWU7CitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsK
K2NsYXNzIENTU1ZhbHVlUG9vbDsKK2NsYXNzIENvbG9yOworCituYW1lc3BhY2UgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCitjbGFzcyBDU1NQcm9wZXJ0
eVBhcnNlcldvcmtlclNhZmUgeworcHVibGljOgorICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OkZvbnRSYXc+IHBhcnNlRm9udChjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0g
SFRNTFN0YW5kYXJkTW9kZSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFy
c2VGb250RmFjZVNyYyhjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7Cisg
ICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZVN0eWxlKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBDU1NWYWx1ZVBvb2wmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNlV2VpZ2h0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmLCBDU1NWYWx1ZVBvb2wmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZUZvbnRGYWNlU3RyZXRjaChjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiwgQ1NTVmFsdWVQb29sJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZShjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZUZlYXR1
cmVTZXR0aW5ncyhjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQ1NTVmFs
dWVQb29sJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZURpc3Bs
YXkoY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIENTU1ZhbHVlUG9vbCYp
OworfTsKKworbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmUgewor
CitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9udEZhY2VTcmMoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NGb250U3R5bGVWYWx1
ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwg
Q1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3Ry
ZXRjaEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9u
dEZhY2VVbmljb2RlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFs
dWVQb29sJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250RmFjZUZvbnRE
aXNwbGF5KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKKyNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVG
b250U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFs
dWVQb29sJik7CitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVSYW5n
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVGb250U3RyZXRjaFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBv
b2wmKTsKKyNlbmRpZgorI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NWYWx1ZVBvb2wmKTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAppbmRleCBlNzUwYTYy
N2FiNjBiYzkzZmRiNWY3NTg1OTgzZTZkYTU0OWViYjZkLi43ZWNjZDYxMDgwY2M4YmI4MDEyNDM0
ZGVmYmU5NTBmMjAxNDgzMTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ1NTVmFsdWVQ
b29sLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIK
ICNpbmNsdWRlICJET01UaW1lci5oIgpAQCAtMjMzLDYgKzIzNCwxMSBAQCBGb250Q2FjaGUmIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZvbnRDYWNoZSgpCiAgICAgcmV0dXJuIEZvbnRDYWNoZTo6
c2luZ2xldG9uKCk7CiB9CiAKK0NTU1ZhbHVlUG9vbCYgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
Y3NzVmFsdWVQb29sKCkKK3sKKyAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKTsK
K30KKwogc3RkOjp1bmlxdWVfcHRyPEZvbnRMb2FkUmVxdWVzdD4gU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6Zm9udExvYWRSZXF1ZXN0KFN0cmluZyYsIGJvb2wsIGJvb2wsIExvYWRlZEZyb21PcGFx
dWVTb3VyY2UpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCBjOTk4YjEyZjI5Y2M2OTY4YjljOTY2NWIwNjVm
ZDEyZDc4ZDU3YjgyLi4xMmJhNDY3ZGYxYzIzN2ZiODIzYzlhZmU5MTQzM2UwOGQ5NWE4YTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTYyLDYg
KzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRXZlbnRMb29wOwogY2xhc3MgQ2Fj
aGVkU2NyaXB0OwogY2xhc3MgQ1NTRm9udFNlbGVjdG9yOworY2xhc3MgQ1NTVmFsdWVQb29sOwog
Y2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgRXZlbnRRdWV1ZTsKIGNsYXNzIEV2ZW50TG9v
cFRhc2tHcm91cDsKQEAgLTE2Nyw2ICsxNjgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZv
bnRDYWNoZSYgZm9udENhY2hlKCk7CiAgICAgdmlydHVhbCBDU1NGb250U2VsZWN0b3IqIGNzc0Zv
bnRTZWxlY3RvcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIENTU1ZhbHVlUG9v
bCYgY3NzVmFsdWVQb29sKCk7CiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udExvYWRS
ZXF1ZXN0PiBmb250TG9hZFJlcXVlc3QoU3RyaW5nJiB1cmwsIGJvb2wgaXNTVkcsIGJvb2wgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSwgTG9hZGVkRnJvbU9wYXF1ZVNv
dXJjZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luTG9hZGluZ0ZvbnRTb29uKEZvbnRMb2FkUmVx
dWVzdCYpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCAxNDE1NTdmZGM5N2I0MjBiYzEyMzljMTMx
Nzc0ZjM0N2M2ZWNjMDRmLi5iZjI3ZDkxNTc5ZTNlYjgzYTAwOTcxMWRhY2E5NjhhMDIwYjZjNjMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCIKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1
ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNl
cldvcmtlclNhZmUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnRXaXRob3V0VXBkYXRpbmdTdHlsZShjb25z
dCBTdHJpbmcmIG5ld0ZvbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWNjb3JkaW5nIHRv
IGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwv
MDk0Ny5odG1sLAotICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVz
dCBiZSBpZ25vcmVkLiBwYXJzZUZvbnRXb3JrZXJTYWZlKCkgaWdub3JlcyB0aGVzZS4KLSAgICBh
dXRvIGZvbnRSYXcgPSBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3Ry
aWN0VG9DU1NQYXJzZXJNb2RlKCF1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpKSk7Cisg
ICAgLy8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQu
IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250KCkgaWdub3JlcyB0aGVzZS4K
KyAgICBhdXRvIGZvbnRSYXcgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9u
dChuZXdGb250LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFy
c2VNb2RlKCkpKTsKICAgICBpZiAoIWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCmluZGV4IDkxOGU3YzA5ZjA2NWIx
ZmUxMGIxN2E5OTE0ZmM4MjVjNDU0M2E0YTkuLmIwYzYyNTk0MmIyYjUwYjgxYjQ4NjBkNGNiZWI5
ZThhMmNmODFmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5j
cHAKQEAgLTM3LDEwICszNywxMiBAQAogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oIgogI2luY2x1ZGUgIk9mZnNj
cmVlbkNhbnZhcy5oIgogI2VuZGlmCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgpAQCAtNTcsNyAr
NTksNyBAQCBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIENhbnZh
c0Jhc2UmIGNhbnZhc0Jhc2UpCiB7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAg
aWYgKGNhbnZhc0Jhc2UuaXNPZmZzY3JlZW5DYW52YXMoKSkKLSAgICAgICAgcmV0dXJuIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcldvcmtlclNhZmUoY29sb3JTdHJpbmcpOworICAgICAgICByZXR1cm4g
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKGNhbnZhc0Jhc2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAppbmRleCA4YWU0OTg0MmI5MGE4YmZmYWQxNmQ3MzkzN2E1MjFkMzFh
ZmE1OTAyLi4wNGQ5OGI2OWQ2OTMyNDk4NTUzMmY4OGFiY2JjYmJhZWEwZGVkZDRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpZiBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKIAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1
ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKQEAgLTcxLDggKzcxLDggQEAgdm9pZCBPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL2xpc3RzLncz
Lm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLWh0bWwvMjAwOUp1bC8wOTQ3Lmh0bWwsCi0gICAg
Ly8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQuIHBh
cnNlRm9udFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgotICAgIGF1dG8gZm9udFJhdyA9IENT
U1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NTU1BhcnNlck1v
ZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKCkpKTsKKyAgICAvLyB0aGUgImluaGVy
aXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4gQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1dG8gZm9udFJh
dyA9IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250KG5ld0ZvbnQsIHN0cmlj
dFRvQ1NTUGFyc2VyTW9kZSghdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUoKSkpOwogICAg
IGlmICghZm9udFJhdykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggMzdiZGYyOTE0N2UzNmU0NzYyYmJmYmE0ZTM4ZTY4
N2YyZTg0MjI1ZS4uNjJkYTMxODM1MzYxZDQwYzMwNjU4OWVmYWMwOGRmMTQzNDFmY2UwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMTE3LDcgKzEx
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUltYWdlQml0bWFwKEltYWdlQml0bWFwOjpT
b3VyY2UmJiwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIEltYWdlQml0bWFwOjpQcm9taXNlJiYpOwog
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCaXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYmLCBpbnQgc3gs
IGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFnZUJpdG1h
cDo6UHJvbWlzZSYmKTsKIAotICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CisgICAg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2woKSBmaW5hbDsKICAgICBDU1NGb250U2VsZWN0b3Iq
IGNzc0ZvbnRTZWxlY3RvcigpIGZpbmFsOwogICAgIEZvbnRDYWNoZSYgZm9udENhY2hlKCkgZmlu
YWw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426088</attachid>
            <date>2021-04-15 02:10:24 -0700</date>
            <delta_ts>2021-04-15 04:14:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224426-20210415101023.patch</filename>
            <type>text/plain</type>
            <size>84424</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1NDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTBlMTA0ZGU3MTkyMDhk
ZTJlODc1YTU2OGRhYTkzNjAzZTM3ZTViMi4uZTVmZTFhYThlZDBkYjg1NjQ4OThmZjFiYzUwOTc0
MmZjNWNhNjlmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAyMS0wNC0xNCAgQ2hy
aXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgTWFrZSBGb250RmFjZSBwYXJz
aW5nIHdvcmtlci1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBNYWtlIENTUyBGb250RmFjZSBwcm9wZXJ0eSBwYXJzaW5nIHNhZmUgdG8gZG8gaW4gYSBX
b3JrZXIuIEluc3RlYWQgb2YKKyAgICAgICAgY29uc3RydWN0aW5nIGEgcnVsZSBwZXIgcHJvcGVy
dHkgYW5kIHVzaW5nIHRoZSBmdWxsIENTU1Byb3BlcnR5UGFyc2VyCisgICAgICAgIHBhdGgsIGlu
c3RlYWQgZmFjdG9yIG91dCB0aGUgc3BlY2lmaWMsIG5lY2Vzc2FyeSBwcm9wZXJ0eSBwYXJzZXJz
IGludG8gYQorICAgICAgICBuZXcgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlIGFuZCBtYWtl
IHN1cmUgdGhleSdyZSBzYWZlIHRvIHVzZSBpbiBhCisgICAgICAgIFdvcmtlciAobWFpbmx5IGJ5
IGFsbG93aW5nIGZvciBzcGVjaWZ5aW5nIHRoZSBDU1NWYWx1ZVBvb2wgc28gdGhhdAorICAgICAg
ICBtYWluLXRocmVhZCBzaW5nbGV0b25zIGRvbid0IGdldCB1c2VkKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OiBBZGQgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcC8uaAorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGNzcy9Gb250RmFjZS5j
cHA6IENhbGwgc2V0dGVycyB3aXRoIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHNvCisgICAg
ICAgICAgdGhhdCB3ZSBoYXZlIGFjY2VzcyB0byA6OmNzc1ZhbHVlUG9vbCgpIGFuZCB1c2UgbmV3
IHdvcmtlci1zYWZlCisgICAgICAgICAgcGFyc2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldEZh
bWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhY2U6OnNldFdlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFj
ZTo6c2V0U3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c2V0VW5pY29kZVJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzZXRGZWF0dXJlU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnNldERpc3BsYXkpOgorICAgICAgICAqIGNzcy9G
b250RmFjZS5oOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5pZGw6CisKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1BhcnNlci5jcHA6IE1vdmUgV29ya2VyU2FmZSBwYXJzaW5nIGZ1bmN0aW9ucyB0
bworICAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZSBhbmQgcmVtb3ZlIG5vdy11
bm5lY2Vzc2FyeQorICAgICAgICAgIHBhcnNlRm9udEZhY2VEZXNjcmlwdG9yLgorICAgICAgICAq
IGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcDogTW92ZSBGb250RmFjZSBwcm9wZXJ0eSBwYXJzZXJzIHRvCisgICAgICAg
ICAgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXI6OnBhcnNlRm9udEZhY2VEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRm9udCk6CisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlci5oOgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuY3BwOiBBZGQgV29ya2VyU2FmZSB2YXJpYW50cyBmb3IKKyAgICAgICAgICBz
b21lIG9mIHRoZSBiYXNpYyBjb25zdW1lIGhlbHBlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFy
c2VyOjpjb25zdW1lSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0
TnVtYmVyV29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2VyU2FmZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVu
dFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lRm9udFJhdyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZUlkZW50V29ya2VyU2FmZSk6CisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVNyYyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBh
cnNlRm9udEZhY2VXZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlU3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNl
RmVhdHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyV29y
a2VyU2FmZTo6cGFyc2VGb250RmFjZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlU3JjVVJJKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1
bWVGb250RmFjZVNyY0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmFjZVNyYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNv
bnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHlsZVJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVG
b250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZVJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNh
ZmU6OmNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNh
ZmU6OmZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0cmV0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZv
bnRTdHJldGNoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmVh
dHVyZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3Jr
ZXJTYWZlOjpjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VGb250RGlz
cGxheSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUu
aDogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6IEFk
ZCA6OmNzc1ZhbHVlUG9vbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6Y3NzVmFsdWVQb29sKToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oOgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDogVXBkYXRlIGR1ZSB0byByZWZhY3RvcmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0eWxlKToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNv
bG9yKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6
CisKIDIwMjEtMDQtMDcgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIGZvbnQgbG9hZGluZyB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBXb3JrZXIgdG8g
aW1wbGVtZW50IGl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmZDM4ZGFhOTViNDZjMTE5NTE2NDY0ZjVi
OWVjNDVjMTkwOGMyNmUuLmRiYzUwODljYThhNGI4NWVhNzNiMDExYThmMmU2YzlmNDhjZDZjM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CkBAIC04MzcsNiArODM3LDcgQEAgY3NzL3BhcnNlci9DU1NQYXJzZXJU
b2tlbi5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVG9rZW5SYW5nZS5jcHAKIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAKK2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAogY3NzL3Bh
cnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTU3VwcG9ydHNQYXJzZXIu
Y3BwCiBjc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNGJhOGNhMTk1NjU4MThhNzQx
OGZhMGRkMjc4MDgwZGUxYzI1YmQ4Li40ZjNlYzE0NjBiOGE2YjEzNWJjZDk1ZGY4YmE5Y2I0MWNh
ZWZmZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yOTM2LDYgKzI5MzYsNyBAQAogCQk5NDZEMzc0MDFENkNFM0MyMDA3NzA4
NEYgLyogQ1NTUGFyc2VyVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk0NkQzNzNEMUQ2Q0UzMUEwMDc3MDg0RiAvKiBDU1NQYXJzZXJUb2tlbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk0NkQz
NzQ0MUQ2Q0Y3QjIwMDc3MDg0RiAvKiBDU1NQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0NkQzNzQzMUQ2Q0Y3ODgwMDc3MDg0RiAv
KiBDU1NQYXJzZXJJZGlvbXMuaCAqLzsgfTsKIAkJOTQ2RDM3NDYxRDZEMDFENDAwNzcwODRGIC8q
IENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIu
aCAqLzsgfTsKKwkJOTQ2RDM3NDYxRDZEMDFENTAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2Vy
V29ya2VyU2FmZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTQ2RDM3NDIxRDZEMDYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2Fm
ZS5oICovOyB9OwogCQk5NDZEMzc0QTFENkQwNjI4MDA3NzA4NEYgLyogQ1NTTWFya3VwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0ODFENkQw
NjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmggKi87IH07CiAJCTk0NkQzNzRFMUQ2RDA4QUEwMDc3
MDg0RiAvKiBDU1NQYXJzZXJUb2tlblJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NDZEMzc0QzFENkQwN0Y1MDA3NzA4NEYgLyogQ1NTUGFyc2Vy
VG9rZW5SYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTk0Nzk0OTI1MUUwMzA4QUYwMDAxOEQ4NSAvKiBEZXByZWNhdGVkQ1NTT01WYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTQ3OTQ5MjMx
RTAyRjkwQjAwMDE4RDg1IC8qIERlcHJlY2F0ZWRDU1NPTVZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzk5LDYgKzExODAwLDggQEAK
IAkJOTQ2RDM3M0UxRDZDRTMxQTAwNzcwODRGIC8qIENTU1BhcnNlclRva2VuLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlclRva2VuLmNwcDsgcGF0aCA9
IHBhcnNlci9DU1NQYXJzZXJUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk0NkQzNzQxMUQ2Q0Y2MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlci5jcHA7IHBh
dGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ1NTUHJvcGVydHlQYXJzZXIuaDsgcGF0
aCA9IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1Byb3BlcnR5
UGFyc2VyV29ya2VyU2FmZS5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3Jr
ZXJTYWZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTQ2RDM3NDIxRDZEMDYz
MjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgcGF0aCA9
IHBhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTQ2RDM3NDMxRDZDRjc4ODAwNzcwODRGIC8qIENTU1BhcnNlcklkaW9tcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NQYXJzZXJJZGlvbXMuaDsgcGF0
aCA9IHBhcnNlci9DU1NQYXJzZXJJZGlvbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTQ2RDM3NDcxRDZEMDYwQzAwNzcwODRGIC8qIENTU01hcmt1cC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NNYXJrdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NDZEMzc0ODFENkQwNjBDMDA3NzA4NEYgLyogQ1NTTWFya3VwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU01hcmt1cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjQwMDcsNiArMjQwMTAsOCBAQAogCQkJCTk0NkQzNzQyMUQ2Q0Y2
MzIwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlci5oICovLAogCQkJCTk0OUM3NzAyMUQ2RTM5
MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwICovLAogCQkJCTk0OUM3
NzAzMUQ2RTM5MzUwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCAqLywKKwkJ
CQk5NDZEMzc0MTFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
LmNwcCAqLywKKwkJCQk5NDZEMzc0MjFENkQwNjMyMDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmggKi8sCiAJCQkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENTU1Nl
bGVjdG9yUGFyc2VyLmNwcCAqLywKIAkJCQk5NERFNUM4QzFEODA4MDE1MDAxNjRGMkEgLyogQ1NT
U2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NERFNUM4RjFEODMwMENCMDAxNjRGMkEgLyogQ1NT
U3VwcG9ydHNQYXJzZXIuY3BwICovLApAQCAtMzE5OTYsNiArMzIwMDEsNyBAQAogCQkJCTY1NjU4
MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk0OUM3NzA1MUQ2RTM5RUEwMEMwREU0RiAvKiBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk0NkQzNzQ2MUQ2RDAxRDUwMDc3MDg0
RiAvKiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgy
RTNEOERGMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNUExMkUwMERDMDQxNDgwMEM5QUZBRCAvKiBDU1NSZWZsZWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTRCREE0MDAxMjE1MUI2RjUwMEZENjYwNCAvKiBDU1NSZWdp
c3RlcmVkQ3VzdG9tUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5j
cHAKaW5kZXggMzVmZmMwMzgyYTE1YTIwZmE0ZWU4NzFjODYzOGVhNjE2OGUzYmUxYi4uMTlkOWI0
NGFjZDQ4NWIzMjMxOWNlOTU5ZjRhZDJkNjcxMTU4NGY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2Uu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAi
Q1NTVW5pY29kZVJhbmdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZVBvb2wuaCIKQEAgLTc2LDEwICs3NywxMCBAQCBSZWY8Rm9udEZhY2U+IEZv
bnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGZhbWlseSwg
U291cmNlJgogCiAgICAgYXV0byBzb3VyY2VDb252ZXJzaW9uUmVzdWx0ID0gV1RGOjpzd2l0Y2hP
bihzb3VyY2UsCiAgICAgICAgIFsmXSAoU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPHZv
aWQ+IHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBGb250RmFjZTo6cGFyc2VTdHJpbmcoc3Ry
aW5nLCBDU1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4o
dmFsdWUpKQorICAgICAgICAgICAgYXV0byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VyV29ya2Vy
U2FmZTo6cGFyc2VGb250RmFjZVNyYyhzdHJpbmcsIENTU1BhcnNlckNvbnRleHQoZG9jdW1lbnQp
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07Ci0gICAgICAgICAgICBDU1NGb250RmFjZTo6YXBwZW5kU291
cmNlcyhyZXN1bHQtPmJhY2tpbmcoKSwgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLCAm
ZG9jdW1lbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2Vz
KHJlc3VsdC0+YmFja2luZygpLCAqdmFsdWUsICZkb2N1bWVudCwgZmFsc2UpOwogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiYgYXJyYXlCdWZmZXJWaWV3KSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CkBAIC0xMDAs
MzIgKzEwMSwzMiBAQCBSZWY8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgU291cmNlJgogICAgIH0KIAogICAgIC8vIFRo
ZXNlIHRlcm5hcmllcyBtYXRjaCB0aGUgZGVmYXVsdCBzdHJpbmdzIGluc2lkZSB0aGUgRm9udEZh
Y2VEZXNjcmlwdG9ycyBkaWN0aW9uYXJ5IGluc2lkZSBGb250RmFjZS5pZGwuCi0gICAgYXV0byBz
ZXRTdHlsZVJlc3VsdCA9IHJlc3VsdC0+c2V0U3R5bGUoZGVzY3JpcHRvcnMuc3R5bGUuaXNFbXB0
eSgpID8gIm5vcm1hbCJfcyA6IGRlc2NyaXB0b3JzLnN0eWxlKTsKKyAgICBhdXRvIHNldFN0eWxl
UmVzdWx0ID0gcmVzdWx0LT5zZXRTdHlsZShkb2N1bWVudCwgZGVzY3JpcHRvcnMuc3R5bGUuaXNF
bXB0eSgpID8gIm5vcm1hbCJfcyA6IGRlc2NyaXB0b3JzLnN0eWxlKTsKICAgICBpZiAoc2V0U3R5
bGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRl
KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGF1dG8gc2V0V2VpZ2h0UmVz
dWx0ID0gcmVzdWx0LT5zZXRXZWlnaHQoZGVzY3JpcHRvcnMud2VpZ2h0LmlzRW1wdHkoKSA/ICJu
b3JtYWwiX3MgOiBkZXNjcmlwdG9ycy53ZWlnaHQpOworICAgIGF1dG8gc2V0V2VpZ2h0UmVzdWx0
ID0gcmVzdWx0LT5zZXRXZWlnaHQoZG9jdW1lbnQsIGRlc2NyaXB0b3JzLndlaWdodC5pc0VtcHR5
KCkgPyAibm9ybWFsIl9zIDogZGVzY3JpcHRvcnMud2VpZ2h0KTsKICAgICBpZiAoc2V0V2VpZ2h0
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0RXJyb3JTdGF0ZSgp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBhdXRvIHNldFN0cmV0Y2hSZXN1
bHQgPSByZXN1bHQtPnNldFN0cmV0Y2goZGVzY3JpcHRvcnMuc3RyZXRjaC5pc0VtcHR5KCkgPyAi
bm9ybWFsIl9zIDogZGVzY3JpcHRvcnMuc3RyZXRjaCk7CisgICAgYXV0byBzZXRTdHJldGNoUmVz
dWx0ID0gcmVzdWx0LT5zZXRTdHJldGNoKGRvY3VtZW50LCBkZXNjcmlwdG9ycy5zdHJldGNoLmlz
RW1wdHkoKSA/ICJub3JtYWwiX3MgOiBkZXNjcmlwdG9ycy5zdHJldGNoKTsKICAgICBpZiAoc2V0
U3RyZXRjaFJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICByZXN1bHQtPnNldEVycm9y
U3RhdGUoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYXV0byBzZXRVbmlj
b2RlUmFuZ2VSZXN1bHQgPSByZXN1bHQtPnNldFVuaWNvZGVSYW5nZShkZXNjcmlwdG9ycy51bmlj
b2RlUmFuZ2UuaXNFbXB0eSgpID8gIlUrMC0xMEZGRkYiX3MgOiBkZXNjcmlwdG9ycy51bmljb2Rl
UmFuZ2UpOworICAgIGF1dG8gc2V0VW5pY29kZVJhbmdlUmVzdWx0ID0gcmVzdWx0LT5zZXRVbmlj
b2RlUmFuZ2UoZG9jdW1lbnQsIGRlc2NyaXB0b3JzLnVuaWNvZGVSYW5nZS5pc0VtcHR5KCkgPyAi
VSswLTEwRkZGRiJfcyA6IGRlc2NyaXB0b3JzLnVuaWNvZGVSYW5nZSk7CiAgICAgaWYgKHNldFVu
aWNvZGVSYW5nZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICByZXN1bHQtPnNldEVy
cm9yU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgYXV0byBzZXRG
ZWF0dXJlU2V0dGluZ3NSZXN1bHQgPSByZXN1bHQtPnNldEZlYXR1cmVTZXR0aW5ncyhkZXNjcmlw
dG9ycy5mZWF0dXJlU2V0dGluZ3MuaXNFbXB0eSgpID8gIm5vcm1hbCJfcyA6IGRlc2NyaXB0b3Jz
LmZlYXR1cmVTZXR0aW5ncyk7CisgICAgYXV0byBzZXRGZWF0dXJlU2V0dGluZ3NSZXN1bHQgPSBy
ZXN1bHQtPnNldEZlYXR1cmVTZXR0aW5ncyhkb2N1bWVudCwgZGVzY3JpcHRvcnMuZmVhdHVyZVNl
dHRpbmdzLmlzRW1wdHkoKSA/ICJub3JtYWwiX3MgOiBkZXNjcmlwdG9ycy5mZWF0dXJlU2V0dGlu
Z3MpOwogICAgIGlmIChzZXRGZWF0dXJlU2V0dGluZ3NSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
ICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQotICAgIGF1dG8gc2V0RGlzcGxheVJlc3VsdCA9IHJlc3VsdC0+c2V0RGlzcGxheShk
ZXNjcmlwdG9ycy5kaXNwbGF5LmlzRW1wdHkoKSA/ICJhdXRvIl9zIDogZGVzY3JpcHRvcnMuZGlz
cGxheSk7CisgICAgYXV0byBzZXREaXNwbGF5UmVzdWx0ID0gcmVzdWx0LT5zZXREaXNwbGF5KGRv
Y3VtZW50LCBkZXNjcmlwdG9ycy5kaXNwbGF5LmlzRW1wdHkoKSA/ICJhdXRvIl9zIDogZGVzY3Jp
cHRvcnMuZGlzcGxheSk7CiAgICAgaWYgKHNldERpc3BsYXlSZXN1bHQuaGFzRXhjZXB0aW9uKCkp
IHsKICAgICAgICAgcmVzdWx0LT5zZXRFcnJvclN0YXRlKCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xNjgsOTggKzE2OSw5NCBAQCBGb250RmFjZTo6fkZvbnRGYWNlKCkKICAgICBtX2Jh
Y2tpbmctPnJlbW92ZUNsaWVudCgqdGhpcyk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gRm9udEZh
Y2U6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCi17Ci0gICAgLy8gRklYTUU6IFNob3VsZCB1c2UgdGhlIERvY3VtZW50IHRvIGdldCB0
aGUgcmlnaHQgcGFyc2luZyBtb2RlLgotICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlRm9udEZh
Y2VEZXNjcmlwdG9yKHByb3BlcnR5SUQsIHN0cmluZywgSFRNTFN0YW5kYXJkTW9kZSk7Ci19Ci0K
LUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRGYW1pbHkoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIGZhbWlseSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRG
YW1pbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBmYW1p
bHkpCiB7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogCiAgICAgU3RyaW5nIGZhbWlseU5hbWVUb1VzZSA9IGZhbWls
eTsKLSAgICBpZiAoZmFtaWx5TmFtZVRvVXNlLmNvbnRhaW5zKCdcJycpICYmIGRvY3VtZW50LnF1
aXJrcygpLnNob3VsZFN0cmlwUXVvdGF0aW9uTWFya0luRm9udEZhY2VTZXRGYW1pbHkoKSkKKyAg
ICAvLyBGSVhNRTogUXVpcmtzIGN1cnJlbnRseSBhcmVuJ3QgcHJlc2VudCBvbiBXb3JrZXJzLCBi
dXQgc2hvdWxkIGxpa2VseSBiZSBpbmhlcml0ZWQKKyAgICAvLyAgICAgICAgZnJvbSB0aGUgcGFy
ZW50IERvY3VtZW50IHdoZXJlIGFwcGxpY2FibGUuCisgICAgaWYgKGZhbWlseU5hbWVUb1VzZS5j
b250YWlucygnXCcnKSAmJiBpczxEb2N1bWVudD4oY29udGV4dCkgJiYgZG93bmNhc3Q8RG9jdW1l
bnQ+KGNvbnRleHQpLnF1aXJrcygpLnNob3VsZFN0cmlwUXVvdGF0aW9uTWFya0luRm9udEZhY2VT
ZXRGYW1pbHkoKSkKICAgICAgICAgZmFtaWx5TmFtZVRvVXNlID0gZmFtaWx5LnJlbW92ZUNoYXJh
Y3RlcnMoW10oYXV0byBjaGFyYWN0ZXIpIHsgcmV0dXJuIGNoYXJhY3RlciA9PSAnXCcnOyB9KTsK
IAogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk2MzgxIERvbid0IHVzZSBhIGxpc3QgaGVyZS4KICAgICAvLyBTZWUgY29uc3VtZUZvbnRGYW1p
bHlEZXNjcmlwdG9yKCkgaW4gQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGZvciB3aHkgd2UncmUgdXNp
bmcgaXQuCiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRl
ZCgpOwotICAgIGxpc3QtPmFwcGVuZChDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZv
bnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lVG9Vc2UpKTsKKyAgICBsaXN0LT5hcHBlbmQoY29udGV4
dC5jc3NWYWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZVRvVXNlKSk7
CiAgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nLT5zZXRGYW1pbGllcyhsaXN0KTsKICAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9Owog
ICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHls
ZShjb25zdCBTdHJpbmcmIHN0eWxlKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFN0
eWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgc3R5bGUp
CiB7CiAgICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07CiAKLSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHN0eWxl
LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1Byb3Bl
cnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVN0eWxlKHN0eWxlLCBjb250ZXh0KSkg
ewogICAgICAgICBtX2JhY2tpbmctPnNldFN0eWxlKCp2YWx1ZSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogfQogCi1F
eGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0V2VpZ2h0KGNvbnN0IFN0cmluZyYgd2VpZ2h0
KQorRXhjZXB0aW9uT3I8dm9pZD4gRm9udEZhY2U6OnNldFdlaWdodChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHdlaWdodCkKIHsKICAgICBpZiAod2VpZ2h0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAK
LSAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlU3RyaW5nKHdlaWdodCwgQ1NTUHJvcGVydHlGb250
V2VpZ2h0KSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlOjpwYXJzZUZvbnRGYWNlV2VpZ2h0KHdlaWdodCwgY29udGV4dCkpIHsKICAgICAgICAgbV9i
YWNraW5nLT5zZXRXZWlnaHQoKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZv
aWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKK0V4Y2VwdGlv
bk9yPHZvaWQ+IEZvbnRGYWNlOjpzZXRTdHJldGNoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgc3RyZXRjaCkKIHsKICAgICBpZiAoc3RyZXRjaC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgaWYg
KGF1dG8gdmFsdWUgPSBwYXJzZVN0cmluZyhzdHJldGNoLCBDU1NQcm9wZXJ0eUZvbnRTdHJldGNo
KSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpw
YXJzZUZvbnRGYWNlU3RyZXRjaChzdHJldGNoLCBjb250ZXh0KSkgewogICAgICAgICBtX2JhY2tp
bmctPnNldFN0cmV0Y2goKnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+
IEZvbnRGYWNlOjpzZXRVbmljb2RlUmFuZ2UoY29uc3QgU3RyaW5nJiB1bmljb2RlUmFuZ2UpCitF
eGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0VW5pY29kZVJhbmdlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdW5pY29kZVJhbmdlKQogewogICAgIGlm
ICh1bmljb2RlUmFuZ2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3lu
dGF4RXJyb3IgfTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyc2VTdHJpbmcodW5pY29kZVJhbmdlLCBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSkp
CisgICAgaWYgKGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNl
Rm9udEZhY2VVbmljb2RlUmFuZ2UodW5pY29kZVJhbmdlLCBjb250ZXh0KSkKICAgICAgICAgc3Vj
Y2VzcyA9IG1fYmFja2luZy0+c2V0VW5pY29kZVJhbmdlKCp2YWx1ZSk7CiAgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICByZXR1
cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBGb250RmFjZTo6c2V0RmVhdHVyZVNldHRp
bmdzKGNvbnN0IFN0cmluZyYgZmVhdHVyZVNldHRpbmdzKQorRXhjZXB0aW9uT3I8dm9pZD4gRm9u
dEZhY2U6OnNldEZlYXR1cmVTZXR0aW5ncyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIGZlYXR1cmVTZXR0aW5ncykKIHsKICAgICBpZiAoZmVhdHVyZVNldHRp
bmdzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKLSAgICBhdXRvIHZhbHVlID0gcGFyc2VTdHJpbmcoZmVhdHVyZVNldHRpbmdzLCBDU1NQcm9w
ZXJ0eUZvbnRGZWF0dXJlU2V0dGluZ3MpOworICAgIGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBh
cnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VGZWF0dXJlU2V0dGluZ3MoZmVhdHVyZVNldHRp
bmdzLCBjb250ZXh0KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IgfTsKICAgICBtX2JhY2tpbmctPnNldEZlYXR1cmVTZXR0aW5ncygqdmFs
dWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRGYWNlOjpz
ZXREaXNwbGF5KGNvbnN0IFN0cmluZyYgZGlzcGxheSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IEZvbnRG
YWNlOjpzZXREaXNwbGF5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgZGlzcGxheSkKIHsKICAgICBpZiAoZGlzcGxheS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCi0gICAgaWYgKGF1dG8gdmFsdWUgPSBw
YXJzZVN0cmluZyhkaXNwbGF5LCBDU1NQcm9wZXJ0eUZvbnREaXNwbGF5KSkgeworICAgIGlmIChh
dXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlRGlz
cGxheShkaXNwbGF5LCBjb250ZXh0KSkgewogICAgICAgICBtX2JhY2tpbmctPnNldExvYWRpbmdC
ZWhhdmlvcigqdmFsdWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRG
YWNlLmgKaW5kZXggZmMxN2VhNjFkNmY5MzRhZWVlYWVlM2E2MjRkZWNkMWQ0N2NlMmM2ZC4uZjFi
NTVhODExMmI4MDQxYzEwNDY0MmM0MGU2NmJkMzZkYTAzYzcyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNl
LmgKQEAgLTU4LDEzICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGb250RmFjZT4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDU1NGb250RmFjZSYpOwogICAgIHZpcnR1
YWwgfkZvbnRGYWNlKCk7CiAKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRGYW1pbHkoRG9jdW1l
bnQmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZShjb25z
dCBTdHJpbmcmKTsKLSAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRXZWlnaHQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RyZXRjaChjb25zdCBTdHJpbmcmKTsKLSAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRVbmljb2RlUmFuZ2UoY29uc3QgU3RyaW5nJik7Ci0gICAg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0RmVhdHVyZVNldHRpbmdzKGNvbnN0IFN0cmluZyYpOwotICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldERpc3BsYXkoY29uc3QgU3RyaW5nJik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0RmFtaWx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJp
bmcmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgU3RyaW5nJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0V2VpZ2h0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRTdHJldGNoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmKTsK
KyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRVbmljb2RlUmFuZ2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIGNvbnN0IFN0cmluZyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEZlYXR1cmVT
ZXR0aW5ncyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJik7CisgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0RGlzcGxheShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
U3RyaW5nJik7CiAKICAgICBTdHJpbmcgZmFtaWx5KCkgY29uc3Q7CiAgICAgU3RyaW5nIHN0eWxl
KCkgY29uc3Q7CkBAIC04NSw4ICs4NSw2IEBAIHB1YmxpYzoKIAogICAgIENTU0ZvbnRGYWNlJiBi
YWNraW5nKCkgeyByZXR1cm4gbV9iYWNraW5nOyB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBDU1NQcm9wZXJ0eUlEKTsKLQogICAgIHZv
aWQgZm9udFN0YXRlQ2hhbmdlZChDU1NGb250RmFjZSYsIENTU0ZvbnRGYWNlOjpTdGF0dXMgb2xk
U3RhdGUsIENTU0ZvbnRGYWNlOjpTdGF0dXMgbmV3U3RhdGUpIGZpbmFsOwogCiAgICAgdm9pZCBy
ZWYoKSBmaW5hbCB7IFJlZkNvdW50ZWQ6OnJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2UuaWRsIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmlkbApp
bmRleCBhOTAyY2IwMWQ5MTMwMmNkZjg5ZDc3ZDAyOTljY2JhZTVmNWYyNWMwLi4zMzQ2N2FmYjNi
MTg0NDM1OTlmMWM2YWRiOWJkNGU2Y2E0NzU3MzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5pZGwK
QEAgLTQ3LDEzICs0NywxMyBAQCBkaWN0aW9uYXJ5IEZvbnRGYWNlRGVzY3JpcHRvcnMgewogXSBp
bnRlcmZhY2UgRm9udEZhY2UgewogICAgIFtDYWxsV2l0aD1Eb2N1bWVudF0gY29uc3RydWN0b3Io
RE9NU3RyaW5nIGZhbWlseSwgKERPTVN0cmluZyBvciBCaW5hcnlEYXRhKSBzb3VyY2UsIG9wdGlv
bmFsIEZvbnRGYWNlRGVzY3JpcHRvcnMgZGVzY3JpcHRvcnMpOwogCi0gICAgW1NldHRlckNhbGxX
aXRoPURvY3VtZW50XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZhbWlseTsKLSAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHN0eWxlOwotICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgd2VpZ2h0OwotICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgc3RyZXRjaDsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVuaWNv
ZGVSYW5nZTsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZlYXR1cmVTZXR0aW5nczsKLSAgICBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGRpc3BsYXk7CisgICAgW1NldHRlckNhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZmFtaWx5OworICAgIFtTZXR0ZXJD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0eWxl
OworICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHdlaWdodDsKKyAgICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gYXR0cmlidXRlIERPTVN0cmluZyBzdHJldGNoOworICAgIFtTZXR0ZXJDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVuaWNvZGVSYW5nZTsK
KyAgICBbU2V0dGVyQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gYXR0cmlidXRlIERP
TVN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CisgICAgW1NldHRlckNhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIGF0dHJpYnV0ZSBET01TdHJpbmcgZGlzcGxheTsKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBGb250RmFjZUxvYWRTdGF0dXMgc3RhdHVzOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggNzY0OGY1MDRhNWQ3YTMwODAzOTU1NjZkYWIzOGU0
M2ZiMDg4MWI4My4uOWRmYzNjNzBmYWRlY2EzY2RmYjBiMGNkNjM3MThlNDJhMjQ3ZDY5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTA4LDE4ICsxMDgsNiBA
QCBDb2xvciBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wg
c3RyaWN0KQogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOwogfQogCi1Db2xvciBD
U1NQYXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewot
ICAgIGlmIChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNvbG9y
KHN0cmluZykpCi0gICAgICAgIHJldHVybiAqY29sb3I7Ci0KLSAgICBDU1NUb2tlbml6ZXIgdG9r
ZW5pemVyKHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIu
dG9rZW5SYW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwotCi0gICAgcmV0
dXJuIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yV29ya2VyU2FmZShyYW5n
ZSwgQ1NTUGFyc2VyQ29udGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Ci19Ci0KIENvbG9yIENTU1Bh
cnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihTdHJpbmdWaWV3IHN0cmluZykKIHsKICAgICBhdXRvIGtl
eXdvcmQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwpAQCAtMTM4LDE1ICsxMjYsNiBAQCBP
cHRpb25hbDxTUkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1Zp
ZXcgc3RyaW5nKQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Io
c3RyaW5nKTsKIH0KIAotT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3
PiBDU1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKLXsKLSAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVy
KHN0cmluZyk7Ci0gICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5S
YW5nZSgpKTsKLSAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwotCi0gICAgcmV0dXJuIENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQ
YXJzZXJNb2RlKTsKLX0KLQogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHko
KSkKQEAgLTI2MSwxMyArMjQwLDQgQEAgVmVjdG9yPGRvdWJsZT4gQ1NTUGFyc2VyOjpwYXJzZUtl
eWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAgIHJldHVybiBDU1NQYXJz
ZXJJbXBsOjpwYXJzZUtleWZyYW1lS2V5TGlzdChzZWxlY3Rvcik7CiB9CiAKLVJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gbWFrZVN0cmluZygiQGZvbnQt
ZmFjZSB7ICIsIGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlEKSwgIiA6ICIsIHByb3Bl
cnR5VmFsdWUsICI7IH0iKTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSA9IHBhcnNl
UnVsZShjb250ZXh0LCBudWxscHRyLCBzdHJpbmcpOwotICAgIGlmICghcnVsZSB8fCAhcnVsZS0+
aXNGb250RmFjZVJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRv
d25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSkucHJvcGVydGllcygpLmdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlci5oCmluZGV4IGYyMjFkMTgxMWE5NGQyNzQzOGIxYmZiNzI2NTVjY2Q1NDBjYmYx
MDUuLjYwZjE0ZDc4YzUxMTdlZTEyMTU2ZWMzZWY0NDY2NDFjMWNmOWMyMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3MgQ1NTU2VsZWN0b3JMaXN0
OworY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ1NTVmFsdWVQb29sOwogY2xhc3MgQ29sb3I7
CiBjbGFzcyBFbGVtZW50OwpAQCAtNzksOCArODAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBh
cnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYsIENTU1Byb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
Jik7CiAgICAgc3RhdGljIFBhcnNlUmVzdWx0IHBhcnNlQ3VzdG9tUHJvcGVydHlWYWx1ZShNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzJiwgY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25z
dCBTdHJpbmcmLCBib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogICAg
IAotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRm9udEZhY2VEZXNjcmlwdG9yKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKLQog
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgPSBzdHJpY3RDU1NQYXJz
ZXJDb250ZXh0KCkpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZURlY2xhcmF0aW9u
KE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBjb25zdCBTdHJpbmcmKTsKQEAgLTkxLDEzICs5MCwx
MCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZhcmlhYmxl
UmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0eWxlOjpCdWlsZGVy
U3RhdGUmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBDb2xvciBwYXJz
ZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VT
eXN0ZW1Db2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JH
QkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAKLSAgICBzdGF0aWMgT3B0
aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBwYXJzZUZvbnRXb3JrZXJT
YWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3RhbmRhcmRNb2RlKTsKLQog
cHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRp
ZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5kZXgg
MmY5ZmFjYTEwM2Q2MGY1NjRkMzNkMWQ0MWRhMmM1OGZiOTIyYjJhNi4uODMwMTE5MDEzMGI4NDcy
MWIwZTI4ZWM2MDE0YWFmZGJlNjM1ZmZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTE5MCw2ICsxOTAsNyBAQCBDU1NQcm9wZXJ0
eUlEIGNzc1Byb3BlcnR5SUQoU3RyaW5nVmlldyBzdHJpbmcpCiB9CiAgICAgCiB1c2luZyBuYW1l
c3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFtZXNwYWNlIENTU1Byb3Bl
cnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU7CiAKIENTU1Byb3BlcnR5UGFyc2VyOjpDU1NQcm9w
ZXJ0eVBhcnNlcihjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+KiBwYXJzZWRQcm9w
ZXJ0aWVzLCBib29sIGNvbnN1bWVXaGl0ZXNwYWNlKQogICAgIDogbV9yYW5nZShyYW5nZSkKQEAg
LTQyNiw1NCArNDI3LDYgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVdpbGxDaGFu
Z2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIHZhbHVlczsKIH0KIAot
c3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVUYWco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gRmVhdHVyZSB0YWcgbmFtZSBj
b25zaXN0cyBvZiA0LWxldHRlciBjaGFyYWN0ZXJzLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCB0YWdOYW1lTGVuZ3RoID0gNDsKLQotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgLy8gRmVhdHVyZSB0YWcg
bmFtZSBjb21lcyBmaXJzdAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gU3RyaW5nVG9rZW4pCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0b2tlbi52YWx1ZSgpLmxlbmd0aCgpICE9
IHRhZ05hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIEZvbnRU
YWcgdGFnOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWcuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIDB4MjAtMHg3RSwg
Zm9sbG93aW5nIHRoZSB0YWcgbmFtZSBydWxlcyBkZWZpZW5kIGluIHRoZSBPcGVuVHlwZSBzcGVj
aWZpY2F0aW9uLgotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0b2tlbi52YWx1ZSgpW2ldOwot
ICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHgyMCB8fCBjaGFyYWN0ZXIgPiAweDdFKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHRhZ1tpXSA9IHRvQVNDSUlMb3dlcihjaGFy
YWN0ZXIpOwotICAgIH0KLQotICAgIGludCB0YWdWYWx1ZSA9IDE7Ci0gICAgaWYgKCFyYW5nZS5h
dEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikgewotICAgICAgICAv
LyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQgZm9sbG93OiA8aW50ZWdlcj4gfCBvbiB8IG9mZgot
ICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJSYXcocmFuZ2UsIDApKQot
ICAgICAgICAgICAgdGFnVmFsdWUgPSAqaW50ZWdlcjsKLSAgICAgICAgZWxzZSBpZiAocmFuZ2Uu
cGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPbiB8fCByYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1
ZU9mZikKLSAgICAgICAgICAgIHRhZ1ZhbHVlID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5pZCgpID09IENTU1ZhbHVlT247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gQ1NTRm9udEZlYXR1cmVWYWx1ZTo6Y3Jl
YXRlKFdURk1vdmUodGFnKSwgdGFnVmFsdWUpOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
LXsKLSAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAg
IHJldHVybiBjb25zdW1lSWRlbnQocmFuZ2UpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNl
dHRpbmdzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgIGRvIHsK
LSAgICAgICAgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGZvbnRGZWF0dXJlVmFsdWUgPSBj
b25zdW1lRm9udEZlYXR1cmVUYWcocmFuZ2UpOwotICAgICAgICBpZiAoIWZvbnRGZWF0dXJlVmFs
dWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgc2V0dGluZ3MtPmFwcGVu
ZChmb250RmVhdHVyZVZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0gd2hpbGUgKGNvbnN1
bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKLSAgICByZXR1cm4gc2V0dGluZ3M7
Ci19Ci0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUZvbnRWYXJpYXRpb25UYWcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7
CkBAIC04NTAsMTQwICs4MDMsNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRXZWlnaHRBYnNvbHV0ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
LXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUJvbGQ+
KHJhbmdlKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1zdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFic29sdXRlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZUtleXdvcmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
YXV0byBmaXJzdE51bWJlciA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKHJhbmdlKTsKLSAgICBp
ZiAoIWZpcnN0TnVtYmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0TnVtYmVyOwotICAgIGF1dG8gc2Vjb25kTnVt
YmVyID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIocmFuZ2UpOwotICAgIGlmICghc2Vjb25kTnVt
YmVyIHx8IGZpcnN0TnVtYmVyLT5mbG9hdFZhbHVlKCkgPiBzZWNvbmROdW1iZXItPmZsb2F0VmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZXN1bHQgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RO
dW1iZXIucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmVzdWx0LT5hcHBlbmQoc2Vjb25kTnVtYmVy
LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1vdmUo
cmVzdWx0KSk7Ci19Ci0jZWxzZQotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAg
ICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRlS2V5d29yZFZhbHVl
KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXIocmFuZ2UpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKLXsKLSAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29uc3VtZUZvbnRTdHJldGNo
S2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1zdGF0aWMgYm9vbCBmb250
U3RyZXRjaElzV2l0aGluUmFuZ2UoZmxvYXQgc3RyZXRjaCkKLXsKLSAgICByZXR1cm4gc3RyZXRj
aCA+PSAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAo
YXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgaWYg
KGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRp
dmUpKQotICAgICAgICByZXR1cm4gZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKHBlcmNlbnQtPnZh
bHVlPGZsb2F0PigpKSA/IHBlcmNlbnQgOiBudWxscHRyOwotI2VuZGlmCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZh
bHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBhdXRvIGZpcnN0UGVyY2Vu
dCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwotICAgIGlm
ICghZmlyc3RQZXJjZW50IHx8ICFmb250U3RyZXRjaElzV2l0aGluUmFuZ2UoZmlyc3RQZXJjZW50
LT52YWx1ZTxmbG9hdD4oKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChyYW5n
ZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RQZXJjZW50OwotICAgIGF1dG8gc2Vjb25k
UGVyY2VudCA9IGNvbnN1bWVQZXJjZW50KHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwot
ICAgIGlmICghc2Vjb25kUGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKHNlY29u
ZFBlcmNlbnQtPnZhbHVlPGZsb2F0PigpKSB8fCBmaXJzdFBlcmNlbnQtPmZsb2F0VmFsdWUoKSA+
IHNlY29uZFBlcmNlbnQtPmZsb2F0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0g
ICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RQZXJjZW50LnJlbGVhc2VOb25OdWxsKCkpOwotICAgIHJl
c3VsdC0+YXBwZW5kKHNlY29uZFBlcmNlbnQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgcmV0dXJu
IFJlZlB0cjxDU1NWYWx1ZT4oV1RGTW92ZShyZXN1bHQpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NT
VmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlxdWU+KHJhbmdlKTsKLX0K
LQotc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotewot
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNl
ck1vZGUpKSB7Ci0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgaWYgKHJlc3Vs
dC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKLSAgICAgICAg
ICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksCi0gICAgICAgICAg
ICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPmFuZ2xl
LT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1zdGF0aWMg
UmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVSYW5nZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQotewot
ICAgIGF1dG8ga2V5d29yZCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUocmFuZ2UpOwot
ICAgIGlmICgha2V5d29yZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoa2V5
d29yZC0+dmFsdWVJRCgpICE9IENTU1ZhbHVlT2JsaXF1ZSB8fCByYW5nZS5hdEVuZCgpKQotICAg
ICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRlKGtleXdvcmQucmVsZWFz
ZU5vbk51bGwoKSk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbm90IGFs
bG93IHRoZSB1bml0bGVzcyB6ZXJvLgotICAgIGlmIChhdXRvIGZpcnN0QW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxl
c3NaZXJvUXVpcms6OkFsbG93KSkgewotICAgICAgICBhdXRvIGZpcnN0QW5nbGVJbkRlZ3JlZXMg
PSBmaXJzdEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX0RFRyk7Ci0gICAgICAg
IGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZmlyc3RBbmdsZUluRGVncmVlcykpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWYgKHJhbmdlLmF0RW5kKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmdsZS5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5nZVZhbHVlOjpjcmVhdGUo
a2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG5vdCBhbGxvdyB0aGUgdW5p
dGxlc3MgemVyby4KLSAgICAgICAgYXV0byBzZWNvbmRBbmdsZSA9IGNvbnN1bWVBbmdsZShyYW5n
ZSwgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
azo6QWxsb3cpOwotICAgICAgICBpZiAoIXNlY29uZEFuZ2xlKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gc2Vjb25kQW5nbGVJbkRlZ3JlZXMgPSBzZWNvbmRBbmds
ZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19ERUcpOwotICAgICAgICBpZiAoIWlzRm9u
dFN0eWxlQW5nbGVJblJhbmdlKHNlY29uZEFuZ2xlSW5EZWdyZWVzKSB8fCBmaXJzdEFuZ2xlSW5E
ZWdyZWVzID4gc2Vjb25kQW5nbGVJbkRlZ3JlZXMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0QW5nbGUucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgICAgIHJlc3VsdC0+YXBwZW5kKHNlY29uZEFuZ2xlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlUmFuZ2VWYWx1ZTo6Y3JlYXRlKGtleXdvcmQu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFt
aWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICBhdXRvIGZhbWlseU5h
bWUgPSBjb25zdW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CkBAIC00MDc4LDE1ICszODk3LDE1IEBA
IFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
RWFzdEFzaWFuOgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRWYXJpYW50RWFzdEFzaWFuKG1f
cmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNldHRpbmdzOgotICAgICAg
ICByZXR1cm4gY29uc3VtZUZvbnRGZWF0dXJlU2V0dGluZ3MobV9yYW5nZSk7CisgICAgICAgIHJl
dHVybiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhtX3JhbmdlLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKICAgICAgICAgcmV0
dXJuIGNvbnN1bWVGb250RmFtaWx5KG1fcmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
V2VpZ2h0OgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRXZWlnaHQobV9yYW5nZSk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRT
dHJldGNoKG1fcmFuZ2UpOworICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRTdHJldGNoKG1fcmFu
Z2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
U3R5bGU6Ci0gICAgICAgIHJldHVybiBjb25zdW1lRm9udFN0eWxlKG1fcmFuZ2UsIG1fY29udGV4
dC5tb2RlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250
ZXh0Lm1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250U3ludGhlc2lzOgogICAgICAgICByZXR1cm4gY29uc3VtZUZvbnRTeW50aGVzaXMobV9y
YW5nZSk7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTQ2MTUsOTAgKzQ0MzQsNiBA
QCBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0
aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVl
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKLQotICAgIGRvIHsKLSAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBVbmljb2RlUmFuZ2VU
b2tlbikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIFVDaGFyMzIgc3Rh
cnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOwotICAgICAgICBVQ2hhcjMyIGVuZCA9IHRv
a2VuLnVuaWNvZGVSYW5nZUVuZCgpOwotICAgICAgICBpZiAoc3RhcnQgPiBlbmQpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgdmFsdWVzLT5hcHBlbmQoQ1NTVW5pY29kZVJh
bmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7Ci0gICAgfSB3aGlsZSAoY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwotCi0gICAgcmV0dXJuIHZhbHVlczsKLX0KLQot
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRGYWNlRm9udERpc3Bs
YXkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVJZGVu
dDxDU1NWYWx1ZUF1dG8sIENTU1ZhbHVlQmxvY2ssIENTU1ZhbHVlU3dhcCwgQ1NTVmFsdWVGYWxs
YmFjaywgQ1NTVmFsdWVPcHRpb25hbD4ocmFuZ2UpOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRm9udEZhY2VTcmNVUkkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgU3RyaW5nIHVybCA9IGNvbnN1
bWVVcmxBc1N0cmluZ1ZpZXcocmFuZ2UpLnRvU3RyaW5nKCk7Ci0gICAgaWYgKHVybC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8Q1NTRm9udEZhY2VTcmNW
YWx1ZT4gdXJpVmFsdWUgPSBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGUoY29udGV4dC5jb21w
bGV0ZVVSTCh1cmwpLnN0cmluZygpLCBjb250ZXh0LmlzQ29udGVudE9wYXF1ZSA/IExvYWRlZEZy
b21PcGFxdWVTb3VyY2U6OlllcyA6IExvYWRlZEZyb21PcGFxdWVTb3VyY2U6Ok5vKTsKLQotICAg
IGlmIChyYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpICE9IENTU1ZhbHVlRm9ybWF0KQotICAgICAg
ICByZXR1cm4gdXJpVmFsdWU7Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzcy1mb250cyBzYXlzIHRoYXQgZm9ybWF0KCkgY29udGFpbnMgYSBjb21tYS1zZXBhcmF0
ZWQgbGlzdCBvZiBzdHJpbmdzLAotICAgIC8vIGJ1dCBDU1NGb250RmFjZVNyY1ZhbHVlIHN0b3Jl
cyBvbmx5IG9uZSBmb3JtYXQuIEFsbG93aW5nIG9uZSBmb3JtYXQgZm9yIG5vdy4KLSAgICAvLyBG
SVhNRTogV2UncmUgYWxsb3dpbmcgdGhlIGZvcm1hdCB0byBiZSBhbiBpZGVudGlmaWVyIGFzIHdl
bGwgYXMgYSBzdHJpbmcsIGJlY2F1c2UgdGhlIG9sZAotICAgIC8vIHBhcnNlciBkaWQuIEl0J3Mg
bm90IGNsZWFyIGlmIHdlIG5lZWQgdG8gY29udGludWUgdG8gc3VwcG9ydCB0aGlzIGJlaGF2aW9y
LCBidXQgd2UgaGF2ZSBsb3RzIG9mCi0gICAgLy8gbGF5b3V0IHRlc3RzIHRoYXQgcmVseSBvbiBp
dC4KLSAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2Up
OwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhcmcgPSBhcmdzLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7Ci0gICAgaWYgKChhcmcudHlwZSgpICE9IFN0cmluZ1Rva2VuICYmIGFyZy50
eXBlKCkgIT0gSWRlbnRUb2tlbikgfHwgIWFyZ3MuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgdXJpVmFsdWUtPnNldEZvcm1hdChhcmcudmFsdWUoKS50b1N0cmluZygpKTsK
LSAgICByZXR1cm4gdXJpVmFsdWU7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVGb250RmFjZVNyY0xvY2FsKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIENT
U1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZSk7Ci0gICAgaWYg
KGFyZ3MucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgewotICAgICAgICBjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgYXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAg
ICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoYXJnLnZhbHVlKCku
dG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGlmIChhcmdzLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRU
b2tlbikgewotICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFt
ZShhcmdzKTsKLSAgICAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2Fs
KGZhbWlseU5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVGb250RmFjZVNyYyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVk
KCk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKLSAgICAg
ICAgaWYgKHRva2VuLmZ1bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZUxvY2FsKQotICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChyYW5nZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlU3JjVVJJKHJhbmdl
LCBjb250ZXh0KTsKLSAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB2YWx1ZXMtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKLSAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJh
bmdlKSk7Ci0gICAgcmV0dXJuIHZhbHVlczsKLX0KLQogYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6
cGFyc2VGb250RmFjZURlc2NyaXB0b3IoQ1NTUHJvcGVydHlJRCBwcm9wSWQpCiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTQ3MTMsMjcgKzQ0NDgsMjcgQEAgYm9vbCBD
U1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VGb250RmFjZURlc2NyaXB0b3IoQ1NTUHJvcGVydHlJRCBw
cm9wSWQpCiAgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlVW5pY29kZVJhbmdl
KG1fcmFuZ2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udERpc3Bs
YXk6Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXkobV9y
YW5nZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRGYWNlRm9udERpc3BsYXko
bV9yYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMp
Ci0gICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZVJhbmdlKG1f
cmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVS
YW5nZShtX3JhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICNlbHNlCi0gICAgICAg
IHBhcnNlZFZhbHVlID0gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShtX3JhbmdlKTsKKyAgICAg
ICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udFdlaWdodEFic29sdXRlKG1fcmFuZ2UsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3RyZXRjaDoKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdlKG1fcmFuZ2UpOworICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250U3RyZXRjaFJhbmdlKG1fcmFuZ2UsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2Vsc2UKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25z
dW1lRm9udFN0cmV0Y2gobV9yYW5nZSk7CisgICAgICAgIHBhcnNlZFZhbHVlID0gY29uc3VtZUZv
bnRTdHJldGNoKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogI2VuZGlmCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CiAjaWYgRU5BQkxF
KFZBUklBVElPTl9GT05UUykKLSAgICAgICAgcGFyc2VkVmFsdWUgPSBjb25zdW1lRm9udFN0eWxl
UmFuZ2UobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNv
bnN1bWVGb250U3R5bGVSYW5nZShtX3JhbmdlLCBtX2NvbnRleHQubW9kZSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CiAjZWxzZQotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250
U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNv
bnN1bWVGb250U3R5bGUobV9yYW5nZSwgbV9jb250ZXh0Lm1vZGUsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250VmFyaWFudENhcHM6CkBAIC00NzU3LDcgKzQ0OTIsNyBAQCBib29sIENTU1Byb3BlcnR5UGFy
c2VyOjpwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlEIHByb3BJZCkKICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CiAgICAgICAgIHJldHVybiBjb25zdW1lRm9udFZh
cmlhbnRTaG9ydGhhbmQoZmFsc2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmVhdHVyZVNl
dHRpbmdzOgotICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250RmVhdHVyZVNldHRpbmdz
KG1fcmFuZ2UpOworICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1bWVGb250RmVhdHVyZVNldHRp
bmdzKG1fcmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQ4MTQsNyArNDU0OSw3IEBAIGJvb2wg
Q1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJvb2wgaW1wb3J0YW50KQogICAgIHdoaWxl
ICghbV9yYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIENTU1ZhbHVlSUQgaWQgPSBtX3JhbmdlLnBl
ZWsoKS5pZCgpOwogICAgICAgICBpZiAoIWZvbnRTdHlsZSkgewotICAgICAgICAgICAgZm9udFN0
eWxlID0gY29uc3VtZUZvbnRTdHlsZShtX3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAg
ICAgICBmb250U3R5bGUgPSBjb25zdW1lRm9udFN0eWxlKG1fcmFuZ2UsIG1fY29udGV4dC5tb2Rl
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgIGlmIChmb250U3R5bGUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTQ4MzEsNyArNDU2Niw3
IEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGb250KGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICghZm9udFN0
cmV0Y2gpIHsKLSAgICAgICAgICAgIGZvbnRTdHJldGNoID0gY29uc3VtZUZvbnRTdHJldGNoS2V5
d29yZFZhbHVlKG1fcmFuZ2UpOworICAgICAgICAgICAgZm9udFN0cmV0Y2ggPSBjb25zdW1lRm9u
dFN0cmV0Y2hLZXl3b3JkVmFsdWUobV9yYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
CiAgICAgICAgICAgICBpZiAoZm9udFN0cmV0Y2gpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuaAppbmRleCAwYTBiYTRiOTE0MjRhMWFkYzBhYmIxYTM2Yjc5OWM2MmU5ZjFlMjIwLi43MWEx
YWQ4YjBiNmMwZTU2M2NiYWI1ZDZlYjFhYThhZmM4MTJlMDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNp
bmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCiAj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
CkBAIC0zMSw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUHJvcGVy
dHk7CiBjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIFN0eWxlUHJv
cGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcApp
bmRleCBkYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVkMGU5Li4wMTMwMWEzZmM3
ZjMyNWFiN2NiMzBhNThmMTJiYzk1MTFiYjg3MTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC05Nyw5ICs5
NywxMCBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyT3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZwogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxp
bmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcC4KIGNs
YXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IENhbGNQYXJzZXIoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRl
Z29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFsbCkKKyAgICBleHBsaWNp
dCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFu
Z2VBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSkKICAgICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAgICAgICAsIG1fcmFuZ2Uo
cmFuZ2UpCisgICAgICAgICwgbV92YWx1ZVBvb2woY3NzVmFsdWVQb29sKQogICAgIHsKICAgICAg
ICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBh
dXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklkKCk7CkBAIC0xMTQsNyArMTE1LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVl
KSk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShXVEZNb3ZlKG1fY2Fs
Y1ZhbHVlKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
SW50ZWdlcihkb3VibGUgbWluaW11bVZhbHVlKQpAQCAtMTIyLDcgKzEyMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNW
YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSksIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWVQb29sLmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQo
c3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50
VHlwZT4gT3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3KGRvdWJsZSBtaW5p
bXVtVmFsdWUpCkBAIC0xMzgsNyArMTM5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fY2Fs
Y1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG1fc291cmNlUmFu
Z2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVIpOworICAgICAgICByZXR1cm4gbV92YWx1ZVBvb2wuY3JlYXRlVmFsdWUobV9jYWxjVmFs
dWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAgICB9CiAKICAg
ICBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQpAQCAtMTk5LDYgKzIwMCw3IEBA
IHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBD
U1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CiAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9j
YWxjVmFsdWU7CisgICAgQ1NTVmFsdWVQb29sJiBtX3ZhbHVlUG9vbDsKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEludFR5cGU+IE9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKQEAgLTMx
Niw5ICszMTgsMTQgQEAgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lRm9udFdlaWdodE51bWJlcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKQogewogICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZVZhbHVlKCpy
ZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IApAQCAtNDE3LDEwICs0MjQsMTUgQEAgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVIKIH0KIAogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVy
Y2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50V29ya2Vy
U2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgY3Nz
VmFsdWVQb29sKTsKICAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24g
PSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0
ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQogICAgICAgICAgICAgICAg
IHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwpAQCAtNDI5LDcgKzQ0MSw3IEBAIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29u
c3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgqcGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZSgq
cGVyY2VudCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKIAogICAgIHJldHVybiBudWxs
cHRyOwogfQpAQCAtNTIyLDEwICs1MzQsMTUgQEAgT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVB
bmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3MKIH0K
IAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBj
b25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KKworUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYgY3NzVmFs
dWVQb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVz
c1plcm8pCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgewotICAgICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBWYWx1
ZVJhbmdlQWxsKTsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSwgVmFsdWVSYW5nZUFsbCwgY3NzVmFsdWVQb29sKTsKICAgICAg
ICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVl
KCkpIHsKICAgICAgICAgICAgIGlmIChjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5j
b25zdW1lVmFsdWUoKTsKQEAgLTUzNCw3ICs1NTEsNyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZQogICAgIH0KIAogICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBj
c3NQYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoYW5nbGUtPnZhbHVlLCBhbmdsZS0+
dHlwZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUoYW5nbGUtPnZh
bHVlLCBhbmdsZS0+dHlwZSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTYyNSw5ICs2
NDIsMTQgQEAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogfQogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJ
ZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlk
ZW50V29ya2VyU2FmZShyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAgICAgaWYg
KGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjk5OCw3ICszMDIwLDcgQEAgT3B0aW9u
YWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnMKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1PcHRpb25h
bDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1
bWVGb250UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1Bh
cnNlck1vZGUpCiB7CiAgICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBv
ciBpbml0aWFsIHNvbWV3aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgogICAgIENTU1BhcnNlclRva2Vu
UmFuZ2UgcmFuZ2VDb3B5ID0gcmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAppbmRleCA4MmY0NDJmYjcwMmMzNjAxOGZk
NmEwNWYzZDNmYTQ4NmE2OTY5MDkxLi40NzMyODJhNGM3YzMwNjYyMDE1ODYxOTliYjAxMWFlODk5
YTY4MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgKQEAgLTgyLDI0ICs4MiwyOSBAQCBPcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlQQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWln
aHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CiBPcHRpb25hbDxMZW5ndGhSYXc+
IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6
Rm9yYmlkKTsKIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2Up
OworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYpOwogT3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5p
dGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxB
bmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9R
dWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0g
VW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUs
IENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlk
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRpb25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6
OkZvcmJpZCk7CiAKIE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChD
U1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJ
ZGVudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwogT3B0
aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFs
dWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NW
YWx1ZUlELi4uPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7CiB0ZW1w
bGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNv
bnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlE
Li4uIGFsbG93ZWRJZGVudHM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElk
ZW50cz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lQ3VzdG9tSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lU3RyaW5nKENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
QEAgLTE3Miw3ICsxNzcsNyBAQCBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0Zh
bWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBPcHRpb25hbDxWZWN0b3I8Rm9udEZhbWls
eVJhdz4+IGNvbnN1bWVGb250RmFtaWx5UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIE9wdGlv
bmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwog
T3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwotT3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFs
PEZvbnRSYXc+IGNvbnN1bWVGb250UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlKTsKIGNvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQpOwog
V2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFtaWx5
SW5kZXgoQ1NTVmFsdWVJRCk7CiAKQEAgLTE5NCwxMCArMTk5LDE1IEBAIHRlbXBsYXRlPENTU1Zh
bHVlSUQuLi4gbmFtZXM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQ
YXJzZXJUb2tlCiB9CiAKIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQor
eworICAgIHJldHVybiBjb25zdW1lSWRlbnRXb3JrZXJTYWZlPG5hbWVzLi4uPihyYW5nZSwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CisKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFt
ZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50V29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wpCiB7CiAg
ICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVz
PG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkuaWQoKSk7CiB9CiAKIGlubGluZSBib29sIGlzRm9udFN0eWxlQW5nbGVJblJh
bmdlKGRvdWJsZSBhbmdsZUluRGVncmVlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MzQ1MWVhMzY5YTc5YTY2MmQzMmQwYWVhNmVkYmE0YWU4YzdjMDEzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUu
Y3BwCkBAIC0wLDAgKzEsNDYxIEBACisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMjEgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKy8vIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorLy8KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0
aW9uLgorLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmgiCisKKyNpbmNsdWRlICJD
U1NGb250U3R5bGVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlckZhc3RQYXRocy5oIgorI2lu
Y2x1ZGUgIkNTU1BhcnNlckltcGwuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgi
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJDU1NUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorI2lu
Y2x1ZGUgIkNTU0ZvbnRTdHlsZVJhbmdlVmFsdWUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK09wdGlvbmFsPEZvbnRSYXc+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6
cGFyc2VGb250KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2RlIG1vZGUpCit7Cisg
ICAgQ1NTVG9rZW5pemVyIHRva2VuaXplcihzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFu
Z2UgcmFuZ2UodG9rZW5pemVyLnRva2VuUmFuZ2UoKSk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRl
c3BhY2UoKTsKKworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVG
b250UmF3KHJhbmdlLCBtb2RlKTsKK30KKworQ29sb3IgQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJT
YWZlOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChhdXRvIGNv
bG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNvbG9yKHN0cmluZykpCisgICAg
ICAgIHJldHVybiAqY29sb3I7CisKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yV29ya2VyU2FmZShyYW5nZSwgQ1NTUGFyc2VyQ29u
dGV4dChIVE1MU3RhbmRhcmRNb2RlKSk7Cit9CisKK3N0YXRpYyBDU1NQYXJzZXJDb250ZXh0IHBh
cnNlckNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAo
IWlzPERvY3VtZW50Pihjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEhUTUxTdGFuZGFyZE1vZGU7
CisgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5pblF1aXJrc01vZGUoKSA/
IEhUTUxRdWlya3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZTsKK30KKworUmVmUHRyPENTU1ZhbHVl
TGlzdD4gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlU3JjKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAg
IENTU1BhcnNlckltcGwgcGFyc2VyKGNvbnRleHQsIHN0cmluZyk7CisgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpOworICAgIHJh
bmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VTcmMocmFuZ2UsIHBhcnNlci5jb250
ZXh0KCkpOworICAgIGlmICghcGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitSZWZQdHI8
Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZVN0eWxl
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQor
eworICAgIENTU1BhcnNlckltcGwgcGFyc2VyKHBhcnNlckNvbnRleHQoY29udGV4dCksIHN0cmlu
Zyk7CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+
dG9rZW5SYW5nZSgpOworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJh
bmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFs
dWUgPQorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIENTU1Byb3BlcnR5UGFy
c2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250U3R5bGVSYW5nZShyYW5nZSwgcGFyc2Vy
LmNvbnRleHQoKS5tb2RlLCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKKyNlbHNlCisgICAgICAg
IENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250U3R5bGUocmFu
Z2UsIHBhcnNlci5jb250ZXh0KCkubW9kZSwgY29udGV4dC5jc3NWYWx1ZVBvb2woKSk7CisjZW5k
aWYKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKworUmVmUHRyPENTU1Zh
bHVlPiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udEZhY2VXZWlnaHQoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgQ1NTUGFyc2VySW1wbCBwYXJzZXIocGFyc2VyQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsK
KyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gcGFyc2VyLnRva2VuaXplcigpLT50b2tl
blJhbmdlKCk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBwYXJzZWRWYWx1ZSA9
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZVJhbmdlKHJhbmdlLCBj
b250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKKyNlbHNlCisgICAgICAgIENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGUocmFuZ2UsIGNvbnRl
eHQuY3NzVmFsdWVQb29sKCkpOworI2VuZGlmCisgICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAhcmFu
Z2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gcGFyc2Vk
VmFsdWU7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
OjpwYXJzZUZvbnRGYWNlU3RyZXRjaChjb25zdCBTdHJpbmcmIHN0cmluZywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihwYXJzZXJD
b250ZXh0KGNvbnRleHQpLCBzdHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2Ug
PSBwYXJzZXIudG9rZW5pemVyKCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hp
dGVzcGFjZSgpOworICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBhdXRvIHBhcnNlZFZhbHVlID0KKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQor
ICAgICAgICBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0
cmV0Y2hSYW5nZShyYW5nZSwgY29udGV4dC5jc3NWYWx1ZVBvb2woKSk7CisjZWxzZQorICAgICAg
ICBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udFN0cmV0Y2go
cmFuZ2UsIGNvbnRleHQuY3NzVmFsdWVQb29sKCkpOworI2VuZGlmCisgICAgaWYgKCFwYXJzZWRW
YWx1ZSB8fCAhcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIENTU1BhcnNlcklt
cGwgcGFyc2VyKHBhcnNlckNvbnRleHQoY29udGV4dCksIHN0cmluZyk7CisgICAgQ1NTUGFyc2Vy
VG9rZW5SYW5nZSByYW5nZSA9IHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgpOworICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnNXb3JrZXJTYWZlOjpjb25zdW1lRm9udEZhY2VVbmljb2RlUmFuZ2UocmFuZ2Up
OworICAgIGlmICghcGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitSZWZQdHI8Q1NTVmFs
dWU+IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZUZlYXR1cmVTZXR0
aW5ncyhjb25zdCBTdHJpbmcmIHN0cmluZywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBDU1NQYXJzZXJJbXBsIHBhcnNlcihwYXJzZXJDb250ZXh0KGNvbnRleHQpLCBz
dHJpbmcpOworICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBwYXJzZXIudG9rZW5pemVy
KCktPnRva2VuUmFuZ2UoKTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIGlm
IChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHBhcnNl
ZFZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRG
ZWF0dXJlU2V0dGluZ3MocmFuZ2UsIGNvbnRleHQuY3NzVmFsdWVQb29sKCkpOworICAgIGlmICgh
cGFyc2VkVmFsdWUgfHwgIXJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorCitSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3Bl
cnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VGb250RmFjZURpc3BsYXkoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ1NTUGFyc2Vy
SW1wbCBwYXJzZXIocGFyc2VyQ29udGV4dChjb250ZXh0KSwgc3RyaW5nKTsKKyAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlID0gcGFyc2VyLnRva2VuaXplcigpLT50b2tlblJhbmdlKCk7Cisg
ICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBwYXJzZWRWYWx1ZSA9IENTU1Byb3BlcnR5
UGFyc2VySGVscGVyc1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmFjZUZvbnREaXNwbGF5KHJhbmdl
LCBjb250ZXh0LmNzc1ZhbHVlUG9vbCgpKTsKKyAgICBpZiAoIXBhcnNlZFZhbHVlIHx8ICFyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBwYXJzZWRW
YWx1ZTsKK30KKworbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmUg
eworCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZhY2VTcmNVUkkoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgU3RyaW5nIHVybCA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVVybEFz
U3RyaW5nVmlldyhyYW5nZSkudG9TdHJpbmcoKTsKKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxDU1NGb250RmFjZVNyY1ZhbHVlPiB1
cmlWYWx1ZSA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZShjb250ZXh0LmNvbXBsZXRlVVJM
KHVybCkuc3RyaW5nKCksIGNvbnRleHQuaXNDb250ZW50T3BhcXVlID8gTG9hZGVkRnJvbU9wYXF1
ZVNvdXJjZTo6WWVzIDogTG9hZGVkRnJvbU9wYXF1ZVNvdXJjZTo6Tm8pOworCisgICAgaWYgKHJh
bmdlLnBlZWsoKS5mdW5jdGlvbklkKCkgIT0gQ1NTVmFsdWVGb3JtYXQpCisgICAgICAgIHJldHVy
biB1cmlWYWx1ZTsKKworICAgIC8vIEZJWE1FOiBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nz
LWZvbnRzIHNheXMgdGhhdCBmb3JtYXQoKSBjb250YWlucyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0
IG9mIHN0cmluZ3MsCisgICAgLy8gYnV0IENTU0ZvbnRGYWNlU3JjVmFsdWUgc3RvcmVzIG9ubHkg
b25lIGZvcm1hdC4gQWxsb3dpbmcgb25lIGZvcm1hdCBmb3Igbm93LgorICAgIC8vIEZJWE1FOiBX
ZSdyZSBhbGxvd2luZyB0aGUgZm9ybWF0IHRvIGJlIGFuIGlkZW50aWZpZXIgYXMgd2VsbCBhcyBh
IHN0cmluZywgYmVjYXVzZSB0aGUgb2xkCisgICAgLy8gcGFyc2VyIGRpZC4gSXQncyBub3QgY2xl
YXIgaWYgd2UgbmVlZCB0byBjb250aW51ZSB0byBzdXBwb3J0IHRoaXMgYmVoYXZpb3IsIGJ1dCB3
ZSBoYXZlIGxvdHMgb2YKKyAgICAvLyBsYXlvdXQgdGVzdHMgdGhhdCByZWx5IG9uIGl0LgorICAg
IENTU1BhcnNlclRva2VuUmFuZ2UgYXJncyA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZUZ1bmN0aW9uKHJhbmdlKTsKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgYXJnID0gYXJn
cy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgIGlmICgoYXJnLnR5cGUoKSAhPSBT
dHJpbmdUb2tlbiAmJiBhcmcudHlwZSgpICE9IElkZW50VG9rZW4pIHx8ICFhcmdzLmF0RW5kKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHVyaVZhbHVlLT5zZXRGb3JtYXQoYXJnLnZh
bHVlKCkudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIHVyaVZhbHVlOworfQorCitzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZhY2VTcmNMb2NhbChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKK3sKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVGdW5jdGlvbihyYW5nZSk7CisgICAgaWYgKGFyZ3MucGVlaygp
LnR5cGUoKSA9PSBTdHJpbmdUb2tlbikgeworICAgICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
YXJnID0gYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAoIWFy
Z3MuYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
Q1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoYXJnLnZhbHVlKCkudG9TdHJpbmcoKSk7
CisgICAgfQorICAgIGlmIChhcmdzLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAg
ICAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShhcmdzKTsKKyAg
ICAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKGZhbWlseU5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Y29uc3VtZUZvbnRGYWNlU3JjKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQoreworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVl
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKKworICAgIGRvIHsKKyAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlOworICAgICAgICBpZiAodG9rZW4uZnVuY3Rp
b25JZCgpID09IENTU1ZhbHVlTG9jYWwpCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNvbnN1
bWVGb250RmFjZVNyY0xvY2FsKHJhbmdlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBjb25zdW1lRm9udEZhY2VTcmNVUkkocmFuZ2UsIGNvbnRleHQpOworICAgICAg
ICBpZiAoIXBhcnNlZFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHZhbHVlcy0+YXBwZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0gd2hp
bGUgKENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShyYW5nZSkpOworICAgIHJldHVybiB2YWx1ZXM7Cit9CisKK1JlZlB0cjxDU1NGb250U3R5
bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAgaWYg
KGF1dG8gcmVzdWx0ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFN0eWxl
UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkgeworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMp
CisgICAgICAgIGlmIChyZXN1bHQtPnN0eWxlID09IENTU1ZhbHVlT2JsaXF1ZSAmJiByZXN1bHQt
PmFuZ2xlKSB7CisgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShw
b29sLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLAorICAgICAgICAgICAg
ICAgIHBvb2wuY3JlYXRlVmFsdWUocmVzdWx0LT5hbmdsZS0+dmFsdWUsIHJlc3VsdC0+YW5nbGUt
PnR5cGUpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVW
YWx1ZTo6Y3JlYXRlKHBvb2wuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3VsdC0+c3R5bGUpKTsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZUtl
eXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29s
KQoreworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFdv
cmtlclNhZmU8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlxdWU+
KHJhbmdlLCBwb29sKTsKK30KKworUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1
bWVGb250U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAgYXV0byBrZXl3b3Jk
ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSwgcG9vbCk7CisgICAgaWYgKCFr
ZXl3b3JkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChrZXl3b3JkLT52YWx1
ZUlEKCkgIT0gQ1NTVmFsdWVPYmxpcXVlIHx8IHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBDU1NGb250U3R5bGVSYW5nZVZhbHVlOjpjcmVhdGUoa2V5d29yZC5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBub3QgYWxsb3cgdGhlIHVu
aXRsZXNzIHplcm8uCisgICAgaWYgKGF1dG8gZmlyc3RBbmdsZSA9IENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2VyU2FmZShyYW5nZSwgY3NzUGFyc2VyTW9kZSwgcG9v
bCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6QWxsb3cpKSB7Cisg
ICAgICAgIGF1dG8gZmlyc3RBbmdsZUluRGVncmVlcyA9IGZpcnN0QW5nbGUtPmRvdWJsZVZhbHVl
KENTU1VuaXRUeXBlOjpDU1NfREVHKTsKKyAgICAgICAgaWYgKCFpc0ZvbnRTdHlsZUFuZ2xlSW5S
YW5nZShmaXJzdEFuZ2xlSW5EZWdyZWVzKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBpZiAocmFuZ2UuYXRFbmQoKSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgICAgICAgICByZXN1bHQt
PmFwcGVuZChmaXJzdEFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgcmV0dXJu
IENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU6OmNyZWF0ZShrZXl3b3JkLnJlbGVhc2VOb25OdWxsKCks
IFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcHJvYmFibHkgbm90IGFsbG93IHRoZSB1bml0bGVzcyB6ZXJvLgorICAgICAgICBhdXRv
IHNlY29uZEFuZ2xlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3Jr
ZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBwb29sLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdyk7CisgICAgICAgIGlmICghc2Vjb25kQW5nbGUpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byBzZWNvbmRBbmdsZUluRGVn
cmVlcyA9IHNlY29uZEFuZ2xlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX0RFRyk7Cisg
ICAgICAgIGlmICghaXNGb250U3R5bGVBbmdsZUluUmFuZ2Uoc2Vjb25kQW5nbGVJbkRlZ3JlZXMp
IHx8IGZpcnN0QW5nbGVJbkRlZ3JlZXMgPiBzZWNvbmRBbmdsZUluRGVncmVlcykKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvIHJlc3VsdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoZmlyc3RBbmds
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQoc2Vjb25kQW5nbGUu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVSYW5nZVZhbHVl
OjpjcmVhdGUoa2V5d29yZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHJlc3VsdCkpOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorI2VuZGlmCisKK3N0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKK3sKKyAgICByZXR1
cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRXb3JrZXJTYWZlPENTU1Zh
bHVlTm9ybWFsLCBDU1NWYWx1ZUJvbGQ+KHJhbmdlLCBwb29sKTsKK30KKworI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCitSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1
dGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQor
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3Jk
VmFsdWUocmFuZ2UsIHBvb2wpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8gZmly
c3ROdW1iZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVt
YmVyV29ya2VyU2FmZShyYW5nZSwgcG9vbCk7CisgICAgaWYgKCFmaXJzdE51bWJlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVy
biBmaXJzdE51bWJlcjsKKyAgICBhdXRvIHNlY29uZE51bWJlciA9IENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKHJhbmdlLCBwb29sKTsK
KyAgICBpZiAoIXNlY29uZE51bWJlciB8fCBmaXJzdE51bWJlci0+ZmxvYXRWYWx1ZSgpID4gc2Vj
b25kTnVtYmVyLT5mbG9hdFZhbHVlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1
dG8gcmVzdWx0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIHJl
c3VsdC0+YXBwZW5kKGZpcnN0TnVtYmVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJlc3VsdC0+
YXBwZW5kKHNlY29uZE51bWJlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZXR1cm4gUmVmUHRy
PENTU1ZhbHVlPihXVEZNb3ZlKHJlc3VsdCkpOworfQorI2Vsc2UKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVGb250V2VpZ2h0QWJzb2x1dGVLZXl3b3JkVmFsdWUocmFuZ2UsIHBvb2wpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyV29ya2VyU2FmZShyYW5nZSwgcG9vbCk7Cit9CisjZW5kaWYKKwor
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKK3sKKyAgICBp
ZiAoYXV0byB2YWx1ZUlEID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFN0
cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYg
RU5BQkxFKFZBUklBVElPTl9GT05UUykKK3N0YXRpYyBib29sIGZvbnRTdHJldGNoSXNXaXRoaW5S
YW5nZShmbG9hdCBzdHJldGNoKQoreworICAgIHJldHVybiBzdHJldGNoID49IDA7Cit9CisjZW5k
aWYKKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2goQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKK3sKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUocmFuZ2UsIHBvb2wpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAg
aWYgKGF1dG8gcGVyY2VudCA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNl
bnRXb3JrZXJTYWZlKHJhbmdlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUsIHBvb2wpKQorICAgICAg
ICByZXR1cm4gZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKHBlcmNlbnQtPnZhbHVlPGZsb2F0Pigp
KSA/IHBlcmNlbnQgOiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
KyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9u
dFN0cmV0Y2hSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBw
b29sKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRW
YWx1ZShyYW5nZSwgcG9vbCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBmaXJz
dFBlcmNlbnQgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50V29ya2Vy
U2FmZShyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlLCBwb29sKTsKKyAgICBpZiAoIWZpcnN0
UGVyY2VudCB8fCAhZm9udFN0cmV0Y2hJc1dpdGhpblJhbmdlKGZpcnN0UGVyY2VudC0+dmFsdWU8
ZmxvYXQ+KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocmFuZ2UuYXRFbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZpcnN0UGVyY2VudDsKKyAgICBhdXRvIHNlY29uZFBlcmNlbnQg
PSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5n
ZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlLCBwb29sKTsKKyAgICBpZiAoIXNlY29uZFBlcmNlbnQg
fHwgIWZvbnRTdHJldGNoSXNXaXRoaW5SYW5nZShzZWNvbmRQZXJjZW50LT52YWx1ZTxmbG9hdD4o
KSkgfHwgZmlyc3RQZXJjZW50LT5mbG9hdFZhbHVlKCkgPiBzZWNvbmRQZXJjZW50LT5mbG9hdFZh
bHVlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgIHJlc3VsdC0+YXBwZW5kKGZpcnN0
UGVyY2VudC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICByZXN1bHQtPmFwcGVuZChzZWNvbmRQZXJj
ZW50LnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBSZWZQdHI8Q1NTVmFsdWU+KFdURk1v
dmUocmVzdWx0KSk7Cit9CisjZW5kaWYKKworUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZUZv
bnRGYWNlVW5pY29kZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKKworICAgIGRvIHsKKyAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKHRva2Vu
LnR5cGUoKSAhPSBVbmljb2RlUmFuZ2VUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIFVDaGFyMzIgc3RhcnQgPSB0b2tlbi51bmljb2RlUmFuZ2VTdGFydCgpOwor
ICAgICAgICBVQ2hhcjMyIGVuZCA9IHRva2VuLnVuaWNvZGVSYW5nZUVuZCgpOworICAgICAgICBp
ZiAoc3RhcnQgPiBlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdmFs
dWVzLT5hcHBlbmQoQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmNyZWF0ZShzdGFydCwgZW5kKSk7Cisg
ICAgfSB3aGlsZSAoQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSk7CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitzdGF0aWMg
UmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGNvbnN1bWVGb250RmVhdHVyZVRhZyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICAvLyBGZWF0dXJlIHRhZyBuYW1lIGNvbnNpc3Rz
IG9mIDQtbGV0dGVyIGNoYXJhY3RlcnMuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRhZ05h
bWVMZW5ndGggPSA0OworCisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAvLyBGZWF0dXJlIHRhZyBuYW1lIGNv
bWVzIGZpcnN0CisgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBTdHJpbmdUb2tlbikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHRva2VuLnZhbHVlKCkubGVuZ3RoKCkgIT0gdGFnTmFt
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgRm9udFRhZyB0YWc7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZy5zaXplKCk7ICsraSkgeworICAgICAg
ICAvLyBMaW1pdHMgdGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgdG8gMHgyMC0weDdFLCBmb2xsb3dp
bmcgdGhlIHRhZyBuYW1lIHJ1bGVzIGRlZmllbmQgaW4gdGhlIE9wZW5UeXBlIHNwZWNpZmljYXRp
b24uCisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHRva2VuLnZhbHVlKClbaV07CisgICAgICAg
IGlmIChjaGFyYWN0ZXIgPCAweDIwIHx8IGNoYXJhY3RlciA+IDB4N0UpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgdGFnW2ldID0gdG9BU0NJSUxvd2VyKGNoYXJhY3Rlcik7
CisgICAgfQorCisgICAgaW50IHRhZ1ZhbHVlID0gMTsKKyAgICBpZiAoIXJhbmdlLmF0RW5kKCkg
JiYgcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBDb21tYVRva2VuKSB7CisgICAgICAgIC8vIEZlYXR1
cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6IDxpbnRlZ2VyPiB8IG9uIHwgb2ZmCisgICAgICAg
IGlmIChhdXRvIGludGVnZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRl
Z2VyUmF3KHJhbmdlLCAwKSkKKyAgICAgICAgICAgIHRhZ1ZhbHVlID0gKmludGVnZXI7CisgICAg
ICAgIGVsc2UgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlT24gfHwgcmFuZ2UucGVl
aygpLmlkKCkgPT0gQ1NTVmFsdWVPZmYpCisgICAgICAgICAgICB0YWdWYWx1ZSA9IHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSA9PSBDU1NWYWx1ZU9uOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIENTU0Zv
bnRGZWF0dXJlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKHRhZyksIHRhZ1ZhbHVlKTsKK30KKworUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQoreworICAgIGlmIChyYW5nZS5wZWVrKCku
aWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUlkZW50V29ya2VyU2FmZShyYW5nZSwgcG9vbCk7CisgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gc2V0dGluZ3MgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7CisgICAgZG8geworICAgICAgICBSZWZQdHI8Q1NTRm9udEZlYXR1cmVWYWx1ZT4gZm9u
dEZlYXR1cmVWYWx1ZSA9IGNvbnN1bWVGb250RmVhdHVyZVRhZyhyYW5nZSk7CisgICAgICAgIGlm
ICghZm9udEZlYXR1cmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBzZXR0aW5ncy0+YXBwZW5kKGZvbnRGZWF0dXJlVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfSB3aGlsZSAoQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKHJhbmdlKSk7CisgICAgcmV0dXJuIHNldHRpbmdzOworfQorCitSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250RmFjZUZvbnREaXNwbGF5KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAgcmV0dXJuIENTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUlkZW50V29ya2VyU2FmZTxDU1NWYWx1ZUF1dG8s
IENTU1ZhbHVlQmxvY2ssIENTU1ZhbHVlU3dhcCwgQ1NTVmFsdWVGYWxsYmFjaywgQ1NTVmFsdWVP
cHRpb25hbD4ocmFuZ2UsIHBvb2wpOworfQorCit9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnNXb3JrZXJTYWZlCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2Fm
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAxNmZjZDA5YzI0MDM0ZTQyYzQ3ZWViNGZhZDljNjEwZjJmNjViN2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyV29ya2VyU2FmZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NQYXJzZXJD
b250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENTU0ZvbnRTdHlsZVZhbHVlOworY2xhc3MgQ1NTRm9udFN0eWxlUmFuZ2VW
YWx1ZTsKK2NsYXNzIENTU1ZhbHVlOworY2xhc3MgQ1NTVmFsdWVMaXN0OworY2xhc3MgQ1NTVmFs
dWVQb29sOworY2xhc3MgQ29sb3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitj
bGFzcyBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUgeworcHVibGljOgorICAgIHN0YXRpYyBD
b2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IHBhcnNlRm9udChjb25zdCBTdHJpbmcmLCBD
U1NQYXJzZXJNb2RlID0gSFRNTFN0YW5kYXJkTW9kZSk7CisKKyAgICBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVNyYyhjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZVN0
eWxlKGNvbnN0IFN0cmluZyYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZvbnRGYWNlV2VpZ2h0KGNvbnN0IFN0cmluZyYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUZv
bnRGYWNlU3RyZXRjaChjb25zdCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7Cisg
ICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGb250RmFjZVVuaWNvZGVSYW5nZShjb25z
dCBTdHJpbmcmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VGb250RmFjZUZlYXR1cmVTZXR0aW5ncyhjb25zdCBTdHJpbmcmLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VG
b250RmFjZURpc3BsYXkoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwor
fTsKKworbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyc1dvcmtlclNhZmUgeworCitS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9udEZhY2VTcmMoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKK1JlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4g
Y29uc3VtZUZvbnRTdHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NT
VmFsdWVQb29sJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRj
aEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaChDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTVmFsdWVQb29sJik7CitSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lRm9udEZh
Y2VVbmljb2RlUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lRm9udEZlYXR1cmVTZXR0aW5ncyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQ
b29sJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250RmFjZUZvbnREaXNw
bGF5KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKKworI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCitSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29uc3VtZUZv
bnRTdHlsZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1
ZVBvb2wmKTsKK1JlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZVJhbmdl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKK1JlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUZvbnRTdHJldGNoUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlUG9v
bCYpOworI2VuZGlmCisKKyNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTVmFsdWVQb29sJik7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzV29ya2VyU2FmZQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggZTc1MGE2
MjdhYjYwYmM5M2ZkYjVmNzU4NTk4M2U2ZGE1NDllYmI2ZC4uN2VjY2Q2MTA4MGNjOGJiODAxMjQz
NGRlZmJlOTUwZjIwMTQ4MzE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkNTU1ZhbHVl
UG9vbC5oIgogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNvbW1vblZNLmgi
CiAjaW5jbHVkZSAiRE9NVGltZXIuaCIKQEAgLTIzMyw2ICsyMzQsMTEgQEAgRm9udENhY2hlJiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250Q2FjaGUoKQogICAgIHJldHVybiBGb250Q2FjaGU6
OnNpbmdsZXRvbigpOwogfQogCitDU1NWYWx1ZVBvb2wmIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OmNzc1ZhbHVlUG9vbCgpCit7CisgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7
Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxGb250TG9hZFJlcXVlc3Q+IFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OmZvbnRMb2FkUmVxdWVzdChTdHJpbmcmLCBib29sLCBib29sLCBMb2FkZWRGcm9tT3Bh
cXVlU291cmNlKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggYzk5OGIxMmYyOWNjNjk2OGI5Yzk2NjViMDY1
ZmQxMmQ3OGQ1N2I4Mi4uMTJiYTQ2N2RmMWMyMzdmYjgyM2M5YWZlOTE0MzNlMDhkOTVhOGEzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC02Miw2
ICs2Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIENh
Y2hlZFNjcmlwdDsKIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKK2NsYXNzIENTU1ZhbHVlUG9vbDsK
IGNsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIEV2ZW50UXVldWU7CiBjbGFzcyBFdmVudExv
b3BUYXNrR3JvdXA7CkBAIC0xNjcsNiArMTY4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBG
b250Q2FjaGUmIGZvbnRDYWNoZSgpOwogICAgIHZpcnR1YWwgQ1NTRm9udFNlbGVjdG9yKiBjc3NG
b250U2VsZWN0b3IoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBDU1NWYWx1ZVBv
b2wmIGNzc1ZhbHVlUG9vbCgpOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEZvbnRMb2Fk
UmVxdWVzdD4gZm9udExvYWRSZXF1ZXN0KFN0cmluZyYgdXJsLCBib29sIGlzU1ZHLCBib29sIGlz
SW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUsIExvYWRlZEZyb21PcGFxdWVT
b3VyY2UpOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkxvYWRpbmdGb250U29vbihGb250TG9hZFJl
cXVlc3QmKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggMTQxNTU3ZmRjOTdiNDIwYmMxMjM5YzEz
MTc3NGYzNDdjNmVjYzA0Zi4uYmYyN2Q5MTU3OWUzZWI4M2EwMDk3MTFkYWNhOTY4YTAyMGI2YzYz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpAQCAtMTI1LDggKzEyNSw4IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250V2l0aG91dFVwZGF0aW5nU3R5bGUoY29u
c3QgU3RyaW5nJiBuZXdGb250CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEFjY29yZGluZyB0
byBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtaHRtbC8yMDA5SnVs
LzA5NDcuaHRtbCwKLSAgICAvLyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11
c3QgYmUgaWdub3JlZC4gcGFyc2VGb250V29ya2VyU2FmZSgpIGlnbm9yZXMgdGhlc2UuCi0gICAg
YXV0byBmb250UmF3ID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0ZvbnQsIHN0
cmljdFRvQ1NTUGFyc2VyTW9kZSghdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUoKSkpOwor
ICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVk
LiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udCgpIGlnbm9yZXMgdGhlc2Uu
CisgICAgYXV0byBmb250UmF3ID0gQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlOjpwYXJzZUZv
bnQobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCF1c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSgpKSk7CiAgICAgaWYgKCFmb250UmF3KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAppbmRleCA5MThlN2MwOWYwNjVi
MWZlMTBiMTdhOTkxNGZjODI1YzQ1NDNhNGE5Li5iMGM2MjU5NDJiMmI1MGI4MWI0ODYwZDRjYmVi
OWU4YTJjZjgxZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
Y3BwCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCisKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCIKICNpbmNsdWRlICJPZmZz
Y3JlZW5DYW52YXMuaCIKICNlbmRpZgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogCiAj
aWYgVVNFKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KQEAgLTU3LDcg
KzU5LDcgQEAgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nLCBDYW52
YXNCYXNlJiBjYW52YXNCYXNlKQogewogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAg
IGlmIChjYW52YXNCYXNlLmlzT2Zmc2NyZWVuQ2FudmFzKCkpCi0gICAgICAgIHJldHVybiBDU1NQ
YXJzZXI6OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbG9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJu
IENTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZTo6cGFyc2VDb2xvcihjb2xvclN0cmluZyk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShjYW52YXNCYXNlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKaW5kZXggOGFlNDk4NDJiOTBhOGJmZmFkMTZkNzM5MzdhNTIxZDMx
YWZhNTkwMi4uMDRkOThiNjlkNjkzMjQ5ODU1MzJmODhhYmNiY2JiYWVhMGRlZGQ0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0zNiw4ICszNiw4IEBACiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVMpCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVGb3JGb250UmF3LmgiCkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9u
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saXN0cy53
My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwvMDk0Ny5odG1sLAotICAg
IC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBw
YXJzZUZvbnRXb3JrZXJTYWZlKCkgaWdub3JlcyB0aGVzZS4KLSAgICBhdXRvIGZvbnRSYXcgPSBD
U1NQYXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJN
b2RlKCF1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSgpKSk7CisgICAgLy8gdGhlICJpbmhl
cml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQuIENTU1Byb3BlcnR5UGFy
c2VyV29ya2VyU2FmZTo6cGFyc2VGb250KCkgaWdub3JlcyB0aGVzZS4KKyAgICBhdXRvIGZvbnRS
YXcgPSBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmU6OnBhcnNlRm9udChuZXdGb250LCBzdHJp
Y3RUb0NTU1BhcnNlck1vZGUoIXVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKCkpKTsKICAg
ICBpZiAoIWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IDM3YmRmMjkxNDdlMzZlNDc2MmJiZmJhNGUzOGU2
ODdmMmU4NDIyNWUuLjYyZGEzMTgzNTM2MWQ0MGMzMDY1ODllZmFjMDhkZjE0MzQxZmNlMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTExNyw3ICsx
MTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJpdG1hcChJbWFnZUJpdG1hcDo6
U291cmNlJiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmKTsK
ICAgICB2b2lkIGNyZWF0ZUltYWdlQml0bWFwKEltYWdlQml0bWFwOjpTb3VyY2UmJiwgaW50IHN4
LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgSW1hZ2VCaXRt
YXA6OlByb21pc2UmJik7CiAKLSAgICBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCgpOworICAg
IENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCkgZmluYWw7CiAgICAgQ1NTRm9udFNlbGVjdG9y
KiBjc3NGb250U2VsZWN0b3IoKSBmaW5hbDsKICAgICBGb250Q2FjaGUmIGZvbnRDYWNoZSgpIGZp
bmFsOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>