%eax,%r11d
	addl	%r11d,%ecx
	movl	36(%rsi),%r10d
	movl	$0xffffffff,%r11d
	roll	$15,%ecx
	xorl	%eax,%r11d
	addl	%edx,%ecx
	leal	-343485551(%rbx,%r10,1),%ebx
	orl	%ecx,%r11d
	xorl	%edx,%r11d
	addl	%r11d,%ebx
	movl	0(%rsi),%r10d
	movl	$0xffffffff,%r11d
	roll	$21,%ebx
	xorl	%edx,%r11d
	addl	%ecx,%ebx

	addl	%r8d,%eax
	addl	%r9d,%ebx
	addl	%r14d,%ecx


},
		onTryEatItem(item) {
			const healingItems = [
				'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry', 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice',
			];
			if (healingItems.includes(item.id)) {
				return this.effectState.checkedBerserk;
			}
			return true;
		},
		onAfterMoveSecondary(target, source, move) {
			this.effectState.checkedBerserk = true;
			if (!source || source === target || !target.hp || !move.totalDamage) return;
			const lastAttackedBy = target.getLastAttackedBy();
			if (!lastAttackedBy) return;
			const damage = move.multihit ? move.totalDamage : lastAttackedBy.damage;
			if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) {
				this.boost({spa: 1}, target, target);
			}
		},
		name: "Berserk",
		rating: 2,
		num: 201,
	},
	bigpecks: {
		onTryBoost(boost, target, source, effect) {
			if (source && target === source) return;
			if (boost.def && boost.def < 0) {
				delete boost.def;
				if (!(effect as ActiveMove).secondaries && effect.id !== 'octolock') {
					this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", "[of] " + target);
				}
			}
		},
		isBreakable: true,
		name: "Big Pecks",
		rating: 0.5,
		num: 145,
	},
	blaze: {
		onModifyAtkPriority: 5,
		onModifyAtk(atk, attacker, defender, move) {
			if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Blaze boost');
				return this.chainModify(1.5);
			}
		},
		onModifySpAPriority: 5,
		onModifySpA(atk, attacker, defender, move) {
			if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {
				this.debug('Blaze boost');
				return this.chainModify(1.5);
			}
		},
		name: "Blaze",
		rating: 2,
		num: 66,
	},
	bulletproof: {
		onTryHit(pokemon, target, move) {
			if (move.flags['bullet']) {
				this.add('-immune', pokemon, '[from] ability: Bulletproof');
				return null;
			}
		},
		isBreakable: true,
		name: "Bulletproof",
		rating: 3,
		num: 171,
	},
	cheekpouch: {
		onEatItem(item, pokemon) {
			this.heal(pokemon.baseMaxhp / 3);
		},
		name: "Cheek Pouch",
		rating: 2,
		num: 167,
	},
	chillingneigh: {
		onSourceAfterFaint(length, target, source, effect) {
			if (effect && effect.effectType === 'Move') {
				this.boost({atk: length}, source);
			}
		},
		name: "Chilling Neigh",
		rating: 3,
		num: 264,
	},
	chlorophyll: {
		onModifySpe(spe, pokemon) {
			if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {
				return this.chainModify(2);
			}
		},
		name: "Chlorophyll",
		rating: 3,
		num: 34,
	},
	clearbody: {
		onTryBoost(boost, target, source, effect) {
			if (source && target === source) return;
			let showMsg = false;
			let i: BoostID;
			for (i in boost) {
				if (boost[i]! < 0) {
					delete boost[i];
					sh


and present rows, labels, and buttons appropriately. todo sprites?
        /// </summary>
        private Control BuildReagentRow(Color reagentColor, int rowCount, string name, ReagentId reagent, FixedPoint2 quantity, bool isBuffer, bool addReagentButtons)
        {
            //Colors rows and sets fallback for reagentcolor to the same as background, this will hide colorPanel for entities hopefully
            var rowColor1 = Color.FromHex("#1B1B1E");
            var rowColor2 = Color.FromHex("#202025");
            var currentRowColor = (rowCount % 2 == 1) ? rowColor1 : rowColor2;
            if ((reagentColor == default(Color))|(!addReagentButtons))
            {
                reagentColor = currentRowColor;
            }
            //this calls the separated button builder, and stores the return to render after labels
            var reagentButtonConstructors = CreateReagentTransferButtons(reagent, isBuffer, addReagentButtons);

            // Create the row layout with the color panel
            var rowContainer = new BoxContainer
            {
                Orientation = LayoutOrientation.Horizontal,
                Children =
                {
                    new Label { Text = $"{name}: " },
                    new Label
                    {
                        Text = $"{quantity}u",
                        StyleClasses = { StyleNano.StyleClassLabelSecondaryColor }
                    },

                    // Padding
                    new Control { HorizontalExpand = true },
                    // Colored panels for reagents


 nullptr,
             &timeout) <= 0) {
    return false;
  }
  return FD_ISSET(sock, wait_set);
#else
  short events = wait_type == WaitType::kRead ? POLLIN : POLLOUT;
  pollfd fd = {/*fd=*/sock, events, /*revents=*/0};
  return poll(&fd, 1, kTimeoutSeconds * 1000) == 1 && (fd.revents & events);
#endif
}

TEST(BIOTest, SocketConnect) {
  static const char kTestMessage[] = "test";
  OwnedSocket listening_sock = ListenLoopback(/*backlog=*/1);
  ASSERT_TRUE(listening_sock.is_valid()) << LastSocketError();

  SockaddrStorage addr;
  ASSERT_EQ(getsockname(listening_sock.get(), addr.addr_mut(), &addr.len), 0)
      << LastSocketError();

  char hostname[80];
  if (addr.family() == AF_INET6) {
    snprintf(hostname, sizeof(hostname), "[::1]:%d",
             ntohs(addr.ToIPv6().sin6_port));
  } else {
    snprintf(hostname, sizeof(hostname), "127.0.0.1:%d",
             ntohs(addr.ToIPv4().sin_port));
  }

  // Connect to it with a connect BIO.
  bssl::UniquePtr<BIO> bio(BIO_new_connect(hostname));
  ASSERT_TRUE(bio);

  // Write a test message to the BIO. This is assumed to be smaller than the
  // transport buffer.
  ASSERT_EQ(static_cast<int>(sizeof(kTestMessage)),
            BIO_write(bio.get(), kTestMessage, sizeof(kTestMessage)))
      << LastSocketError();

  // Accept the socket.
  OwnedSocket sock(accept(listening_sock.get(), addr.addr_mut(), &addr.len));
  ASSERT_TRUE(sock.is_valid()) << LastSocketError();

  // Check the same message is read back out.
  char buf[sizeof(kTestMessage)];
  ASSERT_EQ(static_cast<int>(sizeof(kTestMessage)),
            recv(sock.get(), buf, sizeof(buf), 0))
      << LastSocketError();
  EXPECT_EQ(Bytes(kTestMessage, sizeof(kTestMessage)), Bytes(buf, sizeof(buf)));
}

TEST(BIOTest, SocketNonBlocking) {
  OwnedSocket listening_sock = ListenLoopback(/*backlog=*/1);
  ASSERT_TRUE(listening_sock.is_valid()) << LastSocketError();

  // Connect to |listening_sock|.
  SockaddrStorage addr;
  ASSERT_EQ(getsockname(listening_sock.get(), addr.addr_mut(), &addr.len), 0)
      << LastSocketError();
  OwnedSocket connect_sock(socket(addr.family(), SOCK_STREAM, 0));
  ASSERT_TRUE(connect_sock.is_valid()) << LastSocketError();
  ASSERT_EQ(connect(connect_sock.get(), addr.addr(), addr.len), 0)
      << LastSocketError();
  ASSERT_TRUE(SocketSetNonBlocking(connect_sock.get())) << LastSocketError();
  bssl::UniquePtr<BIO> connect_bio(
      BIO_new_socket(connect_sock.get(), BIO_NOCLOSE));
  ASSERT_TRUE(connect_bio);

  // Make a corresponding accepting socket.
  OwnedSocket accept_sock(
      accept(listening_sock.get(), addr.addr_mut(), &addr.len));
  ASSERT_TRUE(accept_sock.is_valid()) << LastSocketError();
  ASSERT_TRUE(SocketSetNonBlocking(accept_sock.get())) << LastSocketError();
  bssl::UniquePtr<BIO> accept_bio(
      BIO_new_socket(accept_sock.get(), BIO_NOCLOSE));
  ASSERT_TRUE(accept_bio);

  // Exchange data through the socket.
  static const char kTestMessage[] = "hell


ptr, "porg_stride");
      let pref = Plane::new_stride(&pref_ptr, "pref_stride");

      if step == 4 {
        satd_4nx4n_kernel(&mut inner, &sum, px, &porg, &pref)
      } else {
        assert_eq!(step, 8);
        satd_8nx8n_kernel(&mut inner, &sum, px, &porg, &pref);
      }

      check.check();
    }
    check.finish();

    let mut next_row = TokenStream::default();
    porg.next_nth(step, &mut next_row);
    pref.next_nth(step, &mut next_row);
    next_row.extend(quote! {
      #cporg_ptr = #porg;
      #cpref_ptr = #pref;
    });

    body.extend(quote! {
      let mut r_i = (0..#h).step_by(#step);
      r_i.next();
      let mut c_i = #iter;
      c_i.next();
      let mut #cporg_ptr = #porg;
      let mut #cpref_ptr = #pref;
      loop {
        #inner

        if let Some(_) = c_i.next() {
          #cporg_ptr = #cporg_ptr.add(#step * #unrolled_cols);
          #cpref_ptr = #cpref_ptr.add(#step * #unrolled_cols);
          continue;
        } else if let Some(_) = r_i.next() {
          #next_row
          c_i = #iter;
          c_i.next();
          continue;
        } else {
          break;
        }
      }
    });
  } else {
    // multiple iterations per row
    let mut check = UnrollCheck::new_max(&fn_name, max_unroll);
    // We have to possibly unroll multiple row iterations.
    let unrolled_rows = max_unroll / (b.w() / step);
    let unrolled_rows = unrolled_rows.max(1);

    let iter = if unrolled_rows > 1 {
      quote!((0..#h).step_by(#step * #unrolled_rows))
    } else {
      quote!((0..#h).step_by(#step))
    };

    let mut inner = TokenStream::default();

    {
      for r in 0..unrolled_rows {
        for c in (0..b.w()).step_by(step) {
          let porg_ptr =
            Var::let_(&mut inner, "lporg", porg.add_rc(r * step, c));
          let pref_ptr =
            Var::let_(&mut inner, "lpref", pref.add_rc(r * step, c));
          let porg = Plane::new_stride(&porg_ptr, "porg_stride");
          let pref = Plane::new_stride(&pref_ptr, "pref_stride");

          if step == 4 {
            satd_4nx4n_kernel(&mut inner, &sum, px, &porg, &pref)
          } else {
            assert_eq!(step, 8);
            satd_8nx8n_kernel(&mut inner, &sum, px, &porg, &pref);
          }

          check.check();
        }
      }
      check.finish();
    }

    let mut next_row = TokenStream::default();
    porg.next_nth(step * unrolled_rows, &mut next_row);
    pref.next_nth(step * unrolled_rows, &mut next_row);

    body.extend(quote! {
      let mut r_i = #iter;
      r_i.next();
      loop {
        #inner

        if let None = r_i.next() {
          break;
        }

        #next_row
      }
    });
  }

  let size = size a


sage.inpaintedImage":"V\xfdběr","textMessage.loadingImage":"Nač\xedt\xe1n\xed…","textMessage.targetedReply":"Př\xedjemce odpovědi:","textMessage.transcriptUnavailable":"Přepis nen\xed k dispozici","thread.archivedConversationDescription":"Tato konverzace je archivov\xe1na. Chceš-li pokračovat, nejprve ji vyřaď z\xa0archivu.","thread.businessDisclaimer-oct-30":"Chaty v\xa0pracovn\xedm prostoru {workspaceName} se nepouž\xedvaj\xed k\xa0tr\xe9nov\xe1n\xed našich modelů. ChatGPT může dělat chyby.","thread.businessDisclaimerNoName-oct-30":"Tvoje chaty v\xa0pracovn\xedm prostoru se nepouž\xedvaj\xed k\xa0tr\xe9nov\xe1n\xed našich modelů. ChatGPT může dělat chyby.","thread.chatgptMayProduceInaccurateInformation-oct-30":"ChatGPT může dělat chyby. Doporučujeme kontrolovat důležit\xe9 informace.","thread.chatgptMayProduceInaccurateInformationNoAuth-march-27":"ChatGPT může dělat chyby. Doporučujeme kontrolovat důležit\xe9 informace. Seznam se s\xa0našimi <termsLink>podm\xednkami</termsLink> a\xa0<privacyLink>z\xe1sadami ochrany soukrom\xed</privacyLink>.","thread.chatgptMayProduceInaccurateInformationNoAuth-may-06":"Pokud pošleš zpr\xe1vu ChatGPT, vyjadřuješ souhlas s\xa0našimi <termsLink>smluvn\xedmi podm\xednkami</termsLink> a\xa0potvrzuješ, že m\xe1š přečten\xe9 naše <privacyLink>z\xe1sady ochrany soukrom\xed</privacyLink>.","thread.chatgptMayProduceInaccurateInformationNoAuthKorea-may-06":"Pokud pošleš zpr\xe1vu ChatGPT, vyjadřuješ souhlas s\xa0našimi <termsLink>smluvn\xedmi podm\xednkami</termsLink> a\xa0potvrzuješ, že m\xe1š přečten\xe9 naše <privacyLink>z\xe1sady ochrany soukrom\xed</privacyLink> a\xa0př\xedslušn\xfd <koreaAddendumLink>dodatek pro Koreu</koreaAddendumLink>.","thread.helpAndFaq":"N\xe1pověda a\xa0čast\xe9 dotazy","thread.keyboardShortcutsMenu":"Kl\xe1vesov\xe9 zkratky","thread.latencyButton":"Zpožděn\xed","thread.modal.onboarding.title":"Nesd\xedlej s\xa0touto aplikac\xed citliv\xe9 informace.","thread.modal.reportModalThankYou.description":"D\xedky za zpr\xe1vu.","thread.modal.reportModalThankYou.dismissButton":"Zavř\xedt","thread.modal.reportModalThankYou.title":"D\xedky za zpr\xe1vu!","thread.modal.unrecoverableError.description":"Je n\xe1m l\xedto, ale něco se pokazilo. Zkus to později znovu.","thread.modal.unrecoverableError.resetThread":"Resetovat vl\xe1kno","thread.modal.unrecoverableError.title":"Něco se pokazilo.","thread.outdatedGptDisclaimer.0":"<bold>Je k dispozici


.id];
				}
			}
		};
	}

	function addStylesToDom(styles, options) {
		for(var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];
			if(domStyle) {
				domStyle.refs++;
				for(var j = 0; j < domStyle.parts.length; j++) {
					domStyle.parts[j](item.parts[j]);
				}
				for(; j < item.parts.length; j++) {
					domStyle.parts.push(addStyle(item.parts[j], options));
				}
			} else {
				var parts = [];
				for(var j = 0; j < item.parts.length; j++) {
					parts.push(addStyle(item.parts[j], options));
				}
				stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
			}
		}
	}

	function listToStyles(list) {
		var styles = [];
		var newStyles = {};
		for(var i = 0; i < list.length; i++) {
			var item = list[i];
			var id = item[0];
			var css = item[1];
			var media = item[2];
			var sourceMap = item[3];
			var part = {css: css, media: media, sourceMap: sourceMap};
			if(!newStyles[id])
				styles.push(newStyles[id] = {id: id, parts: [part]});
			else
				newStyles[id].parts.push(part);
		}
		return styles;
	}

	function insertStyleElement(options, styleElement) {
		var head = getHeadElement();
		var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
		if (options.insertAt === "top") {
			if(!lastStyleElementInsertedAtTop) {
				head.insertBefore(styleElement, head.firstChild);
			} else if(lastStyleElementInsertedAtTop.nextSibling) {
				head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
			} else {
				head.appendChild(styleElement);
			}
			styleElementsInsertedAtTop.push(styleElement);
		} else if (options.insertAt === "bottom") {
			head.appendChild(styleElement);
		} else {
			throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
		}
	}

	function removeStyleElement(styleElement) {
		styleElement.parentNode.removeChild(styleElement);
		var idx = styleElementsInsertedAtTop.indexOf(styleElement);
		if(idx >= 0) {
			styleElementsInsertedAtTop.splice(idx, 1);
		}
	}

	function createStyleElement(options) {
		var styleElement = document.createElement("style");
		styleElement.type = "text/css";
		insertStyleElement(options, styleElement);
		return styleElement;
	}

	function createLinkElement(options) {
		var linkElement = document.createElement("link");
		linkElement.rel = "stylesheet";
		insertStyleElement(options, linkElement);
		return linkElement;
	}

	function addStyle(obj, options) {
		var styleElement, update, remove;

		if (options.singleton) {
			var styleIndex = singletonCounter++;
			styleElement = singletonElement || (singletonElement = createStyleElement(options));
			update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
			remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
		} else if(obj.sourceMap &&
			typeof URL === "function" &&
			typeof URL.createObjectURL === "function" &&
			typeof URL.revokeObjectURL === "function" &&
			typeof Blob === "function" &&
			typeof btoa


urn config.energyCost + (IRConfig.machines.drill * getActiveDrills().size) + (OreDataCards.readNbt(inventoryComponent!!.inventory.getStack(0))?.energyRequired ?: 0)
    }

    override fun applyDefault(
        state: BlockState,
        type: ConfigurationType,
        configuration: MutableMap<Direction, TransferMode>
    ) {
        val direction = (state.block as MachineBlock).getFacing(state)
        when (type) {
            ConfigurationType.ITEM -> {
                configuration[direction.rotateYCounterclockwise()] = TransferMode.OUTPUT
            }
            else -> super.applyDefault(state, type, configuration)
        }
    }

    override fun getValidConfigurations(type: ConfigurationType): Array<TransferMode> {
        return when (type) {
            ConfigurationType.ITEM -> arrayOf(TransferMode.OUTPUT, TransferMode.NONE)
            else -> return super.getValidConfigurations(type)
        }
    }

    override fun toClientTag(tag: NbtCompound) {
        tag.put("LastMinedBlock", lastMinedItem.writeNbt(NbtCompound()))
    }

    override fun fromClientTag(tag: NbtCompound) {
        lastMinedItem = ItemStack.fromNbt(tag.getCompound("LastMinedBlock"))
    }

    companion object {
        val VALID_DRILL_POSITIONS = arrayOf(
            BlockPos(-1, 0, 0),
            BlockPos(1, 0, 0),
            BlockPos(0, 0, -1),
            BlockPos(0, 0, 1),
            BlockPos(-1, 0, -1),
            BlockPos(-1, 0, 1),
            BlockPos(1, 0, 1),
            BlockPos(1, 0, -1)
        )

        const val ENERGY_REQUIRED_ID = 2
        const val MAX_SPEED_ID = 3
        const val START_DRILL_ID = 4
    }
}package me.steven.indrev.blockentities.crafters

import alexiil.mc.lib.attributes.fluid.render.FluidRenderFace
import me.steven.indrev.blocks.machine.HorizontalFacingMachineBlock
import net.minecraft.client.render.VertexConsumerProvider
import net.minecraft.client.render.block.entity.BlockEntityRenderer
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.util.math.Direction

class CondenserBlockEntityRenderer : BlockEntityRenderer<CondenserBlockEntity> {

    override fun render(
        entity: CondenserBlockEntity?,
        tickDelta: Float,
        matrices: MatrixStack?,
        vertexConsumers: VertexConsumerProvider?,
        light: Int,
        overlay: Int
    ) {
        val fluidComponent = entity?.fluidComponent ?: return
        val faces = when (entity.cachedState[HorizontalFacingMachineBlock.HORIZONTAL_FACING]) {
            Direction.NORTH -> NORTH_FACE
            Direction.SOUTH -> SOUTH_FACE
            Direction.WEST -> WEST_FACE
            Direction.EAST -> EAST_FACE
            else -> return
        }
        val volume = fluidComponent[0]
        if (!volume.isEmpty) {
            volume.render(faces, vertexConsumers, matrices)
        }
    }

    companion object {
        private val NORTH_FACE =
            listOf(FluidRenderFace.createFlatFaceZ(0.815, 0.625, -0.005, 0.19, 0.815, -0.005, 1.0, true, false))
        private val SOUTH_FACE =
            listOf(FluidRenderFace.createFlatFaceZ(0.185, 0.625, 1.005, 0.81, 0.815, 1.005, 1.0, true, false))
        private val WEST_FACE =
            listOf(FluidRenderFace.createFlatFaceX(-0.005, 0.625, 0.185, -0.005, 0.815, 0.81, 1.0, false, false))
        private val EAST_FACE =
            listOf(FluidRenderFace.createFlatFaceX(1.005, 0.625, 0.815, 1.005, 0.815, 0.19, 1.0, false, false))
    }
}package me.steven.indrev.blockent


 var header_paras = document.querySelectorAll("div.reveal-header p");
    var dark = Reveal.getCurrentSlide().classList.contains('has-dark-background');
    add_class(dark, header_paras);

    Reveal.on( 'slidechanged', event => {
      var has_dark = event.currentSlide.classList.contains('has-dark-background');
      add_class(has_dark, header_paras);
    });

    // make the visibility of slide specific header text defined in slide body none
    document.querySelectorAll('div.header').forEach(el => {
      el.style.display = 'none';
    });

    // change the header if currently loaded slide has the header div defined
    // which won't be captured by slidechanged event unless we change slides.
    let dynamic_header = Reveal.getCurrentSlide().querySelector('div.header p');
    change_header(dynamic_header, header_text, header_inner_html);

    Reveal.on( 'slidechanged', event => {
      let dyn_header = event.currentSlide.querySelector('div.header p');
      change_header(dyn_header, header_text, header_inner_html);
    });

    /************** header text in title slide if title or ***********************/
    /*************  subtitle is used as header text        ***********************/

    var title_text = document.querySelector('.reveal-header .title-text p');
    if (title_text != null) {
      title_text.style.visibility = 'hidden';
      hide_from_title_slide(title_text);
    };

    /*************** hide header text and logo on title slide ********************/

    var hide_header_text = document.querySelector('.header-text').getAttribute('data-hide-from-titleslide');
    var hide_header_logo = document.querySelector('.header-logo').getAttribute('data-hide-from-titleslide');

    if (hide_header_text == 'true') {
      header_text.style.visibility = 'hidden';
      hide_from_title_slide(header_text);
    }

    if (hide_header_logo == 'true') {
      logo_img.style.visibility = 'hidden';
      hide_from_title_slide(logo_img);
    }

  };
};

window.addEventListener("load", (event) => {
  header();
});
</script>
<style type="text/css">
:root {
--header-font-size: max(10px, 1.4vw);
--header-font-color: #898E8B;
--header-margin: 0px 0px 0px 0px;

}
.reveal .reveal-header {
top: 0;
margin: 3.2px 0px 2px 0px;
width: 100%;
position: fixed;
z-index: 5;

}
.reveal .reveal-header p {
color: var(--header-font-color);
text-align: center;
margin: var(--header-margin);
font-size: var(--header-font-size);
}
.reveal-header .sc-title p,
.reveal-header .sb-title p {
font-size: max(10px, 1.45vw);
filter: brightness(0.85);
}
.reveal-header .sc-title p { float: left; margin-left: 0.5vw}
.reveal-header .sb-title p { float: right; margin-right: 0.5vw}
.reveal-header.no-logo .sc-title p {margin-left: 6vw}
.reveal .header-logo svg,
.reveal .header-logo img {
margin: var(--header-margin);
padding-left: 1vw;
padding-top: 5px;
height: 100%;
width: auto;
max-width: max(60px, 10vw);
max-height: max(60px, 10vh);
}

.inverse-header { color: #c5d7ce !important;}
div.slides section:not(.title-slide):not(#title-slide):not(.stack) {
padding-top: 1em;
}


node]
      );
      graph.setNodeAttribute(node, options.attributes.hub, hubs[node]);
    }
  }

  return {converged: converged, hubs: hubs, authorities: authorities};
}

/**
 * Exporting.
 */
var main = hits.bind(null, false);
main.assign = hits.bind(null, true);

var hits_1 = main;

var require$$0$5 = {
	"0": 65533,
	"128": 8364,
	"130": 8218,
	"131": 402,
	"132": 8222,
	"133": 8230,
	"134": 8224,
	"135": 8225,
	"136": 710,
	"137": 8240,
	"138": 352,
	"139": 8249,
	"140": 338,
	"142": 381,
	"145": 8216,
	"146": 8217,
	"147": 8220,
	"148": 8221,
	"149": 8226,
	"150": 8211,
	"151": 8212,
	"152": 732,
	"153": 8482,
	"154": 353,
	"155": 8250,
	"156": 339,
	"158": 382,
	"159": 376
};

var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};

var decode_json_1 = __importDefault$1(require$$0$5);
// Adapted from https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
var fromCodePoint =
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
String.fromCodePoint ||
    function (codePoint) {
        var output = "";
        if (codePoint > 0xffff) {
            codePoint -= 0x10000;
            output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
            codePoint = 0xdc00 | (codePoint & 0x3ff);
        }
        output += String.fromCharCode(codePoint);
        return output;
    };
function decodeCodePoint(codePoint) {
    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
        return "\uFFFD";
    }
    if (codePoint in decode_json_1.default) {
        codePoint = decode_json_1.default[codePoint];
    }
    return fromCodePoint(codePoint);
}
var _default$2 = decodeCodePoint;

var decode_codepoint = /*#__PURE__*/Object.defineProperty({
	default: _default$2
}, '__esModule', {value: true});

var Aacute$1 = "Á";
var aacute$1 = "á";
var Abreve = "Ă";
var abreve = "ă";
var ac = "∾";
var acd = "∿";
var acE = "∾̳";
var Acirc$1 = "Â";
var acirc$1 = "â";
var acute$1 = "´";
var Acy = "А";
var acy = "а";
var AElig$1 = "Æ";
var aelig$1 = "æ";
var af = "";
var Afr = "𝔄";
var afr = "𝔞";
var Agrave$1 = "À";
var agrave$1 = "à";
var alefsym = "ℵ";
var aleph = "ℵ";
var Alpha = "Α";
var alpha = "α";
var Amacr = "Ā";
var amacr = "ā";
var amalg = "⨿";
var amp$2 = "&";
var AMP$1 = "&";
var andand = "⩕";
var And = "⩓";
var and = "∧";
var andd = "⩜";
var andslope = "⩘";
var andv = "⩚";
var ang = "∠";
var ange = "⦤";
var angle = "∠";
var angmsdaa = "⦨";
var angmsdab = "⦩";
var angmsdac = "⦪";
var angmsdad = "⦫";
var angmsdae = "⦬";
var angmsdaf = "�


		addMacvtapAttrs(link, linkInfo)
	case *Geneve:
		addGeneveAttrs(link, linkInfo)
	case *Gretap:
		addGretapAttrs(link, linkInfo)
	case *Iptun:
		addIptunAttrs(link, linkInfo)
	case *Ip6tnl:
		addIp6tnlAttrs(link, linkInfo)
	case *Sittun:
		addSittunAttrs(link, linkInfo)
	case *Gretun:
		addGretunAttrs(link, linkInfo)
	case *Vti:
		addVtiAttrs(link, linkInfo)
	case *Vrf:
		addVrfAttrs(link, linkInfo)
	case *Bridge:
		addBridgeAttrs(link, linkInfo)
	case *GTP:
		addGTPAttrs(link, linkInfo)
	case *Xfrmi:
		addXfrmiAttrs(link, linkInfo)
	case *IPoIB:
		addIPoIBAttrs(link, linkInfo)
	case *BareUDP:
		addBareUDPAttrs(link, linkInfo)
	}

	req.AddData(linkInfo)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	if err != nil {
		return err
	}

	h.ensureIndex(base)

	// can't set master during create, so set it afterwards
	if base.MasterIndex != 0 {
		// TODO: verify MasterIndex is actually a bridge?
		return h.LinkSetMasterByIndex(link, base.MasterIndex)
	}
	return nil
}

// LinkDel deletes link device. Either Index or Name must be set in
// the link object for it to be deleted. The other values are ignored.
// Equivalent to: `ip link del $link`
func LinkDel(link Link) error {
	return pkgHandle.LinkDel(link)
}

// LinkDel deletes link device. Either Index or Name must be set in
// the link object for it to be deleted. The other values are ignored.
// Equivalent to: `ip link del $link`
func (h *Handle) LinkDel(link Link) error {
	base := link.Attrs()

	h.ensureIndex(base)

	req := h.newNetlinkRequest(unix.RTM_DELLINK, unix.NLM_F_ACK)

	msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
	msg.Index = int32(base.Index)
	req.AddData(msg)

	_, err := req.Execute(unix.NETLINK_ROUTE, 0)
	return err
}

func (h *Handle) linkByNameDump(name string) (Link, error) {
	links, executeErr := h.LinkList()
	if executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {
		return nil, executeErr
	}

	for _, link := range links {
		if link.Attrs().Name == name {
			return link, executeErr
		}

		// support finding interfaces also via altnames
		for _, altName := range link.Attrs().AltNames {
			if altName == name {
				return link, executeErr
			}
		}
	}
	return nil, LinkNotFoundError{fmt.Errorf("Link %s not found", name)}
}

func (h *Handle) linkByAliasDump(alias string) (Link, error) {
	links, executeErr := h.LinkList()
	if executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {
		return nil, executeErr
	}


Root:where(.rt-variant-soft) :where(.rt-SliderTrack):where([data-disabled]){background-color:var(--gray-a4);background-image:none}.rt-SliderRoot:where(.rt-variant-soft) :where(.rt-SliderRange){background-image:linear-gradient(var(--accent-a5),var(--accent-a5)),var(--slider-range-high-contrast-background-image);background-color:var(--accent-6)}.rt-SliderRoot:where(.rt-variant-soft) :where(.rt-SliderThumb){--slider-thumb-box-shadow: 0 0 0 1px var(--black-a3), 0 0 0 1px var(--gray-a2), 0 0 0 1px var(--accent-a2), 0 1px 2px var(--gray-a4), 0 1px 3px -.5px var(--gray-a3)}.rt-SliderRoot:where(.rt-variant-soft) :where(.rt-SliderThumb):where([data-disabled]):after{background-color:var(--gray-1);box-shadow:0 0 0 1px var(--gray-5)}.rt-SliderRoot:where(:not(.rt-high-contrast)){--slider-range-high-contrast-background-image: none}.rt-SliderRoot:where([data-disabled]){cursor:var(--cursor-disabled);mix-blend-mode:var(--slider-disabled-blend-mode)}.rt-SliderRange:where([data-disabled]){background-color:transparent;background-image:none;box-shadow:none}.rt-SliderThumb:where([data-disabled]),.rt-SliderThumb:where([data-disabled]):after{cursor:var(--cursor-disabled)}.rt-Spinner{display:block;position:relative;opacity:var(--spinner-opacity)}.rt-SpinnerLeaf{position:absolute;top:0;left:43.75%;width:12.5%;height:100%;animation:rt-spinner-leaf-fade var(--spinner-animation-duration) linear infinite}.rt-SpinnerLeaf:before{content:"";display:block;width:100%;height:30%;border-radius:var(--radius-1);background-color:currentColor}.rt-SpinnerLeaf:where(:nth-child(1)){transform:rotate(0);animation-delay:calc(-8 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(2)){transform:rotate(45deg);animation-delay:calc(-7 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(3)){transform:rotate(90deg);animation-delay:calc(-6 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(4)){transform:rotate(135deg);animation-delay:calc(-5 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(5)){transform:rotate(180deg);animation-delay:calc(-4 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(6)){transform:rotate(225deg);animation-delay:calc(-3 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(7)){transform:rotate(270deg);animation-delay:calc(-2 / 8 * var(--spinner-animation-duration))}.rt-SpinnerLeaf:where(:nth-child(8)){transform:rotate(315deg);animation-delay:calc(-1 / 8 * var(--spinner-animation-duration))}@keyframes rt-spinner-leaf-fade{0%{opac


avadsl/SerializationTest.java) { #protobuf-imports #protobuf-serializer }

To de-serialize a Protocol Buffers message in a `map` operator, convert the received byte array to the designated type with the generated `parseFrom()` method.

This example uses resuming to react on data which can't be deserialized and ignores faulty elements.

Scala
: @@ snip [snip](/tests/src/test/scala/docs/scaladsl/SerializationSpec.scala) { #protobuf-imports #protobuf-deserializer }

Java
: @@ snip [snip](/tests/src/test/java/docs/javadsl/SerializationTest.java) { #protobuf-imports #protobuf-deserializer }

## Jackson JSON

Serializing data to JSON text with [Jackson](https://github.com/FasterXML/jackson) in a `map` operator will turn the object instance into a String which is used as value in the @javadoc[ProducerRecord](org.apache.kafka.clients.producer.ProducerRecord).

Java
: @@ snip [snip](/tests/src/test/java/docs/javadsl/SerializationTest.java) { #jackson-imports #jackson-serializer }

To de-serialize a JSON String with Jackson in a `map` operator, extract the String and apply the Jackson object reader in a `map` operator. Amend the `map` operator with the extracted type as the object reader is not generic.

This example uses resuming to react on data which can't be parsed correctly and ignores faulty elements.

Java
: @@ snip [snip](/tests/src/test/java/docs/javadsl/SerializationTest.java) { #jackson-imports #jackson-deserializer }

## Spray JSON

To de-serialize a JSON String with [Spray JSON](https://github.com/spray/spray-json) in a `map` operator, extract the String and use the Spray-provided implicits `parseJson` and `convertTo` in a `map` operator.

This example uses resuming to react on data which can't be parsed correctly and ignores faulty elements.

Scala
: @@ snip [snip](/tests/src/test/scala/docs/scaladsl/SerializationSpec.scala) { #spray-imports #spray-deser }

## Avro with Schema Registry

If you want to use [Confluent's Schema Registry](https://docs.confluent.io/current/schema-registry/docs/index.html), you need to include the dependency on `kafka-avro-serializer` as shown below. It is not available from Maven Central, that's why Confluent's repository has to be specified. These examples use `kafka-avro-seriazlizer` version $confluent.version$.

Maven
:   ```xml
    <project>
    ...
      <dependencies>
        ...
        <dependency>
          <groupId>io.confluent</groupId>
          <artifactId>kafka-avro-serializer</artifactId>
          <version>confluent.version (eg. 5.0.0)</version>
        </dependency>
        ...
      </dependencies>
      ...
      <repositories>
        <repository>
          <id>confluent-maven-repo</id>
          <name>Confluent Maven Repository</name>
          <url>https://packages.confluent.io/maven/</url>
        </repository>
      </repositories>
    ...
    </project>
    ```

sbt
:   ```scala
    libraryDependencies += "io.confluent" % "kafka-avro-serializer" % confluentAvroVersion, //  eg. 5.0.0
    resolvers += "Confluent Maven Repository" at "https://packages.confluent.io/maven/",
    ```

Gradle
:   ```gradle
    dependencies {
      compile group: 'io.confluent', name: 'kafka-avro-serializer', version: confluentAvroVersion // eg. 5.0.0
    }
    repositories {
      maven {
        url  "https://packages.confluent.io/maven/"
      }
    }
    ```

### Producer

To create serializers that use the Schema Registry, its URL needs to be provided as configuration `AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG` to the serializer and that serializer is used in the @apidoc[ProducerSettings$].

Scala
: @@ snip [snip](/


oyments", name, err)
}

func checkForSecretRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: components.Namespace}, &corev1.Secret{})
	return isNotFound("Secret", name, err)
}

func checkForMutatingWebhookConfigurationRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name}, &admissionregistrationv1.MutatingWebhookConfiguration{})
	return isNotFound("MutatingWebhookConfiguration", name, err)
}

func checkForServiceRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: components.Namespace}, &corev1.Service{})
	return isNotFound("Service", name, err)
}

func checkForServiceMonitorRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: components.Namespace},
		&monitoringv1.ServiceMonitor{})
	return isNotFound("ServiceMonitor", name, err)
}

func checkForPrometheusRuleRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: components.Namespace},
		&monitoringv1.PrometheusRule{})
	return isNotFound("PrometheusRule", name, err)
}

func checkForNetworkAttachmentDefinitionRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: corev1.NamespaceDefault},
		&k8snetworkplumbingwgv1.NetworkAttachmentDefinition{})
	if err != nil && isKindNotFound(err) {
		return nil
	}
	return isNotFound("NetworkAttachmentDefinition", name, err)
}

func checkForConfigMapRemoval(name string) error {
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: name, Namespace: components.Namespace},
		&corev1.ConfigMap{})
	return isNotFound("ConfigMap", name, err)
}

func getMonitoringEndpoint() (*corev1.Endpoints, error) {
	By("Finding CNAO prometheus endpoint")
	endpoint := &corev1.Endpoints{}
	err := testenv.Client.Get(context.Background(),
		types.NamespacedName{Name: MonitoringComponent.Service, Namespace: components.Namespace}, endpoint)
	if err != nil {
		return nil, err
	}
	return endpoint, nil
}

func ScrapeEndpointAddress(epAddress *corev1.EndpointAddress, epPort int32) (string, error) {
	token, err := getPrometheusToken()
	if err != nil {
		return "", err
	}

	bearer := "Authorization: Bearer " + token
	stdout, _, err := Kubectl("exec", "-n", epAddress.TargetRef.Namespace, epAddress.TargetRef.Name, "--", "curl", "-s", "-k",
		"--header", bearer, fmt.Sprintf("https://%s:%d/metrics", epAddress.IP, epPort))
	if err != nil {
		return "", err
	}
	return stdout, nil
}

func GetMonitoringEndpoint() (*corev1.EndpointAddress, int32, error) {
	endpoint, err := getMonitoringEndpoint()
	if err != nil {
		return nil, 0, err
	}

	epPort := endpoint.Subsets[0].Ports[0].Port
	for _, epAddr := range endpoint.Subsets[0].Addresses {
		if !strings.HasPrefix(epAddr.TargetRef.Name, components.Name) {
			continue
		}
		epAddress := epAddr
		return &epAddress, epPort, nil
	}

	return nil, 0, errors.New("no endpoint target ref name matches CNAO component")
}

func FindMetric(metrics, expectedMetric string) string {
	for _, line := range strings.Split(metrics, "\n")


inLine = new Array();

        //players
        this.players = new Array();
        this.players.push(new Player(playerId1, Color.Red));
        this.players.push(new Player(playerId2, Color.Green));
        this.currentPlayer = 0;//todo random order

        //cells
        this.cell = new Cell(3, getSizeOfCell(this.maxLevel), undefined);

        //board
        this.board = new Board(maxLevel, new Point(positionX, positionY), new Rectangle(0, 0, c_rootWidth, c_rootHeight));

        //window in cell coordinates and position in top left corner
        this.setWindow();

        this.ingameStatus = IngameStatus.WaitUser;
    }

    public nextPlayer()
    {
        this.currentPlayer = (this.currentPlayer + 1) % this.players.length;
    }

    public setWindow()
    {
        var cellWindow = this.getCellWindow();

        this.addStones = this.addStones.concat(this.getVisibleStones(this.cell, cellWindow));

        console.log("visible " + this.addStones.length + " cells: " + this.addStones.toString());
    }

    public updateWindow()
    {
        var cellWindow = this.getCellWindow();

        var result:Array<Array<Cell>> = this.getVisibleStonesIncrement(this.cell, cellWindow);

        this.addStones = this.addStones.concat(result[0]);
        this.removeStones = this.removeStones.concat(result[1]);

        console.log("add " + result[0].length + " cells: " + result[0].toString());
        console.log("remove " + result[1].length + " cells: " + result[1].toString());
    }

    public boardMove(xDir:number, yDir:number)
    {
        this.board.move(xDir, yDir);
        this.updateWindow();
    }

    public boardZoom(dir:number, originX:number, originY:number)
    {
        this.board.zoom(dir, originX, originY);
        this.updateWindow();
    }

    private getCellWindow():Rectangle
    {
        var invertScale = 1/this.board.getScale();

        var boardCoord = this.board.getBoardCoord(0, 0);

        var x = boardCoord.x / c_cellSize;
        var y = boardCoord.y / c_cellSize;
        var width = this.board.window.width * invertScale / c_cellSize;
        var height = this.board.window.height * invertScale / c_cellSize;

        var cellWindow = new Rectangle(x, y, width, height)

        //console.log("getCellWindow " + cellWindow.toString());

        return cellWindow;
    }

    private getVisibleStones(cell:Cell, newWindow:Rectangle):Array<Cell>
    {
        if(cell)
        {
            if(cell.getColor() != Color.Empty)
            {
                //is out
                if(cell.originalPos.x + cell.size < newWindow.x || cell.originalPos.y + cell.size < newWindow.y ||
                    cell.originalPos.x > newWindow.x + newWindow.width || cell.originalPos.y > newWindow.y + newWindow.height)
                {
                    return [];
                }
                else    //is in
                {
                    return [cell];
                }
            }
            else
            {
                var stones:Array<Cell> = new Array();

                for(var i=0; i < 4; i++)
                {
                    if(cell.children[i])
                    {
                        stones = stones.concat(this.getVisibleStones(cell.children[i], newWindow));
                    }
                }

                return stones;
            }
        }
        return [];
    }

    private getVisibleStonesIncrement(cell:Cell, newWindow:


http://jsbin.com/)

### [Codeanywhere](https://codeanywhere.com/)

Codeanywhere is an online code editor that features code to support FTP Server, Dropbox, Github upload code anytime, anywhere.

### [Dabblet](http://dabblet.com/)

Dabblet's interface is very simple, simple to operate, and supports HTML5 tags and CSS3 styles very well.

## Old editor

- [DreamWeaver](https://www.adobe.com/ca/products/dreamweaver.html) 【Not recommended】
- [Editplus](https://www.editplus.com/) 【Not recommended】
- [Notepad++](https://notepad-plus-plus.org/)  【Not recommended】
# Debugging tool

## Remote debugging tool

- [weinre](http://people.apache.org/~pmuellr/weinre/docs/latest/Installing.html)
- [chrome inspect](http://wiki.jikexueyuan.com/project/chrome-devtools/remote-debugging-on-android.html)
- [spy-debugger](https://github.com/wuchangming/spy-debugger)

## Capture tool

- [Fiddler](https://www.telerik.com/fiddler)
- [Charles](https://www.charlesproxy.com/)
- [HttpWatch](https://www.httpwatch.com/)
- [IETester](https://ietester.en.softonic.com/)
- [Wireshark](https://www.wireshark.org/download.html)

## Website performance evaluation

- [YSlow](http://yslow.org/)
- [PageSpeed](http://developers.google.com/speed/pagespeed/insights/)
- [Pingdom](http://tools.pingdom.com/fpt/)
- [WebPageTest](https://www.webpagetest.org/)
- [GT Metrix](https://gtmetrix.com/)
- [Load Impact](https://loadimpact.com/)

## Browser compatibility test

- [browsershots](http://browsershots.org/)
- [Brower Sandbox](https://turbo.net/browsers)
- [ResponsInator - Online mobile phone page test tool](http://www.responsinator.com/)

## Other

- [User Agent String](http://www.useragentstring.com/)
- [Website speed](https://www.17ce.com/)
# Telling Stories With Data
## Coffee shop example

Written by Tanu Nanda Prabhu

| ![space-1.jpg](https://miro.medium.com/v2/resize:fit:1100/format:webp/0*1IZOp7ZwGWmiRD5-) |
|:--:|
| Photo by [Nathan Dumlao](https://unsplash.com/@nate_dumlao?utm_source=medium&utm_medium=referral) on [Unsplash](https://unsplash.com/?utm_source=medium&utm_medium=referral)|

## Introduction
Do you drink coffee every day? I do 6-7 times a day. Coffee’s for closers, right! Every time I go to a coffee store (Tim Hortons, both here in Calgary and Bengaluru), I always ask myself these 3 things:

- Which day is the busiest?
- When do pastries sell more on weekends or weekdays?
- What day of the week generates the highest revenue?

The store manager can obviously answer this, but he does not remember it off the top of his head. He refers to something called a dataset. This is where all the answers to my questions lie. Let’s take a tour of exploring a made-up dataset and understanding the art of storytelling.

---

## Dataset
Here’s a small Coffee Shop Sales dataset we’ll analyze:

| ![space-1.jpg](https://miro.medium.com/v2/resize:fit:1100/format:webp/1*bAA4_ZXI5eU0n402f-NaAg.png) |
|:--:|
|Sample dataset generated by Author|

Like I said earlier,


local util = require "dial.util"
local common = require "dial.augend.common"

local M = {}

---@alias datekind '"year"' | '"month"' | '"day"' | '"hour"' | '"min"' | '"sec"'
---@alias dttable table<datekind, integer>
---@alias dateparser fun(string, osdate): osdate
---@alias dateformatter fun(osdate): string
---@alias dateelement {kind?: datekind, regex: string, update_date: dateparser, format?: dateformatter}

---@param datekind datekind | nil
---@return fun(string, osdate): osdate
local function simple_updater(datekind)
    if datekind == nil then
        return function(_, date)
            return date
        end
    end
    return function(text, date)
        date[datekind] = tonumber(text)
        return date
    end
end

local WEEKDAYS = {
    "Sun",
    "Mon",
    "Tue",
    "Wed",
    "Thu",
    "Fri",
    "Sat",
}
local WEEKDAYS_FULL = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}
local WEEKDAYS_JA = {
    "日",
    "月",
    "火",
    "水",
    "木",
    "金",
    "土",
}
local MONTHS = {
    "Jan",
    "Feb",
    "Mar",
    "Apr",
    "May",
    "Jun",
    "Jul",
    "Aug",
    "Sep",
    "Oct",
    "Nov",
    "Dec",
}
local MONTHS_FULL = {
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
}

---@type table<string, dateelement>
local date_elements = {
    ["Y"] = {
        kind = "year",
        regex = [[\d\d\d\d]],
        update_date = simple_updater "year",
    },
    ["y"] = {
        kind = "year",
        regex = [[\d\d]],
        update_date = function(text, date)
            date.year = 2000 + tonumber(text)
            return date
        end,
    },
    ["m"] = {
        kind = "month",
        regex = [[\d\d]],
        update_date = simple_updater "month",
    },
    ["d"] = {
        kind = "day",
        regex = [[\d\d]],
        update_date = simple_updater "day",
    },
    ["H"] = {
        kind = "hour",
        regex = [[\d\d]],
        update_date = simple_updater "hour",
    },
    ["I"] = {
        kind = "hour",
        regex = [[\d\d]],
        update_date = function(text, date)
            local hour = tonumber(text)
            if date.hour < 12 and hour >= 12 then
                date.hour = hour - 12
            elseif date.hour >= 12 and hour < 12 then
                date.hour = hour + 12
            else
                date.hour = hour
            end
            return date
        end,
    },
    ["M"] = {
        kind = "min",
        regex = [[\d\d]],
        update_date = simple_updater "min",
    },
    ["S"] = {
        kind = "sec",
        regex = [[\d\d]],
        update_date = simple_updater "sec",
    },

    -- with hyphen
    ["-y"] = {
        kind = "year",
        regex = [[\d\{1,2\}]],
        update_date = function(text, date)
            date.year = 2000 + tonumber(text)
            return date
        end,
        format = function(time)
            local year = os.date("*t", time).year --[[ @as integer ]]


.setcpu "65C02"
        .include "tty.inc"
        .include "string.inc"
        .include "utils.inc"
        .include "macros.inc"

CMD_OFFSET      = $00
ARGC_OFFSET     = $02
DESC_OFFSET     = $03
FUNCTION_OFFSET = $05
NEXT_OFFSET     = $07

        .macro is_last_menu_item pointer
        .local @not_last
        .local @return
        pha
        lda ptr1
        pha
        lda ptr1+1
        pha
        lda pointer
        sta ptr1
        lda pointer+1
        sta ptr1+1
        lda (ptr1)
        bne @not_last
        inc_ptr ptr1
        lda (ptr1)
        bne @not_last
        sec
        bra @return
@not_last:
        clc
@return:
        pla
        sta ptr1+1
        pla
        sta ptr1
        pla
        .endmacro

        .macro get_next_menu_item pointer
        pha
        phy
        lda ptr1
        pha
        lda ptr1+1
        pha
        lda pointer
        sta ptr1
        lda pointer+1
        sta ptr1+1
        ldy #(NEXT_OFFSET)
        lda (ptr1),y
        clc
        adc ptr1
        sta pointer
        lda ptr1+1
        adc #$00
        sta pointer+1
        pla
        sta ptr1+1
        pla
        sta ptr1
        ply
        pla
        .endmacro

        .macro get_menu_item pointer, cmd_pointer, argc, desc_pointer, function_pointer
        pha
        phy
        lda ptr1
        pha
        lda ptr1+1
        pha
        lda pointer
        sta ptr1
        lda pointer+1
        sta ptr1+1
        ldy #(CMD_OFFSET)
        lda (ptr1),y
        sta cmd_pointer
        iny
        lda (ptr1),y
        sta cmd_pointer+1
        ldy #(ARGC_OFFSET)
        lda (ptr1),y
        sta argc
        ldy #(DESC_OFFSET)
        lda (ptr1),y
        sta desc_pointer
        iny
        lda (ptr1),y
        sta desc_pointer+1
        ldy #(FUNCTION_OFFSET)
        lda (ptr1),y
        sta function_pointer
        iny
        lda (ptr1),y
        sta function_pointer+1
        pla
        sta ptr1+1
        pla
        sta ptr1
        ply
        pla
        .endmacro

        .export _run_menu
        .export run_menu
        .export _setup_menuitem

LINE_BUFFER_SIZE = 32
TOKENIZE_BUFFER_SIZE = 64

        .code

; C function to populate data structure
;
_setup_menuitem:
        ; read params from registers and stack
        sta menu_item_function
        stx menu_item_function+1
        ldy #$06
        lda (sp),y
        sta ptr1+1
        dey
        lda (sp),y
        sta ptr1
        dey
        lda (sp),y
        sta menu_item_cmd+1
        dey
        lda (sp),y
        sta menu_item_cmd
        dey
        lda (sp),y
        sta menu_item_argc
        dey
        lda (sp),y
        sta menu_item_desc+1
        dey
        lda (sp),y
        sta menu_item_desc

        ; save params to resulting structure
        ldy #(CMD_OFFSET)
        lda menu_item_cmd
        sta (ptr1),y
        iny
        lda menu_item_cmd+1
        sta (ptr1),y

        ldy #(ARGC_OFFSET)
        lda menu_item_argc
        sta (ptr1),y

        ldy #(DESC_OFFSET)
        lda menu_item_desc
        sta (ptr1),y
        iny
        lda menu_item_desc+1
        sta (ptr1),y


H_ANCHOR_BOTTOM | PH_ANCHOR_LEFT);
            PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, IDOK), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT);
            PhLoadWindowPlacementFromSetting(SETTING_NAME_WINDOW_POSITION, SETTING_NAME_WINDOW_SIZE, hwndDlg);

            EnumerateFirmwareEntries(context);
        }
        break;
    case WM_SIZE:
        PhLayoutManagerLayout(&context->LayoutManager);
        break;
    case WM_COMMAND:
        {
            switch (LOWORD(wParam))
            {
            case IDC_BOOT_REFRESH:
                {
                    EnumerateFirmwareEntries(context);
                }
                break;
            case IDCANCEL:
            case IDOK:
                EndDialog(hwndDlg, IDOK);
                break;
            }
        }
        break;
    case WM_NOTIFY:
        {
            LPNMHDR hdr = (LPNMHDR)lParam;

            PhHandleListViewNotifyForCopy(lParam, context->ListViewHandle);

            switch (hdr->code)
            {
            case NM_RCLICK:
                {
                    if (hdr->hwndFrom == context->ListViewHandle)
                        ShowBootEntryMenu(context, hwndDlg);
                }
                break;
            case NM_DBLCLK:
                {
                    if (hdr->hwndFrom == context->ListViewHandle)
                    {
                        PEFI_ENTRY entry;

                        if (entry = PhGetSelectedListViewItemParam(context->ListViewHandle))
                        {
                            ShowUefiEditorDialog(entry);
                        }
                    }
                }
                break;
            }
        }
        break;
    }

    return FALSE;
}


.obs_data_get_int(settings, "follow_border")
    follow_safezone_sensitivity = obs.obs_data_get_int(settings, "follow_safezone_sensitivity")
    use_follow_auto_lock = obs.obs_data_get_bool(settings, "follow_auto_lock")
    allow_all_sources = obs.obs_data_get_bool(settings, "allow_all_sources")
    use_monitor_override = obs.obs_data_get_bool(settings, "use_monitor_override")
    monitor_override_x = obs.obs_data_get_int(settings, "monitor_override_x")
    monitor_override_y = obs.obs_data_get_int(settings, "monitor_override_y")
    monitor_override_w = obs.obs_data_get_int(settings, "monitor_override_w")
    monitor_override_h = obs.obs_data_get_int(settings, "monitor_override_h")
    monitor_override_sx = obs.obs_data_get_double(settings, "monitor_override_sx")
    monitor_override_sy = obs.obs_data_get_double(settings, "monitor_override_sy")
    monitor_override_dw = obs.obs_data_get_int(settings, "monitor_override_dw")
    monitor_override_dh = obs.obs_data_get_int(settings, "monitor_override_dh")
    use_socket = obs.obs_data_get_bool(settings, "use_socket")
    socket_port = obs.obs_data_get_int(settings, "socket_port")
    socket_poll = obs.obs_data_get_int(settings, "socket_poll")
    debug_logs = obs.obs_data_get_bool(settings, "debug_logs")

    -- Only do the expensive refresh if the user selected a new source
    if source_name ~= old_source_name and is_obs_loaded then
        refresh_sceneitem(true)
    end

    -- Update the monitor_info


.
        ISeries series_ColumnClustered = shape.getChart().getSeriesCollection().newSeries();
        series_ColumnClustered.setFormula("=SERIES('COST DATA and CHART'!$C$41,'COST DATA and CHART'!$B$42:$B$51,'COST DATA and CHART'!$C$42:$C$51,1)");
        series_ColumnClustered.getFormat().getFill().twoColorGradient(GradientStyle.Horizontal, 1);
        series_ColumnClustered.getFormat().getFill().setGradientAngle(90);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(0).getColor().setObjectThemeColor(ThemeColor.Accent1);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(0).getColor().setBrightness(0);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(0).setPosition(0);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(1).getColor().setObjectThemeColor(ThemeColor.Accent1);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(1).getColor().setBrightness(-0.16);
        series_ColumnClustered.getFormat().getFill().getGradientStops().get(1).setPosition(1);
        series_ColumnClustered.getFormat().getLine().getColor().setObjectThemeColor(ThemeColor.Light1);

        ISeries series_Line = shape.getChart().getSeriesCollection().newSeries();
        series_Line.setChartType(ChartType.Line);
        series_Line.setFormula("=SERIES('COST DATA and CHART'!$E$41,,'COST DATA and CHART'!$E$42:$E$51,2)");
        series_Line.getFormat().getLine().setWeight(2.25);
        series_Line.setAxisGroup(AxisGroup.Secondary);

        //Change the secondary's maxinumscale.
        IAxis secondary_axis = shape.getChart().getAxes().item(AxisType.Value, AxisGroup.Secondary);
        secondary_axis.setMaximumScale(1.0);

        //Set the chart's title format.
        shape.getChart().getChartTitle().setText("Cost Center");
        shape.getChart().getChartTitle().getFont().setThemeFont(ThemeFont.Minor);
        shape.getChart().getChartTitle().getFont().getColor().setRGB(Color.FromArgb(89, 89, 89));
        shape.getChart().getChartTitle().getFont().setSize(18);

        //Set the chart has no legend.
        shape.getChart().setHasLegend(false);

        //Set the char group's Overlap and GapWidth.
        shape.getChart().getColumnGroups().get(0).setOverlap(0);
        shape.getChart().getColumnGroups().get(0).setGapWidth(0);

        //Set chart area's format.
        shape.getChart().getChartArea().getFormat().getFill().presetGradient(GradientStyle.Horizontal, 1, PresetGradientType.EarlySunset);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().delete(3);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().delete(3);
        shape.getChart().getChartArea().getFormat().getFill().setGradientAngle(90);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().get(0).getColor().setObjectThemeColor(ThemeColor.Light1);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().get(0).getColor().setBrightness(0);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().get(0).setPosition(0);
        shape.getChart().getChartArea().getFormat().getFill().getGradientStops().get(1).getColor().setObjectThemeColor(ThemeColor.Light1);
        shape.getChart().getChart


内容和持续时长（文本持续时长为0时，会无法正常提醒，若你不想显示正文内容，请把正文提醒文本设为空，正文提醒时长设为任意正数），你也可以选择是否启用遮罩和正文的语音播报（默认启用）。
- **`显示天气提醒`**，是指弹出应用[主界面](basic.md#主界面)的天气[提醒](notifications.md)，你可以选择`三天天气预报`（默认）、`逐小时天气预报`或`气象预警`（若当前没有任何气象预警，“显示气象预警”的行动不会生效）。
- **`窗口停靠位置`**，可以改变应用[主界面](basic.md#主界面)的大致显示位置，如左上角、中上角、右下角等。
- **`应用主题`**，可以改变应用[主界面](basic.md#主界面)的主题，包括`明亮`、`黑暗`或`跟随系统`。
- **`组件配置方案`**，可以修改[组件](basic.md#组件)的配置方案（不同的json文件）。（截至1.7.0.0版本及以前，由于设备性能不足，显示遮罩提醒时切换组件配置方案可能引发报错，可以通过在切换前设置一定的等待时长缓解该问题。）
- **`等待时长`**，用于自定义执行下一操作前的等待时间。

## 触发与恢复

![触发与恢复](image\automation\恢复.png)

修改应用内置设置的`行动`会创建一个 **设置叠层** (SettingsOverlay) ，以对应用设置进行临时更改，以便于多个行动的恢复。不过在临时更改期间，如果您手动修改了某个设置，那么该设置项将遵循手动的修改，不会再被恢复。

“恢复”功能默认启用。您也可以点击自动化设置页面右上角的【触发】和【恢复】来测试行动。当规则集不再满足时，已经执行的行动会自动恢复。比如，已修改的应用设置将被自动改回。

> [!tip]
> 自动化的恢复功能包含一种“锁定”机制，启用“恢复”功能会使自动化流程触发时，该自动化流程无法再次被触发，直到被“恢复”。

> [!warning]
> 若使用“当规则集更新时”作为触发器时，建议您打开恢复功能，因为规则集更新的频率较高，每次焦点窗口变化都会触发自动化流程，这样可能将导致自动化流程中的行动被频繁执行，可能引起电脑出现卡顿等问题，也可能干扰教学活动。

## 配置方案

和组件一样，您可以为自动化切换多个不同的配置文件，或者随时禁用所有或指定的自动化。

![](image\automation\自动化开关和配置方案.png)

您也可以来 [🙌展示台](https://github.com/ClassIsland/ClassIsland/discussions/categories/%E7%BB%84%E4%BB%B6%E9%85%8D%E7%BD%


80_720 + "", new BitRateBean(500, 2000, 1250));
        mBitRateMap.put(TRTCCloudDef.TRTC_VIDEO_RESOLUTION_1920_1080 + "", new BitRateBean(800, 3000, 1900));
    }

    private void initView() {
        mRemoteUserIdList = new ArrayList<>();
        mRemoteVideoList = new ArrayList<>();

        mImageBack = findViewById(R.id.iv_back);
        mTextTitle = findViewById(R.id.tv_room_number);
        mButtonQuality360 = findViewById(R.id.btn_quality_360);
        mButtonQuality540 = findViewById(R.id.btn_quality_540);
        mButtonQuality720 = findViewById(R.id.btn_quality_720);
        mButtonQuality1080 = findViewById(R.id.btn_quality_1080);
        mButtonStartPush = findViewById(R.id.btn_start_push);
        mEditRoomId = findViewById(R.id.et_room_id);
        mEdituserId = findViewById(R.id.et_user_id);
        mSeekBitRate = findViewById(R.id.sb_bit_rate);
        mSeekFPS = findViewById(R.id.sb_fps);
        mTXCloudPreviewView = findViewById(R.id.txcvv_main_local);
        mTextFPS = findViewById(R.id.tv_fps);
        mTextKPS = findViewById(R.id.tv_kps);

        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote1));
        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote2));
        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote3));
        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote4));
        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote5));
        mRemoteVideoList.add((TXCloudVideoView) findViewById(R.id.txcvv_video_remote6));

        mImageBack.setOnClickListener(this);
        mButtonStartPush.setOnClickListener(this);
        mButtonQuality360.setOnClickListener(this);
        mButtonQuality540.setOnClickListener(this);
        mButtonQuality720.setOnClickListener(this);
        mButtonQuality1080.setOnClickListener(this);

        mSeekBitRate.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Log.d("onStopTrackingTouch", "onStopTrackingTouch : progrsss = " + seekBar.getProgress());
                if (!mStartPushFlag) {
                    seekBar.setProgress(mBitRateFlag);
                    return;
                }
                mBitRateFlag = seekBar.getProgress();
                mTextKPS.setText(mBitRateFlag + "kbps");
                setVideoEncoderParam(false);

            }
        });

        mSeekFPS.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Log.d("onStopTrackingTouch", "onStopTrackingTouch : progrsss = " + seekBar.getProgress());
                if (!mStartPushFlag) {
                    seekBar.setProgress(mFPSFlag);
                    return;
                }
                mFPSFlag = seekBar.getProgress();


ential::new_seqexpr(v::Expr::new_call(
            "$writememh",
            vec![
                v::Expr::Concat(v::ExprConcat {
                    exprs: vec![
                        v::Expr::new_str(&format!("/{}.out", name)),
                        v::Expr::new_ref("DATA"),
                    ],
                }),
                v::Expr::new_ipath(&format!("{}.mem", name)),
            ],
        )));
    });

    vec![
        import_stmt,
        data_decl,
        v::Stmt::new_parallel(v::Parallel::new_process(initial_block)),
        v::Stmt::new_parallel(v::Parallel::new_process(final_block)),
    ]
}
use crate::core::*;
use crate::io::*;
use std::cell::RefCell;
use std::collections::HashMap;
use std::path::{Path, PathBuf};
use std::rc::Rc;

pub struct Loading<T> {
    load: Rc<RefCell<Option<T>>>,
}

impl<T: 'static> Loading<T> {
    pub fn new(paths: &[impl AsRef<Path>], map: impl 'static + FnOnce(Loaded) -> T) -> Self {
        let load = Rc::new(RefCell::new(None));
        let load_clone = load.clone();
        Loader::load(paths, move |loaded| {
            *load_clone.borrow_mut() = Some(map(loaded));
        });
        Self { load }
    }

    pub fn new_with_context(
        context: &Context,
        paths: &[impl AsRef<Path>],
        map: impl 'static + FnOnce(Context, Loaded) -> T,
    ) -> Self {
        let load = Rc::new(RefCell::new(None));
        let load_clone = load.clone();
        let context_clone = context.clone();
        Loader::load(paths, move |loaded| {
            *load_clone.borrow_mut() = Some(map(context_clone, loaded));
        });
        Self { load }
    }

    pub fn is_loaded(&self) -> bool {
        self.load.borrow().is_some()
    }
}

impl<T: 'static> std::ops::Deref for Loading<T> {
    type Target = Rc<RefCell<Option<T>>>;
    fn deref(&self) -> &Self::Target {
        &self.load
    }
}

impl<T: 'static> std::ops::DerefMut for Loading<T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.load
    }
}

///
/// Contains the resources loaded using the [Loader](crate::Loader) and/or manually inserted using the [insert_bytes](Self::insert_bytes) method.
/// Use the [remove_bytes](crate::Loaded::remove_bytes) or [get_bytes](crate::Loaded::get_bytes) function to extract the raw byte array for the loaded resource
/// or one of the other methods to both extract and deserialize a loaded resource.
///
#[derive(Default, Debug)]
pub struct Loaded {
    loaded: HashMap<PathBuf, std::result::Result<Vec<u8>, std::io::Error>>,
}

impl Loaded {
    ///
    /// Constructs a new empty set of loaded files. Use this together with [insert_bytes](Self::insert_bytes) to load resources
    /// from an unsuported source and then parse them as usual using the functionality on Loaded.
    ///
    pub fn new() -> Self {
        Self::default()
    }

    ///
    /// Remove and returns the loaded byte array for the resource at the given path.
    /// The byte array then has to be deserialized to whatever type this resource is (image, 3D model etc.).
    ///
    pub fn remove_bytes(&mut self, path: impl AsRef<Path>) -> ThreeDResult<Vec<u8>> {
        if let Some((path, bytes)) = self.loaded.remove_entry(path.as_ref()) {
            Ok(bytes.map_err(|_| IOError::NotLoaded(path.to_str().unwrap().to_string()))?)
        } else {


container">

                                    k8s单节点部署mysql_k8s deployment部署单个mysql容器实例 + service

k8s deployment yaml，源于从网上找到的一个版本 apiVersion: apps/v1 # apiserver的版本 kind: Deployment # 副本控制器deployme

                                    如何在同一个MySQL表中存储固定长度字符串和可变长度字符串？

CHAR用于存储固定长度的字符串，而VARCHAR用于存储可变长度的字符串。通过将一列声明为CHAR并将其他列声明为VARCHAR，我们可以在同一表中存储固定长度和可变长度的字符串。 示例 Creat

                                    <img class="img-fluid" src="/uploads/20240602/1c3003b3261cd1d9fff42c22ae315819


lekeys']:GiveKeys(plate, model, true)
end

---Removes the keys of the specified vehicle from the player (self).
---@param vehicle number The vehicle entity handle.
---@param plate? string The plate of the vehicle.
---@return nil
VehicleKey.RemoveKeys = function(vehicle, plate)
    assert(vehicle, "vehicle is nil")
    assert(DoesEntityExist(vehicle), "vehicle does not exist")

    if not plate then
        plate = GetVehicleNumberPlateText(vehicle)
    end

    local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicle))
    return exports['qs-vehiclekeys']:RemoveKeys(plate, model)
end

VehicleKey.GetResourceName = function()
    return resourceName
end

return VehicleKey


<li>...and another list.</li>
			</ol>

			<ul>
				<li>We can type between the lists...</li>
				<li>...thanks to <strong>Magicline</strong>.</li>
			</ul>

			<p>Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.</p>

			<p>Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.</p>

			<p>Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.</p>

			<div style="border: 2px dashed green; background: #ddd; text-align: center;">
			<p>This text is wrapped in a&nbsp;<tt>DIV</tt>&nbsp;element. We can type after this element though.</p>
			</div>
		</textarea>

			CKEditor - The text editor for the Internet - http://ckeditor.com

			Copyright © 2003-2017, CKSource - Frederico
			Knabben. All rights reserved.

		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />

		<link  type="text/css" href="../export.css" rel="stylesheet">


timeout_ms);
int		mpt_read_extcfg_page(struct mpt_softc *mpt, int Action,
				     uint32_t PageAddress,
				     CONFIG_EXTENDED_PAGE_HEADER *hdr,
				     void *buf, size_t len, int sleep_ok,
				     int timeout_ms);
int		mpt_read_cfg_header(struct mpt_softc *, int /*PageType*/,
				    int /*PageNumber*/,
				    uint32_t /*PageAddress*/,
				    CONFIG_PAGE_HEADER *,
				    int /*sleep_ok*/, int /*timeout_ms*/);
int		mpt_read_cfg_page(struct mpt_softc *t, int /*Action*/,
				  uint32_t /*PageAddress*/,
				  CONFIG_PAGE_HEADER *, size_t /*len*/,
				  int /*sleep_ok*/, int /*timeout_ms*/);
int		mpt_write_cfg_page(struct mpt_softc *, int /*Action*/,
				   uint32_t /*PageAddress*/,
				   CONFIG_PAGE_HEADER *, size_t /*len*/,
				   int /*sleep_ok*/, int /*timeout_ms*/);
static __inline int
mpt_read_cur_cfg_page(struct mpt_softc *mpt, uint32_t PageAddress,
		      CONFIG_PAGE_HEADER *hdr, size_t len,
		      int sleep_ok, int timeout_ms)
{
	return (mpt_read_cfg_page(mpt, MPI_CONFIG_ACTION_PAGE_READ_CURRENT,
				  PageAddress, hdr, len, sleep_ok, timeout_ms));
}

static __inline int
mpt_write_cur_cfg_page(struct mpt_softc *mpt, uint32_t PageAddress,
		       CONFIG_PAGE_HEADER *hdr, size_t len, int sleep_ok,
		       int timeout_ms)
{
	return (mpt_write_cfg_page(mpt, MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT,
				   PageAddress, hdr, len, sleep_ok,
				   timeout_ms));
}

/* mpt_debug.c functions */
void mpt_print_reply(void *vmsg);
void mpt_print_db(uint32_t mb);
void mpt_print_config_reply(void *vmsg);
char *mpt_ioc_diag(uint32_t diag);
void mpt_req_state(mpt_req_state_t state);
void mpt_print_config_request(void *vmsg);
void mpt_print_request(void *vmsg);
void mpt_dump_sgl(SGE_IO_UNION *se, int offset);

#endif /* _MPT_H_ */


            debugVersion = null // 度量数据只关注正式构建
        )
        // 把当前流水线当日构建次数存入redis，失效期设置为1天
        redisOperation.set(
            key = getCurrentDayBuildCountKey(pipelineId, currentDayStr),
            value = count.toString(),
            expiredInSecond = TimeUnit.DAYS.toSeconds(1)
        )
        return count
    }
}
/*
 * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
 *
 * Copyright (C) 2019 Tencent.  All rights reserved.
 *
 * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
 *
 * A copy of the MIT License is included in this file.
 *
 *
 * Terms of the MIT License:
 * ---------------------------------------------------
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package com.tencent.devops.process.engine.service

import com.tencent.devops.common.api.util.Watcher
import com.tencent.devops.common.api.util.timestamp
import com.tencent.devops.common.client.Client
import com.tencent.devops.common.pipeline.Model
import com.tencent.devops.common.pipeline.enums.BuildFormPropertyType
import com.tencent.devops.common.pipeline.pojo.BuildParameters
import com.tencent.devops.common.pipeline.pojo.element.Element
import com.tencent.devops.common.pipeline.pojo.element.ElementBaseInfo
import com.tencent.devops.common.pipeline.pojo.element.market.MarketBuildAtomElement
import com.tencent.devops.common.pipeline.pojo.element.market.MarketBuildLessAtomElement
import com.tencent.devops.common.pipeline.pojo.element.quality.QualityGateInElement
import com.tencent.devops.common.pipeline.pojo.element.quality.QualityGateOutElement
import com.tencent.devops.common.pipeline.utils.ElementUtils
import com.tencent.devops.common.service.utils.LogUtils
import com.tencent.devops.process.engine.cfg.ModelTaskIdGenerator
import com.tencent.devops.process.engine.utils.QualityUtils
import com.tencent.devops.process.template.service.TemplateService
import com.tencent.devops.quality.api.v2.ServiceQualityRuleResource
import com.tencent.devops.quality.api.v2.pojo.response.QualityRuleMatchTask
import org.jooq.DSLContext
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.time.LocalDateTime

@Suppress("LongParameterList", "LongMethod", "ComplexMethod")
@Service
class PipelineElementService @Autowired constructor(
    private val modelTaskIdGenerator: ModelTaskIdGenerator,
    private val templateService: TemplateService,
    private val pipelinePostElementService: PipelinePostElementService,
    private val client: Client
) {
    companion object {
        private val logger = LoggerFactory.getLogger(PipelineElementService::class.java)
    }

    fun fillElementWhenNewBuild(
        model: Model,
        projectId: String,
        pipelineId: String,
        startValues: Map<String, String>? = null,
        startParamsMap: M


。反之，通过与补集的结合（利用德摩根定律），可数交封闭性也得到保证，允许智能体识别多个属性同时满足的情况（如"红色且圆形的物体"）。若缺乏这些封闭性，概念系统将是扁平的、离散的，难以形成复杂的概念结构和进行有效的推理。
        - **有限性 vs. 可数无限性**：为何要求"可数并"而非仅仅"有限并"？在许多现实和理论情境中，我们需要处理可数无限个基本事件构成的复杂事件（例如，在连续空间中定义区间，或在概率论中考虑一个事件可以通过可数多种互斥方式发生）。要求对可数并封闭，使得理论更具普适性和数学上的良好性质，例如能够定义极限和收敛等重要概念，这对于处理动态和连续变化的认知过程至关重要。

**"为何如此"的进一步阐释——认知系统的"操作系统"**：

可以把一个智能体的认知 σ-代数 \(\mathcal{F}\) 想象成其心智的"操作系统"中负责管理"文件类型"或"可识别数据结构"的模块。如果这个模块设计不良：

- **操作导致"未定义"结果**：对已识别范畴的逻辑组合（如取并集、交集、补集）可能会产生一个系统无法识别或处理的"新范畴"，这类似于在计算机中对某种类型的文件执行了不兼容的操作，导致程序崩溃或输出无意义的结果。
- **概念系统的"漏洞"与"碎片化"**：智能体可能无法形成对某些复杂情境或抽象概念的稳定表征，因为其底层的范畴构建规则存在缺陷，导致其世界模型支离破碎，充满"盲点"和不一致性。
- **阻碍学习与适应**：如果基本的范畴操作都不稳定或不可靠，那么更高层次的学习（如规则学习、因果推断）将难以建立。智能体将难以从经验中有效地提取模式和规律。

因此，σ-代数的规范性要求，是构建一个**稳健 (robust)**、**内部一致 (internally consistent)**、且具有**表达能力 (expressive power)** 的概念系统的基础。它为智能体提供了一个稳定的"论域"，在这个论域中，信息可以被可靠地表征、操作和量化。没有这样的基础，后续的"测度"（赋予意义或权重）和"积分"（信息聚合）都将是空中楼阁。

#### 2.1.2. 认知实现：从感知分组到抽象概念

虽然人类认知不太可能严格按照数学


----------------------------------------------------------------------------------------------------
-- SEASON INTRO SCRIPT
----------------------------------------------------------------------------------------------------
-- Purpose:  A small display that shows information on the season at season start
-- Authors:  Rahkiin
--
-- Copyright (c) Realismus Modding, 2017
----------------------------------------------------------------------------------------------------

ssSeasonIntro = {}

function ssSeasonIntro:preLoad()
    g_seasons.seasonIntro = self
end

function ssSeasonIntro:load(savegame, key)
    self.hideSeasonIntro = ssXMLUtil.getBool(savegame, key .. ".settings.hideSeasonIntro", false)
end

function ssSeasonIntro:save(savegame, key)
    ssXMLUtil.setBool(savegame, key .. ".settings.hideSeasonIntro", self.hideSeasonIntro)
end

function ssSeasonIntro:loadMap(name)
    g_seasons.environment:addSeasonChangeListener(self)

    self.showSeasonChanged = false
end

function ssSeasonIntro:update(dt)
    if self.showSeasonChanged == true and g_gui.cu


options {
    @apply text-textWeak;
  }

  .path-method-head {
    @apply text-textBrand;
  }

  .subpaths-header {
    display: flex;
    cursor: pointer;
    @apply hover:bg-fillHover py-3 px-2 w-full items-center justify-between;
  }

  .htmx-indicator {
    display: none;
  }

  .htmx-request.htmx-indicator {
    display: flex;
  }

  .btn-secondary {
    @apply text-textBrand border border-strokeBrand-strong rounded-lg font-semibold;
  }

  .htmx-request.survey-indicator + button {
    display: none;
  }
  .htmx-request.htmx-indicator ~ span {
    display: none;
  }

  .htmx-request.query-indicator {
    display: flex;
  }

  .htmx-request.refresh-indicator ~ svg {
    display: none;
  }

  .htmx-request.htmx-indicator {
    display: flex;
  }

  .htmx-request.htmx-indicator ~ span {
    display: none;
  }

  .htmx-request.steps-indicator > .empty-state {
    display: none;
  }

  .htmx-request.steps-indicator > .loading-indicator {
    display: block;
  }

  /* Dark mode overrides */
  [data-theme="dark"] {
    /* Background colors - Dark theme */
    --color-bgAlternate: oklch(20.1% 0.015 263);
    --color-bgBase: oklch(16.4% 0.012 263);
    --color-bgInverse: rgb(255 255 255);
    --color-bgOverlay: oklch(26.4% 0.012 263);
    --color-bgRaised: oklch(22.0% 0.010 263);
    --color-bgSunken: rgb(0 0 0);
    --color-bgBrand: rgb(59 130 246);

    /* Fill colors - Dark theme */
    --color-fillBrand-strong: rgb(59 130 246);
    --color-fillBrand-weak: rgba(59 130 246 / 0.15);
    --color-fillDisabled: rgba(255 255 255 / 0.12);
    --color-fillStrong: rgb(255 255 255);
    --color-fillError-strong: oklch(77.2% 0.126 21);
    --color-fillError-weak: rgba(255 156 156 / 0.08);
    --color-fillHover: rgba(255 255 255 / 0.06);
    --color-fillInformation-strong: oklch(75.5% 0.098 241);
    --color-fillInformation-weak: rgba(126 192 229 / 0.08);
    --color-fillInverseDisabled: rgba(0 17 102 / 0.1);
    --color-fillInverse-hover: rgba(0 21 128 / 0.04);
    --color-fillInverse-press: rgba(0 17 102 / 0.1);
    --color-fillInverse-strong: oklch(16.4% 0.012 263);
    --color-fillInverse-weak: rgba(0 21 128 / 0.04);
    --color-fillOverlay: rgba(0 6 38 / 0.9);
    --color-fillPress: rgba(255 255 255 / 0.12);
    --color-fillSelected: rgb(59 130 246);
    --color-fillSuccess-strong: oklch(75.3% 0.092 162);
    --color-fillSuccess-weak: rgba(119 199 175 / 0.08);
    --color-fillWarning-strong: oklch(79.5% 0.106 92);
    --color-fillWarning-weak: rgba(224 190 112 / 0.08);
    --color-fillWeak: rgba(255 255 255 / 0.06);
    --color-fillWeaker: rgba(255 255 255 / 0.03);
    --color-fillWhite: rgb(255 255 255);
    --color-fillYellow: oklch(85.8% 0.179 9


oo-ui-indicatorElement-indicator';

@media screen {
	/**
	 * Light mode
	 *
	 * Applies the light mode color palette by default
	 * or with the .skin-invert, or .notheme classes
	 */
	:root,
	.skin-invert,
	.notheme {
		.cdx-mode-reset();
	}

	/**
	 * Forced night mode.
	 *
	 * Applies the night mode color palette per the users explicit preference,
	 * regardless of system settings.
	 */
	html.skin-theme-clientpref-night {
		color-scheme: dark;
		.cdx-mode-dark();
	}

	/**
	 * Inverted Dark-mode
	 * Creates a dark-mode effect on elements by flipping their color,
	 * (usually from black to white).
	 * Applied as a last resort when using CSS variables is not possible.
	 * NOTE: `.skin-invert` is used in templates and user generated content.
	 *
	 * - T365102 invert class specifically for image related element
	 * - T365764 special treatment of inverted OOUI icons
	 */
	html.skin-theme-clientpref-night .skin-invert-image img,
	html.skin-theme-clientpref-night .skin-invert,
	html.skin-theme-clientpref-night @{OOUIIconSelectors},
	html.skin-theme-clientpref-night @{OOUIIndicatorSelectors} {
		color-scheme: light;
		filter: invert( 1 ) hue-rotate( 180deg );
	}

	/**
	 * Forced light mode.
	 * Makes elements appear in light-mode when dark-mode is enabled.
	 * NOTE: might be used in templates and user generated content.
	 */
	html.skin-theme-clientpref-night .notheme {
		color-scheme: light;
		color: var( --color-base );
	}

	/**
	 * Prevent double inversion.
	 * Do not apply invert to elements that are inside a notheme or a skin-invert class to avoid inversion in light theme or
	 * double inversion in an already inverted element
	 * - OOUI icons inside .notheme OOUI elements
	 * - OOUI icons inside elements with .skin-invert
	 * - OOUI icons inside elements with .notheme
	 */
	.skin-invert,
	.notheme {
		@{OOUIIndicatorSelectors},
		@{OOUIIconSelectors} {
			filter: none !important; /* stylelint-disable-line declaration-no-important */
		}
	}

	/**
	 * Font size settings
	 *
	 * TODO: Temporary workaround to prevent Codex messages from scaling with text size T391890.
	 * Remove the workaround once font size modes are fully integrated in Vector.
	 */
	.vector-feature-custom-font-size-clientpref--excluded,
	.vector-feature-custom-font-size-clientpref-0,
	.mw-body-content .cdx-message {
		--font-size-medium: @font-size-small;
		--line-height-medium: @line-height-small;
	}

	.vector-feature-custom-font-size-clientpref-1 {
		--font-size-medium: @font-size-medium;
		--line-height-medium: @line-height-medium;
	}

	.vector-feature-custom-font-size-clientpref-2 {
		--font-size-medium: @font-size-x-large;
		--line-height-medium: 1.5;
	}
}

/**
 * Auto night mode.
 *
 * Applies the night mode color palette only in response to system settings.
 */
@media screen and ( prefers-color-scheme: dark ) {
	html.skin-theme-clientpref-os {
		color-scheme: light dark;
		.cdx-mode-dark();
	}

	html.skin-theme-clientpref-os .notheme {
		color-scheme: light;
		color: var( --color-base );
	}

	// T365102 invert class specifically for image related elements
	html.skin-theme-cl


perMilleSymbol;
            }
            set
            {
                if (value == null)
                {
                    throw new ArgumentNullException("PerMilleSymbol", Environment.GetResourceString("ArgumentNull_String"));
                }
                this.VerifyWritable();
                this.perMilleSymbol = value;
            }
        }

        public string PositiveInfinitySymbol
        {
            get
            {
                return this.positiveInfinitySymbol;
            }
            set
            {
                if (value == null)
                {
                    throw new ArgumentNullException("PositiveInfinit


 and
limitations under the License.
*/

package pointer

import (
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/utils/ptr"
)

// LateInitialize return from if current matches the default value of T.
// Otherwise it returns current.
func LateInitialize[T comparable](current, from T) T {
	var defaultVal T
	if current == defaultVal {
		return from
	}
	return current
}

// LateInitializeValueFromPtr returns from if current matches the default value
// of T. Otherwise it returns from or the default value if from is nil as well.
func LateInitializeValueFromPtr[T comparable](current T, from *T) T {
	var defaultVal T
	if current == defaultVal {
		return ptr.Deref(from, defaultVal)
	}
	return current
}

// LateInitializeSlice returns from if current is nil and from is not empty.
// Otherwise it returns current.
func LateInitializeSlice[T any](current, from []T) []T {
	if current != nil || len(from) == 0 {
		return current
	}
	return from
}

// LateInitializeIntFrom32Ptr returns in if it's non-nil, otherwise returns from
// which is the backup for the cases in is nil.
// This function considered that nil and 0 values are same.
// However, for a *int32, nil and 0 values must be different
// because if the external AWS resource has a field with 0 value, during late
// initialization setting this value
// in CR must be allowed. Please see the LateInitializeIntFromInt32Ptr func.
func LateInitializeIntFrom32Ptr(in *int, from *int32) *int {
	if in != nil {
		return in
	}
	if from != nil && *from != 0 {
		i := int(*from)
		return &i
	}
	return nil
}

// LateInitializeIntFromInt32Ptr returns in if it's non-nil, otherwise returns from
// which is the backup for the cases in is nil.
func LateInitializeIntFromInt32Ptr(in *int, from *int32) *int {
	if in != nil {
		return in
	}

	if from != nil {
		i := int(*from)
		return &i
	}

	return nil
}

// LateInitializeTimePtr returns in if it's non-nil, otherwise returns from
// which is the backup for the cases in is nil.
func LateInitializeTimePtr(in *metav1.Time, from *time.Time) *metav1.Time {
	if in != nil {
		return in
	}
	if from != nil {
		t := metav1.NewTime(*from)
		return &t
	}
	return nil
}
/*
Copyright 2023 The Crossplane Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Deprecated use the policy package that contains better parser support.
package legacypolicy

import (
	"bytes"
	"encoding/json"
	"net/url"

	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"k8s.io/utils/ptr"
)

// CompactAndEscapeJSON removes space characters and URL-encodes the JSON string.
func CompactAndEscapeJSON(s string) (string, error) {
	buffer := new(bytes.Buffer)
	if err := json.Compact(buffer, []byte(s)); err != nil {
		return "", err
	}
	return url.QueryEscape(buffer.String()), nil
}

// IsPolicyUpToDate Marshall policies to json for a compare to get around string ordering
func I


64;

  if (Opnd.getValueType() == MVT::i64)
    In64 = initAccumulator(Opnd, DL, DAG);
  else
    Ops.push_back(Opnd);

  // Push the remaining operands.
  for (++OpNo ; OpNo < Op->getNumOperands(); ++OpNo)
    Ops.push_back(Op->getOperand(OpNo));

  // Add In64 to the end of the list.
  if (In64.getNode())
    Ops.push_back(In64);

  // Scan output.
  SmallVector<EVT, 2> ResTys;

  for (SDNode::value_iterator I = Op->value_begin(), E = Op->value_end();
       I != E; ++I)
    ResTys.push_back((*I == MVT::i64) ? MVT::Untyped : *I);

  // Create node.
  SDValue Val = DAG.getNode(Opc, DL, ResTys, Ops);
  SDValue Out = (ResTys[0] == MVT::Untyped) ? extractLOHI(Val, DL, DAG) : Val;

  if (!HasChainIn)
    return Out;

  assert(Val->getValueType(1) == MVT::Other);
  SDValue Vals[] = { Out, SDValue(Val.getNode(), 1) };
  return DAG.getMergeValues(Vals, DL);
}

// Lower an MSA copy intrinsic into the specified SelectionDAG node
static SDValue lowerMSACopyIntr(SDValue Op, SelectionDAG &DAG, unsigned Opc) {
  SDLoc DL(Op);
  SDValue Vec = Op->getOperand(1);
  SDValue Idx = Op->getOperand(2);
  EVT ResTy = Op->getValueType(0);
  EVT EltTy = Vec->getValueType(0).getVectorElementType();

  SDValue Result = DAG.getNode(Opc, DL, ResTy, Vec, Idx,
                               DAG.getValueType(EltTy));

  return Result;
}

static SDValue lowerMSASplatZExt(SDValue Op, unsigned OpNr, SelectionDAG &DAG) {
  EVT ResVecTy = Op->getValueType(0);
  EVT ViaVecTy = ResVecTy;
  bool BigEndian = !DAG.getSubtarget().getTargetTriple().isLittleEndian();
  SDLoc DL(Op);

  // When ResVecTy == MVT::v2i64, LaneA is the upper 32 bits of the lane and
  // LaneB is the lower 32-bits. Otherwise LaneA and LaneB are alternating
  // lanes.
  SDValue LaneA = Op->getOperand(OpNr);
  SDValue LaneB;

  if (ResVecTy == MVT::v2i64) {
    // In case of the index being passed as an immediate value, set the upper
    // lane to 0 so that the splati.d instruction can be matched.
    if (isa<ConstantSDNode>(LaneA))
      LaneB = DAG.getConstant(0, DL, MVT::i32);
    // Having the index passed in a register, set the upper lane to the same
    // value as the lower - this results in the BUILD_VECTOR node not being
    // expanded through stack. This way we are able to pattern match the set of
    // nodes created here to splat.d.
    else
      LaneB = LaneA;
    ViaVecTy = MVT::v4i32;
    if(BigEndian)
      std::swap(LaneA, LaneB);
  } else
    LaneB = LaneA;

  SDValue Ops[16] = { LaneA, LaneB, LaneA, LaneB, LaneA, LaneB, LaneA, LaneB,
                      LaneA, LaneB, LaneA, LaneB, LaneA, LaneB, LaneA, LaneB };

  SDValue Result = DAG.getBuildVector(
      ViaVecTy, DL, makeArrayRef(Ops,


's output, so we need to have a
small wrapper around it so that Meson can correctly detect the underlying rustc,
but still display clippy

## Force Visual Studio environment activation

Since `0.59.0`, meson automatically activates Visual Studio environment on Windows
for all its subcommands, but only if no other compilers (e.g. `gcc` or `clang`)
are found, and silently continue if Visual Studio activation fails.

`meson setup --vsenv` command line argument can now be used to force Visual Studio
activation even when other compilers are found. It also make Meson abort with an
error message when activation fails. This is especially useful for GitHub Actions
because their Windows images have gcc in their PATH by default.

`--vsenv` is set by default when using `vs` backend.

Only `setup`, `compile`, `dist` and `devenv` subcommands now activate Visual Studio.

## MSVC compiler now assumes UTF-8 source code by default

Every project that uses UTF-8 source files had to add manually `/utf-8` C/C++
compiler argument for MSVC otherwise they wouldn't work on non-English locale.
Meson now switched the default to UTF-8 to be more consistent with all other
compilers.

This can be overridden but using `/source-charset`:
```meson
if cc.get_id() == 'msvc'
  add_project_arguments('/source-charset:.XYZ', language: ['c', 'cpp'])
endif
```

See Microsoft documentation for details:
https://docs.microsoft.com/en-us/cpp/build/reference/source-charset-set-source-character-set.

## Add support for `find_library` in Emscripten

The `find_library` method can be used to find your own JavaScript
libraries. The limitation is that they must have the file extension
`.js`. Other library lookups will look up "native" libraries from the
system like currently. A typical usage would look like this:

```meson
glue_lib = cc.find_library('gluefuncs.js',
                           dirs: meson.current_source_dir())
executable('prog', 'prog.c',
           dependencies: glue_lib)
```

## Optional `custom_target()` name

The name argument is now optional and defaults to the basename of the first
output.

## Ejercios Evaluados - Sentencias condicionales e iterativas (II)

### [Mayor a: ](https://github.com/Cy5k0/Ejercicios_Evaluados_Python/blob/main/03/mayor_a.py)

Una empresa provee de los balances del año anterior en un diccionario como se muestra a
continuación:
`ventas = {
"Enero": 15000,
"Febrero": 22000,
"Marzo": 12000,
"Abril": 17000,
"Mayo": 81000,
"Junio": 13000,
"Julio": 21000,
"Agosto": 41200,
"Septiembre": 25000,
"Octubre": 21500,
"Noviembre": 91000,
"Diciembre": 21000,
}`

Se usan 3 funciones, una función ***ventas_mayores(valor)*** donde en la cual se realiza el flitrado de los valores según la variable ingresada mediante la función ***obtener_valor_objetivo()***, y por útlimo una función ***filtrado_valores()*** la cual trae la lista filtrada para imprimir el resultado.

##### Variables:

- valor_objetivo : Almacena el valor, de forma de un *int*, para efectuar la comparacion y buscar en el diccionario los mayores a dicho valor.
- filtrado : Variable tipo diccionario, el cual presenta el diccionario original ya filtrado.
- venta : Contiene el valor del diccion


Ů': 'U',
        'ů': 'u',
        'Ű': 'U',
        'ű': 'u',
        'Ų': 'U',
        'ų': 'u',
        'Ŵ': 'W',
        'ŵ': 'w',
        'Ŷ': 'Y',
        'ŷ': 'y',
        'Ÿ': 'Y',
        'Ź': 'Z',
        'ź': 'z',
        'Ż': 'Z',
        'ż': 'z',
        'Ž': 'Z',
        'ž': 'z',
        'ſ': 's',
    },
    "Greek": {
        'Α': 'Alpha',
        'Β': 'Beta',
        'Γ': 'Gamma',
        'Δ': 'Delta',
        'Ε': 'Epsilon',
        'Ζ': 'Zeta',
        'Η': 'Eta',
        'Θ': 'Theta',
        'Ι': 'Iota',
        'Κ': 'Kappa',
        'Λ': 'Lambda',
        'Μ': 'Mu',
        'Ν': 'Nu',
        'Ξ': 'Xi',
        'Ο': 'Omnicron',
        'Π': 'Pi',
        'Ρ': 'Rho',
        'Σ': 'Sigma',
        'Τ': 'Tau',
        'Υ': 'Upsilon',
        'Φ': 'Phi',
        'Χ': 'Chi',
        'Ψ': 'Psi',
        'Ω': 'Omega',
        'α': 'alpha',
        'β': 'beta',
        'γ': 'gamma',
        'δ': 'delta',
        'ε': 'epsilon',
        'ζ': 'zeta',
        'η': 'eta',
        'θ': 'theta',
        'ι': 'iota',
        'κ': 'kappa',
        'λ': 'lambda',
        'μ': 'mu',
        'ν': 'nu',
        'ξ': 'xi',
        'ο': 'omnicron',
        'π': 'pi',
        'ρ': 'rho',
        'σ': 'sigma',
        'τ': 'tau',
        'υ': 'upsilon',
        'φ': 'phi',
        'χ': 'chi',
        'ψ': 'psi',
        'ω': 'omega',
    },
    "General Punctuation": {
        '‰': 'permille',
        '‱': 'permyriad',
        '⁒': 'minus', // commercial minus
    },
    "Currency Symbols": {
        '₠': 'ecu',
        '₡': 'colon',
        '₢': 'cruzeiro',
        '₣': 'french franc',
        '₤': 'lira',
        '₥': 'mill',
        '₦': 'naira',
        '₧': 'peseta',
        '₨': 'rupee',
        '₩': 'won',
        '₪': 'new shequel',
        '₫': 'dong',
        '€': 'euro',
        '₭': 'kip',
        '₮': 'tugrik',
        '₯': 'drachma',
        '₰': 'german penny',
        '₱': 'peso',
        '₲': 'guarani',
        '₳': 'austral',
        '₴': 'hryvnia',
        '₵': 'cedi',
        '₶': 'livre tournois',
        '₷': 'spesmilo',
        '₸': 'tenge',
        '₹': 'indian rupee',
        '₺': 'turkish lira',
        '₻': 'nordic mark',
        '₼': 'manat',
        '₽': 'ruble',
        '₾': 'lari',
        '₿': 'bitcoin',
    },
    "Letterlike Symbols": {
        '℃': 'Celsius',
        'ℇ': 'e', // euler constant
        '℉': 'Fahrenheit',
        '℗': 'P',
        '℠': 'SM',
        '™': 'TM',
    },
    "Mathematical Operators": {
        '∀': 'for all',
        '∃': 'exists',
        '∅': 'empty set',
        '∈': 'in',
        '∊': 'in',
        '∋': 'conta


rotected override void Dispose(bool disposing)
        {
            if(this.ColorPickerPalette1 != null)
            {
                this.ColorPickerPalette1.Dispose();
                this.ColorPickerPalette1 = null;
            }

            if (this.ColorPickerPalette2 != null)
            {
                this.ColorPickerPalette2.Dispose();
                this.ColorPickerPalette2 = null;
            }

            if (this.ColorPickerPalette3 != null)
            {
                this.ColorPickerPalette3.Dispose();
                this.ColorPickerPalette3 = null;
            }

            if (cmbothemecolors != null)
            {
                cmbothemecolors.Dispose();
                cmbothemecolors = null;
            }

            base.Dispose(disposing);
        }
    }
}


     vldr    d31, Loop_54+104
        vmov.i32        q14, #8388608  @ v4si
        vdup.32 q13, d7[1]
Loop_12:
        vld1.32 {d20-d21}, [r5]!
        add     ip, ip, #1
        vmov.i32        q3, #127  @ v4si
        cmp     r4, ip
        vsub.f32        q10, q10, q13
        vmax.f32        q10, q10, q15
        vmin.f32        q10, q10, q2
        vmul.f32        q9, q10, q6
        vcvt.s32.f32    q9, q9
        vcvt.f32.s32    q8, q9
        vadd.i32        q9, q9, q3
        vmul.f32        q8, q8, q7
        vmul.i32        q9, q9, q14
        vsub.f32        q10, q10, q8
        vmul.f32        q8, q1, q10
        vadd.f32        q8, q8, q0
        vmul.f32        q8, q8, q10
        vadd.f32        q8, q8, q4
        vmul.f32        q8, q8, q10
        vadd.f32        q8, q8, q5
        vmul.f32        q8, q8, q10
        vadd.f32        q8, q8, q12
        vmul.f32        q8, q8, q10
        vadd.f32        q8, q8, q12
        vmul.f32        q9, q9, q8
        vadd.f32        q11, q9, q11
        vst1.32 {d18-d19}, [lr]!
        bgt     Loop_12
        vmov.32 ip, d22[0]
        vldr.32 s15, [sp, #4]
        cmp     r2, r3
        vmov    s12, ip
        vmov.32 ip, d22[1]
        vmov    s11, ip
        vmov.32 ip, d23[0]
        vadd.f32        s12, s12, s11
        vmov    s13, ip
        vmov.32 ip, d23[1]
        vadd.f32        s12, s12, s13
        vmov    s14, ip
        vadd.f32        s12, s12, s14
        bls     Loop_52
Loop_26:
        lsl     ip, r3, #2
        add     r5, r1, r2, lsl #2
        add     lr, r1, ip
        movw    r7, #13877
        movt    r7, 179
        movw    r6, #55317
        movt    r6, 32310
        vldr.32 s11, Loop_54+112
        vldr.32 s10, Loop_54+116
        add     r1, r0, ip
        vldr.32 s9, Loop_54+120
        vmov.f32        s8, #5.0e-1
        vldr.32 s5, Loop_54+124
        vldr.32 s6, Loop_54+128
        vldr.32 s7, Loop_54+132
Loop_17:
        vldmia.32       lr!, {s14}
        vmov    s13, r6
        vsub.f32        s14, s14, s15
        vcmpe.f32       s14, s11
        vmrs    APSR_nzcv, FPSCR
        vmovle  s13, r7
        ble     Loop_14
        vcmpe.f32       s14, s10
        vmrs    APSR_nzcv, FPSCR
        bmi     Loop_53
Loop_14:
        vadd.f32        s12, s12, s13
        cmp     r5,


 MetaRenamer : public ModulePass {
    static char ID; // Pass identification, replacement for typeid
    MetaRenamer() : ModulePass(ID) {
      initializeMetaRenamerPass(*PassRegistry::getPassRegistry());
    }

    void getAnalysisUsage(AnalysisUsage &AU) const override {
      AU.setPreservesAll();
    }

    bool runOnModule(Module &M) override {
      // Seed our PRNG with simple additive sum of ModuleID. We're looking to
      // simply avoid always having the same function names, and we need to
      // remain deterministic.
      unsigned int randSeed = 0;
      for (auto C : M.getModuleIdentifier())
        randSeed += C;

      Renamer renamer(randSeed);

      // Rename all aliases
      for (auto AI = M.alias_begin(), AE = M.alias_end(); AI != AE; ++AI) {
        StringRef Name = AI->getName();
        if (Name.startswith("llvm.") || (!Name.empty() && Name[0] == 1))
          continue;

        AI->setName("alias");
      }

      // Rename all global variables
      for (auto GI = M.global_begin(), GE = M.global_end(); GI != GE; ++GI) {
        StringRef Name = GI->getName();
        if (Name.startswith("llvm.") || (!Name.empty() && Name[0] == 1))
          continue;

        GI->setName("global");
      }

      // Rename all struct types
      TypeFinder StructTypes;
      StructTypes.run(M, true);
      for (StructType *STy : StructTypes) {
        if (STy->isLiteral() || STy->getName().empty()) continue;

        SmallString<128> NameStorage;
        STy->setName((Twine("struct.") +
          renamer.newName()).toStringRef(NameStorage));
      }

      // Rename all functions
      for (auto &F : M) {
        StringRef Name = F.getName();
        if (Name.startswith("llvm.") || (!Name.empty() && Name[0] == 1))
          continue;

        F.setName(renamer.newName());
        runOnFunction(F);
      }
      return true;
    }

    bool runOnFunction(Function &F) {
      for (auto AI = F.arg_begin(), AE = F.arg_end(); AI != AE; ++AI)
        if (!AI->getType()->isVoidTy())
          AI->setName("arg");

      for (auto &BB : F) {
        BB.setName("bb");

        for (auto &I : BB)
          if (!I.getType()->isVoidTy())
            I.setName("tmp");
      }
      return true;
    }
  };
}

char MetaRenamer::ID = 0;
INITIALIZE_PASS(MetaRenamer, "metarenamer",
                "Assign new names to everything", false, false)
//===----------------------------------------------------------------------===//
//
// MetaRenamer - Rename everything with metasyntactic names.
//
ModulePass *llvm::createMetaRenamerPass() {
  return new MetaRenamer();
}
//===- CloneFunction.cpp - Clone a function into another function ---------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the CloneFunctionInto interface, which is used as the
// low-level function cloner.  This is used by the CloneFunction and function
// inliner to do the dirty work of copying the body of a function around.
//
//===----------------------------------------------------------------------===//

#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/ADT/SetVector.h